سؤال

أنا أتساءل عن كيفية عرض NES على عضلاتها الرسومية. لقد بحثت عن الأشياء عبر الإنترنت وقرأت من خلالها ، لكنني أتساءل عن شيء أخير: Nametables.

في الأساس ، من ما قرأته ، يشير كل كتلة 8 × 8 في NES Nametable إلى موقع في جدول الأنماط ، والذي يحمل ذاكرة رسومية. بالإضافة إلى ذلك ، يحتوي Nametable أيضًا على جدول سمات يضع لوحة ألوان معينة لكل كتلة 16 × 16. يرتبطون معًا مثل هذا:

(بافتراض 16 8 × 8 كتل) nametable ، مع ABCD = مؤشرات لبيانات العفريت:

ABBB
CDCC
DDDD
DDDD

جدول السمة ، مع 1 2 3 = مؤشرات لبيانات لوحة الألوان ، مع <قيمة المرجع إلى اليسار ، ^ أعلاه ، و "إلى اليسار وما فوق:

1<2<
^'^'
3<3<
^'^'

لذلك ، في المثال أعلاه ، سيتم تلوين الكتل كما

1A 1B 2B 2B

1C 1D 2C 2C

3D 3D 3D 3D

3D 3D 3D 3D

الآن ، إذا كان لدي هذا على شاشة ثابتة - فهو يعمل بشكل رائع! لأن دقة NES هي 256x240 بكسل. الآن ، كيف يتم ضبط هذه الجداول للتمرير؟

نظرًا لأن Nametable 0 يمكن أن يتم التمرير إلى Nametable 1 ، وإذا استمرت في التمرير Nametable 0 ، فسيتم لفها مرة أخرى. التي أحصل عليها. لكن ما لا أحصل عليه هو كيفية تمرير جدول السمات يلف أيضًا. من ما قرأته عبر الإنترنت ، فإن الحظر 16x16 الذي يعينه سيؤدي إلى تشوهات اللون على بلاط الحافة على الشاشة (كما هو موضح عند التمرير إلى اليسار إلى اليمين والعكس بالعكس في SMB3).

القلق الذي أمتلكه هو أنني أفهم كيفية تمرير Nametables ، ولكن كيف يمكنك التمرير لجدول السمات؟ من أجل intsance ، إذا كان لدي كتلة خضراء على الجانب الأيسر من الشاشة ، فإن تحريك الشاشة إلى اليمين يجب أن يتسبب من الناحية النظرية في أن يكون البلاط إلى اليمين ليكون أخضر أيضًا حتى ينتقلوا أكثر إلى الإطار ، والذي سيعودون إليه ألوانها العادية.

~~~~ تحرير: أريد أن أشير إلى أنني أعرف عن خطوط المسح ، X و Y. هذا الفكر كان يمر في ذهني.

دعنا نقول أنني في Scanline y من 10. هذا يعني أنني أقرأ 10 قيم في Nametables ، أفقيًا. هذا يعني أن العمود الأول الخاص بي هو خارج الشاشة ، حيث أنه يحتوي فقط على عرض البكسل 8. ومع ذلك ، فإن سمة اللون تبقى ، لأنه يبلغ عرضه 16.

على افتراض أن سمة اللون للعمود بأكمله خضراء ، هل سأكون محقًا في افتراض أنه بالنسبة للمستخدم ، فإن أول 6 بكسل على يسار الشاشة سيكون اللون الأخضر ، ويجب أن يكون أقصى 10 على الشاشة خضراء أيضًا؟ لذا ، هل سأكون محقًا في افتراض أنه وفقًا للشاشة ، اليسار؟

هل كانت مفيدة؟

المحلول

هذا الموقع أنا متأكد من أنك بالفعل على دراية جدًا. سأقوم بتقديم هذا بالقول إنني لم أتمكن أبدًا من برنامج NES ، لكنني من ذوي الخبرة الشديد مع جميع أجهزة Gameboy التي تم إصدارها على الإطلاق ، وتشارك NES العديد من المراوغات مع GB/DMG. سأراهن على أنك إما بحاجة إلى القيام بواحد من الأشياء القليلة:

  1. لا تمرر جدول السمات. تأكد من أن جميع مستوياتك تحتوي على كتل ألوان متماثلة على طول الاتجاه الذي تتحرك فيه. أعتقد أن العديد من ألعاب الجيل الأول فعلت هذا.

  2. المضي قدما واترك التمرير المحدود للسمات - فقط تأكد من أن المناطق التي تحدث فيها التغييرات إما مشتركة جزئيًا أو متفرقة بدرجة كافية بحيث لن يكون التغيير ملحوظًا.

  3. احصل على جهاز توقيت Skool Atari 2600 القديم ووقت الكتابة لتسجيل 2006 دولار في نهاية تحديث Hblank للحصول على مبادلة اللون التي تحتاجها ، انتظر بعض التشنجات اللاإرادية ، ثم العودة خلال فترة إرجاع Hblank بحيث تكون الحافة اليسرى للآخر الخط لا يتأثر. لدي شعور أن هذا هو الحل المستخدم في أغلب الأحيان ، ولكن بدون محاكي وصبر جيد حقًا ، سيكون ألمًا في المؤخرة. سوف يأكل أيضًا قليلاً في استخدام وحدة المعالجة المركزية بشكل عام حيث يتعين عليك الانتظار في المقاطعات على خطوط مسح متعددة لإنجاز تأثيرك.

أتمنى لو كان لدي إجابة ملموسة لك ، لكن هذا نأمل أن يساعد قليلاً. شكرًا ، كان لدى GB/DMG نظام تمرير أكثر تقدماً قليلاً. قون

نصائح أخرى

يعرض كل من Super Mario Bros. 3 و Kirby's Adventure Coloring Artifacts على حافة الشاشة عند التمرير. أعتقد أن كلتا المباراتين تحددان بعض الشيء الذي يطوّع بنسبة 8 بكسل اليسرى من الشاشة ، لذلك ستتأثر 0-8 بكسل على أي إطار واحد.

إذا كنت أتذكر بشكل صحيح ، فإن مغامرة Kirby تحاول دائمًا وضع الأعمدة الملونة على جانب الشاشة التي يتم تمريرها لجعلها أقل وضوحًا. لا أعتقد أن هذه القطع الأثرية يمكن الوقاية منها دون التحول إلى النسخ المتطابق الرأسي ، والتي تقدم صعوبات خاصة بها.

إخلاء المسئولية: لقد مر خمس سنوات منذ أن كتبت أي رمز NES.

كل nametable له جدول السمات الخاص به ، لذلك يجب ألا يكون هناك أي قطعة أثرية رسومية عند التمرير من أحدهم إلى آخر. إن نوع خلع اللون الذي تشير إليه هو مجرد مشكلة فقط إذا كانت لعبتك تنتشر بشكل رأسي وعفوي. لديك فقط اثنين من المواد المميزة ، لذا فإن التمرير في كلا الاتجاهين يتطلب منك أن تنشط الشاشة المرئية. هناك حلول مختلفة لهذه المشكلة ، يمكن العثور على ملخص كبير في منشور Nesdev هذا:

http://nesdev.parodius.com/bbs/viewtopic.php؟p=58509#58509

قد يكون هذا الموقع بعض المساعدة.http://www.games4nintendo.com/nes/faq.php#4

(ابحث عن "ما الأمر مع 2005/2006 دولار؟" وابدأ في القراءة حول هذا المجال.)

يبدو أنه من المستحيل الحصول على بكسل مثالي ، ولكن هذه ستكون البتات التي من المحتمل أن تحتاج إلى النظر فيها.

أتمنى أن أكون مزيد من المساعدة.

كل nametable له جدول السمة الخاص به. إذا قمت بحد عالم لعبتك على شاشتين فقط ، فستحتاج فقط إلى كتابة الجداول Nametables ومواجهة مرة واحدة. يأتي الجزء الصعب عندما تحاول جعل العوالم أكبر من شاشتين. قام Super Mario Bros. 1 بذلك عن طريق التمرير إلى اليمين ، واللفه حسب الضرورة ، وإعطاء عمود المستوى الأول من الكتل في وقت واحد (16 بكسل) قبل عرض هذا العمود. لا أعرف كيف يمكن للمرء أن يرمز هذا بكفاءة (ضع في اعتبارك أن لديك سوى ميلي ثانية من وقت vblank).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top