THOMAS حية: كل الحق.
مرحبا للجميع.
أنا توماس حية.
هذه الندوة ستكون الكتابة ألعاب 2D في C باستخدام SDL.
إذا كنت لا تعرف أنك كل يسأل، نعم، أنا حقا
تريد أن تلعب مباريات وجعل الألعاب، ولكن ما هو هذا العمل SDL؟
حتى SDL هي مكتبة C.
لأنها تقف على بسيط طبقة دايركت.
وانها عبر منصة، مكتبة تطوير اللعبة.
وهو يعمل على ويندوز، ماك، لينكس، وحتى دائرة الرقابة الداخلية والروبوت.
أنه يتعامل مع أشياء مثل الوصول إلى أنظمة الصوت
للكمبيوتر، لوحة المفاتيح، و الماوس، المقود، لو انهم المرفقة.
على الهاتف المحمول، فإنه يمكن القيام به حتى الإدخال باللمس وكل ذلك.
وبطبيعة الحال، فإنه يتعامل مع الرسومات، رسم الأشياء على الشاشة.
>> حتى انها تستخدم على نطاق واسع جدا أنه، على الرغم من قد لا يكون سمع به من قبل.
انها بنيت في، على سبيل المثال، محرك مصدر صمام،
التي القوى ألعاب مثل بوابة وفريق القلعة 2.
انها أيضا في عدد كبير جدا ألعاب إيندي أن يخرج،
لذلك أنا متحمس لرؤية ما جميع سيتم اتخاذ معها.
>> أهداف الندوة هي لتحصل على المبينة لتكون النامية SDL.
ونحن في طريقنا لمعرفة كيف لخلق إطار اللعبة.
ونحن في طريقنا لخلق العفاريت، وهي الصور في اللعبة
التي يمكن ان تتحرك حولها.
ونحن في طريقنا لمعرفة كيف لوتحريك العفاريت،
لذلك تحرك حول لهم، وجعل منهم تتغير بمرور الوقت.
ونحن في طريقنا لمعرفة كيف لالتقاط وحة المفاتيح والفأرة
المدخلات من الكمبيوتر.
ما نحن لن نتحدث عنه اليوم هو 3D الرسومات،
لأن هذا هو معقدة للغاية الموضوع الذي نحن لم يكن لديك الوقت ل.
ونحن لن تعلم كيفية تشغيل الصوت على مبارياتنا.
ونحن لن يكون بناء لشيء ولكن لينكس.
>> الآن المحاذير هناك ذلك، نأمل، بحلول نهاية الندوة،
عليك أن تكون مريحة مع وثائق SDL،
لذلك عليك أن تكون قادرا على الذهاب معرفة كيفية تشغيل الصوت لنفسك.
بناء أيضا لنظام التشغيل Mac أو PC يجب أن تعمل بالضبط نفس بناء لينكس،
ولكن الإعداد يذهب ل تكون مختلفة قليلا.
لذلك يجب أن تكون قادرة على معرفة معرفة كيف يفعل هذه الأشياء
في نهاية الندوة اليوم.
>> ذلك لإعداد، ونحن في طريقنا لاستخدام الجهاز الظاهري.
سوف نستخدم IDE CS50، ل نحن ذاهبون لمجرد أن الكتابة في C.
ولكن منذ IDE ليس المتصفح، ونحن لا يمكن إنشاء نوافذ جديدة أو عرض
الرسومات في ذلك.
لذلك نحن بحاجة إلى الجهاز الظاهري.
حتى تتمكن من متابعة التعليمات هنا في manual.CS50.net/appliance/15
لتثبيت الأجهزة CS50 الرسمي، وهو مجرد لينكس الظاهري
آلة.
>> ثم مرة واحدة لديك أن كل مجموعة up-- ذلك
قد يستغرق بعض الوقت، ل وdownload-- كبيرة جدا وأنت تسير
لتشغيل في التحديث الرابطة بين الحصول على VM سودو.
وهذا ما يحدث في الواقع لتحديث جميع البرامج
حزم على الجهاز الظاهري.
>> بعد ذلك، وأنت تسير لتشغيل سودو الرابطة بين الحصول على تثبيت، libsdl2-2.0-0،
libsdl2-DBG، libsdl2 ديف، و بالإضافة إلى ذلك libsdl2-صورة-2،0-0،
libsdl2-صورة-DBG، وlibsdl2 صورة ديف.
فماذا ان تفعل؟
أن مجرد تثبيت التصحيح المعلومات والوثائق، ورؤوس،
وثنائيات لمدة المكتبات.
منتظم من العمر، SDL 2.0، ومكتبة أخرى
دعا SDL الصور، التي ونحن في طريقنا إلى استخدام
لتحميل ملفات الصور إلى لعبتنا.
>> ذلك مرة واحدة لديك هذا أيضا ذلك، فقط عندما يسأل،
أنت فقط اكتب نعم، هاهنا لتثبيت هذه الحزم،
ومن ثم يجب أن تكون على ما يرام.
لذلك للحصول على رمز التوزيع، كنت can-- يا عزيزي، لا يتم تحديث هذا.
إلا إذا كان لديك سبب- جيثب إذا كان لديك حساب جيثب،
يمكنك القيام بذلك جيت الأمر استنساخ لالريبو
والتي من شأنها تحميل جيت الريبو مع كافة التعليمات البرمجية في ذلك،
بحيث سيكون لديك رمز.
>> إذا لم يكن لديك جيثب الحساب، ما يجب عليك فعله هو نوع
wgithttps: //github.com/tlively/sdl seminar-- وهنا انها different--
/archive/master.zip.
ذلك مرة أخرى، وهذا هو بالضبط نفس URL، إلا أنه سيكون من
tlively / SDL_seminar / master.zip و كنت تستخدم wgit لتحميل هذا.
وبعد ذلك يمكنك فقط بفك هذا الأرشيف
ومن ثم سيكون لديك كافة التعليمات البرمجية المصدر.
لذلك آسف لذلك.
ثم كما سيتم استضافة التعليمات البرمجية في صفحة الويب الندوة CS50 في بضع
أيام.
>> حسنا.
فكيف نبدأ الكتابة اللعبة الخاصة بنا؟
كذلك، فإن أول شيء ونحن في طريقنا تريد أن تفعل
هو أن ننظر في وثائق SDL.
حتى هنا في VM.
وهنا صفحة الويب.
لقد انتقلت إلى العيش libsdl.org.
ما أنا ذاهب الى القيام به هنا هو يذهب أكثر إلى الشريط الجانبي، تحت الوثائق،
وانقر على ويكي.
هذا سيجلب لي ليكي يوجد معظم وثائق SDL.
أكثر على الشريط الجانبي هنا، ونحن الذهاب إلى انقر API حسب الفئة،
لأنه ذاهب لإعطاء لنا رأي القاطع لطيفة
من API كامل لSDL.
>> هكذا على سبيل المثال، لدينا التهيئة الأساسية
وأغلقت، كل نوع من الاشياء الإداري لاستخدام SDL،
ومن ثم لدينا قسم ل عرض الأشياء على الشاشة.
هذا الفيديو.
الأحداث المدخلات، وهذا يحصل المدخلات من لوحة المفاتيح،
الحصول على مدخلات من الماوس، و عصا التحكم، إذا كان لديك حتى.
هناك قوة ردود الفعل لأشياء مثل وحدات تحكم اللعبة، التي
نحن لسنا بصدد الحديث عنها.
وهنا الصوت.
وبعد ذلك هناك مجموعة من الآخر الاشياء التي SDL يمكن أن نفعله لك.
>> ولكن اليوم ونحن في طريقنا للتركيز على التهيئة هنا،
عرض الصور في الفيديو القسم، والتعامل مع الأحداث الإدخال.
لذلك فان هذه هي الرئيسية أقسام الوثائق
التي يجب أن تكون مثيرة للقلق حول.
للمتعة فقط، إذا نذهب أكثر هنا وانقر على API بالاسم،
يمكننا أن نرى قائمة كل شيء واحد في مكتبة SDL.
لذلك كل هذه الوظائف، التعدادات، الهياكل، وهو مبلغ مجنون من الاشياء،
ترتيب ابجدي.
وبشكل واضح، حتى تعلمون تفعلونه،
هذا لن يكون مفيدا للغاية، وهذا هو السبب نقوم به API حسب الفئة.
>> لذلك دعونا نبدأ.
نأمل قمت بالفعل تحميل كود التوزيع.
وذلك ما يمكنك القيام به هو، والحق هنا في الأجهزة CS50،
ببساطة فتح المعبر.
ها نحن ذا.
حتى لقد تحميلها بالفعل كود التوزيع باستخدام الرمز البريدي
طريقة.
ولقد فك ضغط عليه.
حتى هنا هو في الماجستير ندوة SDL.
لذلك أنا ذاهب للذهاب إلى هذا الدليل.
وما نراه هنا هو أن لدينا سبعة ملفات C.
وهذا هو الذهاب إلى رمز ونحن في طريقنا إلى أن تبحث في اليوم.
لدينا MAKEFILE.
وليس لدينا دليل الموارد، الذي لديه مجرد صورة
عليك أن تكون رؤية قريبا بما فيه الكفاية.
>> لذلك دعونا فتح هذه الملفات باستخدام محرر G-تحرير.
لذلك أريد أن فتح كافة الملفات التي بادئ ذي بدء مرحبا وتنتهي مع .C.
ها نحن ذا.
لذلك هذا هو نافذة صغيرة، لذلك نحن ذاهب الى محاولة لجعل هذا أكبر.
لا، بل ذهب بعيدا.
>> حسنا.
حتى هنا أول جدا ملف ونحن في طريقنا للنظر في.
انه دعا hello1_sdl.c.
وكل هذا يفعله هو تهيئة SDL مكتبة حتى نتمكن من البدء في استخدامه.
كيف تعرف أن تأتي مع هذا الرمز نفسك؟
حسنا، إذا نظرنا أكثر في وثائق
ونذهب إلى التهيئة واغلقت الباب،
انها سوف تخبرنا عن حول كيفية تهيئة SDL.
لذلك بالتأكيد قراءة هذه بعض وقت آخر.
انها سوف اقول لكم كل حول ما يجري هنا.
ولكن جوهر الرئيسي في هذه المسألة هو أن نحن بحاجة إلى استدعاء هذه الدالة SDL في مجال تكنولوجيا المعلومات
وتمريرها ما هي أنواع الأشياء نريد المكتبة لتهيئة.
حتى في حالتنا، نحن ذاهبون فقط لتهيئة الفيديو في الوقت الراهن،
حتى نتمكن من البدء في عرض الصور.
>> هنا، يمكنك معرفة ما إذا كان نحن انقر على SDL في مجال تكنولوجيا المعلومات، ونحن
يمكن الحصول على المزيد من المعلومات، بما في ذلك قيمة الإرجاع.
لذلك نرى هنا أنه returnes صفر على النجاح.
حتى في التعليمات البرمجية لدينا، ونحن في طريقنا ل معرفة ما اذا كان لا يعود الصفر،
وإذا كان لا يعود الصفر، لذلك لم يكن ناجحا،
ثم نحن في طريقنا لمجرد طباعة خطأ استخدام هذه الوظيفة الأخرى،
خطأ الحصول على SDL، والتي ترجع سلسلة وصف الخطأ الذي حدث.
ونحن في طريقنا لطباعة تلك خطأ ومن ثم نحن فقط
الذهاب لإنهاء البرنامج مع رمز الخطأ.
>> ثم شيء آخر أننا بحاجة القيام به هو، قبل إنهاء البرنامج،
إذا نجحنا في تهيئة SDL، نحن بحاجة فقط للاتصال انسحبت SDL.
وهذا ما يحدث للتعامل مع تنظيف كل من الموارد الداخلية SDL بالنسبة لنا.
حتى there-- الوثائق مرة أخرى، نحن هنا في التهيئة
واغلقت الباب من وثائق.
يمكنك فقط انقر على وظيفة هنا، قم بإنهاء SDL،
ويمكنك أن تقرأ كل شيء عن ذلك أيضا.
والكثير من هذه وظيفة صفحات الوثائق
يكون رمز المثال، لذلك هذا هو موردا جيدا للغاية.
بالتأكيد قضاء بعض الوقت قراءة اجزاء من هذا الويكي
إذا كنت تنوي القيام به هذا لمشروع.
>> حسنا.
لذلك هذا هو برنامجنا بأكمله.
ما يمكننا القيام به الآن is-- أنا الذهاب لفتح MAKEFILE هنا،
لذلك أنا ذاهب لتأخذ ننظر كيف يعمل.
وانها MAKEFILE بسيط جدا، على غرار ما كنت قد رأيت من قبل.
أحد الفروق الرئيسية غير أنه، هنا، هذا
يجري لادخال نتيجة تشغيل هذا الأمر الذي كنت قد بالفعل
تثبيت إذا كنت قد قمت بتثبيت SDL.
وهذا أمر ما يجري لتوليد
بعض الأعلام إضافية للمترجم.
>> بالإضافة إلى ذلك، ونحن يعطيها جميع الأوامر المعتادة، وكذلك
هذين الأمرين.
حتى المقابض -lsdl2 صورة ربط في مكتبة الصور SDL.
و-lm يعالج الواقع الربط في مكتبة الرياضيات C القياسية.
لذلك نحن لا تسير في حاجة إلى تلك لكافة الملفات C لدينا،
ولكن نحن فقط وضعت لهم في ذلك ما في وسعنا استخدام نفس MAKEFILE على كل شيء
بدون تعديلات.
>> هنا في المصادر، هذا هو المكان الذي كنت
وضع الملفات التي كانوا في طريقهم تجميع للمشروع الخاص بك.
ولكن بما أن كل واحدة من بلدي C ملفات هنا لديه وظيفة الرئيسية،
انها سوف يحصل الخلط إذا وضعنا لهم في كل شيء.
لذلك أنا سأقول فقط، في الوقت الراهن، hello1_sdl.c،
وهو واحد ونحن فقط نظرت.
حتى إذا ذهبت إلى أكثر من هنا، ويمكنني أن لا تجعل.
وماذا فعلت هل هو مجرد جمعت هذا الملف الأول.
وبعد ذلك يمكننا اكتب ./game، ل انها القابل للتنفيذ أنها أنتجت.
وكل ما فعلته هو طباعة التهيئة ناجحة.
وهكذا فعلنا شيئا الصحيح.
ولكن هذا هو نوع من السأم، لأننا لم ترى نافذة،
لا شيء كان يتحرك حولها.
>> كبيرة جدا، وصلنا SDL تهيئة.
الآن، دعونا ننتقل إلى شيء قليلا أكثر إثارة للاهتمام.
حتى هنا لدينا hello2_window.c، و هذا سيكون أكثر قليلا
برنامج معقد C التي تهيئة SDL تماما مثل قبل،
إلا الآن ونحن في طريقنا أيضا تهيئة الموقت SDL.
وهذا هو الذهاب الى السماح لنا الوصول إلى توقيت داخلي
وظائف استخدام المتعلقة الوقت.
>> ثم دعونا ننظر إلى هنا.
ما نقوم به هو لدينا هذا المؤشر إلى نافذة البنية SDL، الذي
سوف يتم إنشاؤها من قبل هذه الدعوة إلى الوظيفة، SDL إنشاء نافذة.
الآن، وهذا يستغرق الكثير من الحجج، لذلك دعونا نذهب للبحث في الوثائق.
ذلك مرة أخرى، أنا ذاهب ل API حسب الفئة، وأنا
الذهاب الى الفيديو هنا، وأول القسم، وعرض إدارة النافذة.
لذلك هذا القسم له طن من الأشياء في ذلك،
ولكن إذا نظرتم من خلال هذه الوظائف، عليك
نرى أن الأرجح لدينا واحدة تريد يسمى SDL إنشاء النافذة،
الذي صادف أن يكون الحق في الأعلى.
>> وهكذا وهذا هو وثائق لهذه المهمة.
انها تسير في إطار أن يكون لها عنوان، وx و y موضع على الشاشة،
انها ستكون لدينا عرض، ارتفاع، وبعد ذلك سيستغرق بعض الأعلام.
الآن، نحن لا نهتم فعلا عن أي من هذه العلامات في الوقت الراهن،
ولكن إذا كنت تريد أن تفعل شيئا مثل تقديم إطار كامل الشاشة،
هل يمكن أن نلقي نظرة على ذلك.
الآن، نحن ذاهبون فقط لاستخدام هذه القيم خاصة،
نافذة SDL بالإضافة إلى تركز لx و y من أجل
لخلق مجرد نافذة في وسط الشاشة لدينا.
>> وهذا ما أن يفعل.
وإذا حدث أن تكون نافذة لاغية، وهذا يعني وجود خطأ،
ثم مرة أخرى نحن ذاهبون لمجرد طباعة الخطأ باستخدام الخطأ الحصول على SDL.
ثم لأننا تهيئة SDL، ونحن الآن بحاجة إلى إغلاقه.
لذلك فإننا ندعو استقال SDL قبل عودة للرئيسية واحدة.
>> لذلك لدينا هذه النافذة مفتوحة أمل.
وما نحن ذاهبون القيام به هو نحن ذاهبون
للاتصال SDL عن 5000 ميلي ثانية، وهو نفس خمس ثوان.
وعندما ننتهي مع ذلك، انها سوف تدمر النافذة،
تنظيف مكتبة SDL، والخروج من البرنامج.
لذلك دعونا نمضي قدما وإعطاء هذا رصاصة واحدة.
>> حتى الآن بدلا من تغيير في makefile في كل مرة،
يمكنني ببساطة لا تجعل، و ثم في سطر الأوامر،
وتقول مصادر يساوي ثم ملف نقوم بتجميع.
لذلك فمن hello2_window.c.
رائع.
لا erros.
الآن، إذا كنا تشغيل قابل للتنفيذ لدينا، ونحن نرى هذا الإطار.
الآن هناك عدد قليل مشاكل مع النافذة.
اننا يمكن ان تتحرك حولها، ولكن لديها هذا غير المرغوب فيه خلفية داخل منه.
لذلك نحن لم رسمها أي شيء، ولذا فلا بد من
مجرد كاملة من القمامة، والتي هو الى حد كبير ما كنا نتوقع.
>> وعلاوة على ذلك، فإننا لا نستطيع إغلاق النافذة.
أنا الضغط على هذا X في الزاوية ولا شيء يحدث.
لذلك سنرى كيفية إصلاح أن في قليلا.
لذلك دعونا إصلاح جزء فيها نافذة مليء القمامة أولا.
حتى اذا ذهبنا الى hello3_image.c، ما يمكننا أن نرى هو أننا قمنا بإضافة قليل
المزيد من الأشياء هنا.
أضفنا هذا الرأس الجديد ملف للحصول على وظائف جهاز ضبط الوقت.
أعتقد أننا فعلنا ذلك في الماضي واحد أيضا، وأنا لم أذكر ذلك.
ولكن الآن لأننا العمل مع الصور،
نحن في حاجة إلى تضمين SDL صورة ملف الرأس كذلك.
حتى انها نفس الشيء من قبل، تهيئة SDL هنا،
نفس الصفقة مع إنشاء النوافذ.
لقد رأينا ذلك من قبل الآن.
>> الآن نحن بحاجة إلى إنشاء ما يسمى العارض، الذي نوع من يسير جنبا إلى جنب
مع النافذة.
ولكن هذا النوع من الكائن المجرد هذا
المسؤول عن القيام بكل هذه رسم العمليات لالنافذة.
وأنه يتوافق مع الواقع إلى برنامج تحميل
في أجهزة الرسومات في الخاص الكمبيوتر أو الهاتف أو أيا كان.
حتى الأعلام نريد لتمرير it-- ويمكنك أن تبحث في الوثائق
للحصول على مزيد من التفاصيل here-- ذاهبون أن SDL تقديم المعجل، التي
يعني أنه سيكون باستخدام أجهزة الرسومات
وليس فقط يحتذى في مجال البرمجيات.
>> ونحن في طريقنا للاستخدام SDL العارض PRESENTVSYNC.
VSYNC هو الشيء الذي يجعل ببساطة الرسومات الخاصة بك تبدو أفضل ويمنع
هذا الشيء يسمى الشاشة الإرهاب، حيث نصف
من إطار واحد ونصف في اليوم التالي الانجرار إطار في نفس الوقت
ويبدو مروعا.
ولكن مرة أخرى، يمكنك الذهاب قراءة عن ذلك بنفسك.
>> لذلك لدينا بعض الأعلام هنا.
ولذا فإننا ذاهبون فقط للاتصال هذه الوظيفة SDL خلق العارض.
ونحن في طريقنا لاعطائها النافذة لاقترانه أن العارض.
واحد السلبي يعني أننا لا نهتم بما برنامج تشغيل الرسومات ونحن في طريقنا للاستخدام.
بحيث ينبغي حد كبير يكون دائما سلبيا،
ما لم تعرفه عن برامج تشغيل الرسومات.
وبعد ذلك نحن ذاهبون فقط لتمريرها الأعلام لدينا.
حتى إذا كان ذلك يعود لاغية، ثم نحن الذهاب لطباعة خطأ كالعادة،
ولكن بعد ذلك ونحن في طريقنا أيضا لتدمير النافذة
لتنظيف تلك الموارد قبل داعيا SDL إنهاء والعودة.
>> الآن، الجزء المثير للاهتمام هنا وحيث أننا تحميل صورتنا
باستخدام هذه الوظيفة IMG_load.
هذه هي الوظيفة الوحيدة نحن ذاهبون استخدام من مكتبة الصور SDL.
انها واحدة الوحيد الذي نحتاجه.
انها وظيفة التي تأخذ سلسلة هذا هو مسار أي مورد الصورة.
ويمكن أن يكون بابوا نيو غينيا، وGIF، نقطية، أي من هذه الأشياء.
وهذا هو السبب في هذه الوظيفة هي لطيفة جدا.
فإنه يمكن التعامل مع حد كبير أي شكل.
الأحمال في الذاكرة ويخزنها كما دعا شيء سطح SDL.
>> الآن على سطح SDL هو مجرد البنية تمثل بيانات الصورة في الذاكرة.
بحيث يمكنك قراءة المزيد حول أن في وثائق اثنين.
وإذا كان هذا الأخطاء، ثم نحن تنوي القيام به في كل شيء حيث
نطبع الخطأ، أغلق دينا الموارد، ومن ثم إنهاء البرنامج.
الآن الشيء المثير للاهتمام هو، قبل يمكننا رسم هذه الصورة إلى النافذة،
نحن بحاجة لجعله الملمس.
الآن الملمس يتوافق لبيانات الصورة تحميل
في الذاكرة للأجهزة الرسم و.
>> لذلك السطح في main الذاكرة، الذاكرة العادية
أننا أستعمل كل فصل دراسي، والملمس في هذا VRAM منفصل
الذاكرة أن ضوابط بطاقة الرسومات.
لذلك فإننا ندعو هذه الوظيفة SDL_CreateTextureFromSurface.
اعطيناها لدينا العارض وسطح لدينا.
ثم نحن في الواقع فعلت مع السطح،
لذلك نحن ذاهبون لمجرد تحريرها.
نحن لسنا بحاجة بعد الآن.
ثم حتى إذا كان هذا النداء errored وعاد لاغية،
ثم نحن في طريقنا للقيام كلها خطأ الإبلاغ الشيء مرة أخرى.
>> حسنا.
هنا، نصل إلى بعض وظائف التقديم الفعلية.
لذلك يدعو SDL_RenderClear وفمررها
العارض المرتبطة نافذتنا ببساطة يجعل نافذة يذهب السوداء.
لذلك يزيل تلك الزبالة التي شهدناها في نافذتنا قبل ويجعل من الأسود.
وبعد ذلك نحن ذاهبون للاتصال SDL_RenderCopy،
إعطائها لدينا العارض، والملمس لدينا.
وسوف نتحدث عن ما هذه الحقول في شيء.
ولكن هذا سيكون ل أخذ البيانات الملمس
ونسخه على موقعنا نافذة على رسم الصورة.
وذلك بعد أن فعلت هذه النسخة البيانات على نافذتنا،
علينا أن نفعل هذا وظيفة اضافية دعا SDL_RenderPresent.
>> وهذا مثير للاهتمام لأن هذا يحصل
في موضوع دعا التخزين المؤقت المزدوج.
لذلك التخزين المؤقت المزدوج هو الاسلوب الذي يجعل الرسومات الخاصة بك تبدو أفضل كثيرا.
مرة أخرى، فإنه يمنع أن تمزق الشاشة كنت أتحدث عنها في وقت سابق، حيث
لديك اثنين من المخازن.
هناك منطقة عازلة في الظهر الذاكرة ومنطقة عازلة الأمامي.
المخزن المؤقت الأمامي هو حرفيا ما هو على الشاشة في الوقت الراهن.
لذلك نحن نفعل كل هذه نلفت الاختلافات، مثل SDL تقديم نسخة أو SDL_RenderClear
إلى المخزن المؤقت الخلفي.
بحيث تعديل الأمور في المخزن المؤقت الخلفي.
هنا نحن قد رسم هذه الساحة الخضراء إلى المخزن المؤقت مرة أخرى.
>> حتى ذلك الحين عندما ننتهي به لدينا تجعل العمليات التي
قد يستغرق فترة طويلة حقا الوقت، ما نحن في طريقنا للقيام
هو تبديل مخازن.
لذلك يأخذ حرفيا فقط عازلة الأمامي والخلفي عازلة
ومفاتيح لهم، لذلك هذا، على الفور،
في عملية واحدة، بدلا من ربما مئات أو آلاف،
كل من صدر حديثا الكائنات التي تظهر على الشاشة.
وهذا يمنع الامور مثل منعش الشاشة
نصف عندما قمنا تعادل فقط من الأشياء لدينا للإطار.
ولهذا السبب نحن بحاجة إلى استدعاء SDL_RenderPresent، فضلا
كما SDL_RenderCopy.
>> مرة أخرى، نحن ذاهبون فقط الانتظار لمدة خمس ثوان.
ثم نحن في طريقنا لل تنظيف مواردنا.
لدينا عدد غير قليل من أكثر هذه المرة.
وبعد ذلك نحن ذاهبون فقط للخروج من البرنامج.
لذلك دعونا نفعل ذلك.
انا ذاهب الى جعل اكتب، ثم المصادر يساوي hello-- هذا هو الآن 3image.c.
كل الحق، أن تجميع أية أخطاء.
ويمكنك أن ترى هنا لقد قمت الآن تعادل خارج صورة بلدي، مرحبا، CS50!
لدينا النافذة، والتي يختفي بعد خمس ثوان.
>> الآن، وهذا لا يزال لديه مشاكل، أليس كذلك؟
هذه ليست التطبيق الجيد، لأنه عندما أحاول أن أغلق النافذة،
لاشيء يحدث.
أن x لا يزال غير متجاوبة.
لذلك دعونا نلقي نظرة على ملف المقبل، hello4animation.
لذلك هذا هو الملف ما يجري لإدخال
الحركة والتنقل لصورتنا.
لذلك نحن ذاهبون للقيام الشيء نفسه كما كان من قبل،
بدء SDL، إنشاء نافذة، إنشاء العارض،
تحميل الصورة إلى الذاكرة، إنشاء الملمس.
لقد رأينا كل هذا من قبل.
الآن، وهذا هو الجديد.
ونحن في طريقنا إلى أن بنية تسمى والمستطيل SDL، الذي هو مجرد مستطيل.
اذا ذهبنا أكثر من هنا، يمكننا القيام بالبحث عن SDL المستطيل،
ويمكنك ان ترى انها هيكل بسيط جدا.
كان لديه خ، ذ ل الموقف، وذلك
لديه عرض وارتفاع لل حجم المستطيل.
>> وذلك ما نحن بصدد القيام به هو نحن الذهاب لتعريف هذه SDL المستطيل دست،
للالمقصد.
وهذا هو المكان المناسب على الشاشة حيث
ونحن في طريقنا إلى أن الرسم صورتنا، أليس ذلك
إذا نحن في طريقنا لتكون نقل الصورة حولها،
ثم الوجهة حيث ونحن في طريقنا إلى رسم الصورة
تحتاج إلى أن تتحرك حولها.
لذلك نحن ذاهبون لهذه الكلمة وظيفة SDL_QueryTexture.
وتلاحظ أنا تمرير عنوان من dest.w، وهو العرض،
وdest.h، وهو الارتفاع.
وهكذا SDL_QueryTexture يجري لتخزين في تلك الحقول العرض
وارتفاع نسيج لدينا.
>> ثم ما أنا ذاهب القيام به هو أنا ذاهب
لوضع dest.x نافذة تكون عرض dest.w ناقص، وهو
عرض العفريت، مقسوما على 2.
وهذا يجري إعداده لذلك أن الصورة تتمحور تماما
في إطار عملنا، كل الحق؟
وحتى الآن لدي موقف ذ.
وهذا هو الذهاب الى يكون هذا المتغير
تغيير، لأننا سنتعرض ل تحريك الصورة في الاتجاه ذ.
والآن لدينا شيء دعا حلقة الرسوم المتحركة.
>> فكيف لا يعمل الرسوم المتحركة؟
حسنا، يمكن أن العين البشرية كشف 12 متميزا الصور في كل ثانية، كل الحق؟
لذلك إذا كنت فلاش 12 صورة بطاقات في وجهي في الثانية، رأيت كل تلك الصور
كصورة متميزه الخاصة بها.
الآن، إذا كنت فلاش أكثر صور لي في الثانية،
ثم عيني ستبدأ لطمس معا
وأود أن تتصور أنها الحركة، بدلا من صورة متميزة واحد.
لذلك، على سبيل المثال، الأفلام والقنوات التلفزيونية، أنها وميض الصور في لكم 24 مرة
ثانية.
ذلك أن 24 لقطة في الثانية الواحدة.
شاشات الكمبيوتر، من ناحية أخرى، وغالبا ما تكون في 60 لقطة في الثانية الواحدة.
هذا هو سرعة التحديث الخاصة بهم.
هذه هي الطريقة التي غالبا ما تحديث الصورة التي تظهر على الشاشة.
لذلك هدفنا سيكون 60 لقطة في الثانية للألعاب دينا.
>> لذلك دعونا نرى أن في التعليمات البرمجية.
لذلك لكل إطار، ونحن أولا الذهاب لمسح النافذة.
هذا هو النمط العام.
كنت واضحا دائما نافذة لكل إطار، ومن ثم
تفعل كل من الرسم العمليات، ثم في النهاية،
لا RenderPresent لاظهار كل شيء في الإطار.
ثم كنت تريد الذهاب ل لدينا انتظار في نهاية
الانتظار حتى اليوم التالي يجب أن يبدأ الإطار.
>> لذلك إذا كنت تفعل الكثير من حساب معقد هنا
التي استغرقت أكثر من 16 ميلي ثانية، سيكون من المستحيل بالنسبة لي
للحصول على هذا الإطار معدل 60 أن كنت أريد، لأن كل إطار
أخذ وقتا طويلا لحساب.
وعلاوة على ذلك، نقوم به حقا نوع من كمية لا تذكر من العمل
هنا، لأنه لا يوجد فقط شيء واحد نحن الرسم.
لذلك أنا مجرد الانتظار 1/60 ل الثانية، والذي هو طول
من إطار بين الإطارات.
لذلك أنا نوع من التظاهر به كل ما عندي من العمل يستغرق وقتا الصفر.
ولكن في لعبة حقيقية، كنت قد طرح
ومقدار الوقت الذي استغرق لتفعل كل هذا العمل من وقت الراحة الخاصة بك.
>> لذلك على أي حال، ما أنا به فعلا في هذه الحلقة؟
I مسح النافذة.
أنا وضعت dest.y، وهو صحيح إلى موقفي ذ الفعلي صبها في عدد صحيح.
الآن، أريد تعويم القرار لموقف ذ بلدي في لعبي،
ولكن بعد ذلك إلى الواقع استدراجه على الشاشة،
فإنه يحتاج [إينتس]، لأنه في وحدات بكسل، لذلك هذا ما هو المدلى بها ل.
انا ذاهب الى رسم الصورة.
لذلك هذا هو مستطيل المصدر.
وهذا هو المستطيل الوجهة.
لذلك مررت فارغة ل المستطيل المصدر
أن أقول أريد أن ألفت بلدي نسيج كامل.
ولكن إذا كان لديك الكثير من القوام في اللعبة
وانهم جميعا في خريطة واحدة الملمس كبيرة التي تم تحميلها إلى SDL واحدة فقط
نسيج، هل يمكن استخدام مستطيل المصدر
لاختيار واحد من القوام أصغر، واحد من العفاريت الصغيرة،
من تلك الخريطة الملمس كبيرة.
>> ذلك مرة أخرى، وأنا يمر بلدي تقديم، بلدي الملمس، والآن الوجهة.
هذا سيكون مكان في نافذة انها سوف يمكن استخلاصها.
وبعد ذلك، لأنني موحية شيء، ولست بحاجة حركة،
انا ذاهب الى أن تحديث موقف العفريت على كل إطار.
لذلك ليس لدي هذا يسمى التمرير المستمر سرعة في وحدات بكسل في الثانية الواحدة.
الآن، في كل مرة نقوم به حركة، الإطار هو فقط 1/60 من الثانية.
لذلك أنا ذاهب لتقسيم هذا بنسبة 60.
وبعد ذلك، دعونا نرى، وأنا طرح هذا من موقف ذ.
لماذا أنا بطرح؟
أننا سنصل إلى أنه في الثانية.
حتى ذلك الحين I تنظيف مواردي والبرنامج من جديد.
>> لذلك دعونا جعل ذلك.
لذلك دعونا نذهب إلى جعل الهلال الأحمر السوداني = hello4 animation.c، كل الحق؟
اللعبة.
ها أنت ذا.
لذلك لدي التمرير فوق نافذة، وهو أنيق جدا.
ولكن مع الاستمرار على، كنت يحذف من موقع ذ في كل مرة.
ما الذي يحدث هناك؟
حسنا، اتضح أنه في SDL، و في الواقع، في معظم رسومات الحاسوب،
أصل لنظام الإحداثيات هو أعلى يسار النافذة.
>> لذلك يذهب اتجاه x إيجابي عبر نافذتك إلى اليمين.
والاتجاه الإيجابي ذ يذهب فعلا إلى أسفل.
ذلك مرة أخرى، في الأصل ل الجزء العلوي الأيسر من النافذة،
الاتجاه الإيجابي ذ باستمرار، و x الإيجابي هو الحق.
لذلك عندما طرح من موقف ذ، وهذا
الذهاب لجعله يذهب على السلبيات الاتجاه ذ، وهو ما يصل النافذة.
وهذا ما يحدث هناك.
رائع.
>> دعونا ننظر في الملف التالي.
هنا هو جزء من تظهر فيها ونحن في النهاية
الحصول على هذا X في الزاوية من النافذة من المفترض أن إغلاق النافذة
للعمل.
فما الذي يحدث؟
نحن تهيئة SDL، إنشاء النافذة، إنشاء العارض، تحميل الصور،
خلق نسيج كما رأيناه من قبل.
لدينا نفس المستطيل الوجهة كما كان من قبل، نفس المكالمة الاستعلام الملمس.
ولكن هذه المرة، ونحن بعد ذلك الذهاب لتقسيم العرض
وارتفاع جهتنا بنسبة 4.
وهذا له تأثير فقط رفع صورة لدينا باستمرار عندما
نحن عرضه في إطار أربعة.
ولهذا أنيق جدا.
يمكننا فقط حجم تماما مثل ذلك.
ونحن في طريقنا لبدء العفريت في وسط الشاشة.
والآن لدينا x و y سرعة و انهم على حد سواء سنبدأ من الصفر.
>> هذا هو الملف خاطئ.
أنا اسف.
ولهذا كله صحيح.
هذا كل شيء لا يزال في هذا الملف.
لدينا القسمة على 4 وكل شيء.
حتى هنا لدينا x و y موقف للوسط النافذة.
واعطيناها سرعتها الأولية هذا بسرعة ثابتة، والتي
أعتقد هو 300 بكسل في الثانية الواحدة.
الآن، لدينا هذا الباحث أن مجرد كذلك تكون منطقية تسمى طلبت قريب.
وبدلا من أن يفعل ل حلقة لا نهائية على جهاز توقيت هنا،
ونحن في طريقنا إلى أن موحية كما طالما قريب لا يتم طلبها.
>> فكيف نقوم بمعالجة الأحداث؟
حسنا، SDL قوائم الانتظار تصل الأحداث في طابور الحرفي وراء الكواليس.
ثم كل إطار، يمكننا dequeue الأحداث
من أن قائمة الانتظار باستخدام هذا SDL_PullEvent المكالمة.
ومرة أخرى، تذهب بالتأكيد قراءة حول هذا في الوثائق.
هناك الكثير من التفاصيل والكثير المزيد من الوظائف التي يمكن استخدامها مع هذا.
نحن تمريرها عنوان من هذا الشيء، SDL_Event
أن لدينا هنا في بنية تخزين العناصر.
>> الآن، ما هو SDL_event؟
لأن SDL، إذا نظرنا في وdocumentation-- دعونا
ترى، API حسب الفئة، ومدخلات الأحداث، والتعامل مع الحدث،
يمكننا أن ننظر في عدد أحداث مختلفة هنا
ويمكننا أن نرى هناك طن كله منهم.
فما هو هذا الشيء SDL_Event؟
SDL_Event هو اتحاد.
نجاح باهر، ما هو الاتحاد؟
ربما كنت قد أبدا سمعت ذلك من قبل.
وهذا موافق.
>> والاتحاد هو نوع من مثل البنية، ما عدا البنية
لديه مساحة للجميع حقولها والذاكرة،
في حين أن النقابة لديها فقط مساحة كافية لتناسب أكبر
واحدة من حقولها، مما يعني أنه يمكن تخزين واحد من حقولها فقط
في وقت واحد، أي نوع من المنطقي للأحداث، أليس كذلك؟
نحن يمكن أن يكون لها لوحة المفاتيح الحدث أو الحدث النافذة،
ولكن حدث واحد لا يمكن أن يكون على حد سواء الحدث لوحة المفاتيح والحدث النافذة،
لذلك سيكون من السخف أن يكون لديك مساحة لل كل من هؤلاء داخل الاتحاد هذا الحدث.
حتى إذا كنت تريد إنشاء النقابة الخاصة بك،
يبدو بالضبط نفس الشيء كما خلق البنية،
إلا أن نستخدم الكلمة الاتحاد بدلا من الكلمة البنية.
وتذكر، لجميع أشياء داخل النقابة الخاصة بك،
المتغير الفعلي الذي هو اتحاد يمكن أن يكون واحدا من تلك القيم فقط
في وقت واحد.
>> فكيف يمكننا معرفة نوع الحدث أننا برزت مجرد الخروج من هذا الطابور؟
حسنا، يمكننا اختبار لevent.type.
وإذا كان هذا هو المساواة لSDL_Quit، ونحن نعلم
انها حالة ما تم إنشاؤها عندما كنا
ضرب أن X في الزاوية من النافذة.
ويمكننا أن مجموعة قريبة طلب يساوي 1.
والباقي هو مجرد بعض الرسوم المتحركة ان كنت قد رأيت من قبل.
لذلك دعونا نمضي قدما وجعل هذا ونرى كيف أنها تعمل بشكل جيد.
لذلك أنا ذاهب لكتابة جعل و ثم جمعية الهلال الأحمر السوداني = hello5_events.c.
هناك نذهب.
ألعاب.
>> الآن، يمكننا أن نرى ذلك كان تحجيم الواقع بنسبة أربعة.
والآن حان كذاب حولها.
لدي بعض كشف التصادم يحدث مع الجانبين من النافذة
يمكننا أن نلقي نظرة على.
وماذا يحدث عندما أذهب لإغلاقه؟
أن يتم إغلاقه.
رائع.
تلقينا هذا الحدث.
ونحن التعامل معها.
>> لذلك دعونا ننظر إلى الوراء في التعليمات البرمجية.
فكيف لم أحصل عليه كذاب حول مثل ذلك؟
أذكر أنني تعيين كل من x و ذ البداية إلى سرعات.
والسرعة هي إيجابية ثابت، حتى أن
الذهاب للحصول على انها البدء الذهاب إلى الأسفل وإلى اليمين.
>> الآن، كل إطار، بالإضافة إلى معالجة أي أحداث قد تكون وقعت،
أنا ذاهب لاكتشاف ما إذا كان بلدي العفريت يحاول الخروج من النافذة.
حتى نتمكن من القيام بذلك عن طريق فحص فقط x_pos مع 0، y_pos 0، ثم
كما x_pos وy_pos مع نافذة العرض والارتفاع النافذة.
لاحظ لقد طرح عرض العفريت.
وهذا هو لأنه إذا لم أكن طرح عرض العفريت،
انها ستراجع فقط أن أصل العفريت
لم يذهب خارج النافذة.
لكننا نريد كامل عرض العفريت
أن تكون دائما داخل النافذة و ذروة كامل من العفريت
أن تكون دائما داخل الإطار.
وهذا ما هو الطرح ل.
وهناك الكثير من الهندسة هنا يمكن تكون مفيدة لاستدراجه خارج
على الورق مع تنسيق نظام لمعرفة ما يجري.
>> حتى لو كنت لا تتصادم، أنا فقط ببساطة إعادة الموقف
بحيث أنه لن للخروج من الشاشة.
وانا ذاهب الى، إذا كان مستبعد على أحد الجوانب،
انا ذاهب الى ينفي س السرعة بحيث
يبدأ كذاب في الاتجاه الآخر.
وبالمثل، إذا كان يضرب أعلى أو أسفل،
انا ذاهب لضبط سرعة ذ مساوية لسرعة ص السلبية،
بحيث ترتد مرة أخرى.
ولهذا كيف وصلنا إلى ذلك هنا.
>> والمواقف تحديث تماما مثل رأيناه من قبل،
القسمة على 60، لأننا التعامل مع فقط 1/60 من الثانية.
ومن ثم جعلها، بالضبط نفس كما كان من قبل.
وهكذا وهذا كل شيء التي كانت جارية في هذا الملف.
لذلك هذه هي الطريقة التي نفعل الأحداث.
الشيء الرئيسي ليأخذ هنا هي هذه الوظيفة SDL_PullEvent.
ويجب عليك بالتأكيد قراءة المزيد من الوثائق حول SDL_Event
الاتحاد، لأن هذا النوع البيانات مهم جدا جدا، لأننا استخدامه
لجميع أنواع الأحداث.
>> على سبيل المثال، نستخدمها لوحة المفاتيح الأحداث، وهو ما هو هذا الملف لل.
فماذا لدينا؟
لدينا نفس الشيء كما كان من قبل، تهيئة SDL، إنشاء النافذة،
إنشاء العارض، تحميل صورة في الذاكرة، وخلق نسيج.
مرة أخرى، نحن في طريقنا لل يكون هذا دست المستطيل،
ونحن في طريقنا لقياس الصورة أربع، وجعله أصغر قليلا.
الآن، ونحن نذهب لبدء شبح في وسط الشاشة.
لكن هذه المرة، ونحن في طريقنا لتعيين س الأولية والسرعات ص إلى الصفر،
لأن لوحة المفاتيح الذهاب إلى السيطرة على تلك.
وعلاوة على ذلك، نحن في طريقنا لل تتبع هذه المتغيرات
أعلى والأسفل واليسار واليمين.
وهذا ما يحدث للحفاظ على المسار النظر عما إذا قمنا
الضغط على أزرار لوحة المفاتيح التي تتوافق مع أعلى، أسفل، يسار،
والحق.
>> الآن، وهذا هو نوع من الهوى لأننا لا نستطيع استخدام W، A، S،
D هنا، أو مفاتيح الأسهم الفعلية.
سنرى أنه في ثانية واحدة.
لذلك نحن ذاهبون الى معالجة الحدث تماما مثل قبل.
نحن سحب هذا الحدث.
ولكن الآن نحن في طريقنا لل التبديل على نوع الحدث.
إذا كان SDL_Quit، ونحن الذهاب الى مجموعة قريبة
طلب واحد، تماما مثل قبل.
الذي يعالج س في زاوية النافذة،
بحيث نافذتنا يغلق الواقع.
>> خلاف ذلك، اذا حصلنا على مفتاح SDL أسفل الحدث، وهو ما يعني أننا الضغط على مفتاح،
ثم ما نحن بصدد القيام به هو نحن الذهاب للتبديل على هذا الشيء هنا،
التي means-- ذلك event.key يعني علاج الاتحاد هذا الحدث،
اذهب والحصول على المفتاح هيكل حدث في ذلك.
هكذا اتضح أن هذا الاتحاد هو بنية الحدث الرئيسي.
ثم انتقل إلى المفتاح بنية الحدث مجالها
دعا keysym ثم scancode.
ومرة أخرى، وقراءة بالتأكيد وثائق حول هذا الموضوع.
المدخلات كلمات رئيسية جدا للاهتمام.
يمكنك الحصول على رموز مسح ضوئي أو رموز رئيسية.
وانها خفية قليلا، ولكن وثائق جيدة جدا.
>> إذا كان الأمر كذلك نرى رمز المسح الضوئي لل لدينا اضغط على مفتاح يجري W أو حتى،
ونحن في طريقنا لاقامة يساوي 1.
وبعد ذلك الخروج من هذا التحول.
إذا كان A أو اليسار، وضعنا اليسار إلى 1، وآخرون إلى ذلك، وهلم جرا، لأسفل واليمين.
الآن، في هذا التحول الخارجي، إذا كان لنا أن نرى مفتاح حتى الحدث،
هذا يعني أننا قد أصدرت المفتاح ونحن لم يعد الضغط عليه.
لذلك أنا ذاهب الى ان ما يصل يساوي 0، اليسار يساوي 0، بانخفاض يساوي 0، الحق
يساوي 0، وهلم جرا.
>> وتلاحظ لدينا في كل من هذه وضع حالتين بجوار بعضها البعض
مع عدم وجود رمز منفصل في الحالة الأولى، والتي
يعني أنه سواء كان ذلك وS أو أسفل هنا،
انه سيكون لتنفيذ هذه التعليمات البرمجية.
ولهذا مفيد جدا.
أنه يمنعنا الحاجة إلى بذل المزيد من الجهد الشروط والمحاذير والأشياء
من هذا القبيل.
>> لذلك نحن في طريقنا لل تحديد السرعة.
وضعنا السرعة إلى 0.
ثم إذا كان الضغط أعلى وليس لأسفل، ثم نحن
ضبط سرعة Y لسرعة السلبية.
تذكر سلبية، لأن الاتجاه ذ السلبي هو ما يصل.
والاتجاه ذ الإيجابي هو أسفل.
إذا تم الضغط على أسفل ولم يصل، ثم نحن
الذهاب إلى تعيينها إلى سرعة إيجابية، وهو ما يعني الذهاب إلى أسفل الشاشة.
نفس الشيء مع اليسار واليمين.
>> ثم نحن في طريقنا للتحديث مواقف مثل قبل.
ونحن في طريقنا للقيام تصادم كشف مع حدود،
ولكننا لن إعادة تعيين السرعة، لأن السرعة هي فقط
التحكم بواسطة لوحة المفاتيح.
ولكن نحن نذهب لإعادة وظائف لابقائه في النافذة.
ونحن في طريقنا للتعيين وظائف في البنية
ثم تفعل كل جعل الاشياء من قبل.
لذلك دعونا نرى ما تفعله.
لذا تأكد SRCS-- دعونا نرى، هذا هو hello6_keyboard.c.
>> اوه لا.
حتى وصلنا بعض التحذيرات هنا.
وهذا ما نقول ببساطة لم نكن تحقق من كل نوع ممكن واحد
من الحدث.
وهذا موافق، ل هناك 236 منهم أو نحو ذلك.
لذلك أنا ذاهب إلى تجاهل تلك التحذيرات.
لا يزال تجميعها بشكل جيد.
لذلك أنا ذاهب للعب اللعبة.
انها لا تتحرك.
ولكن الآن، عندما كنت الهريس على بلدي لوحة المفاتيح، يمكنني القيام ببعض الحركة WASD هنا،
يمكنني استخدام مفاتيح الأسهم كذلك.
ولاحظ، على الرغم من أنا الضغط الآن الحق،
انها ليست الخروج من النافذة، لأنني إعادة تعيينها في كل إطار.
ولهذا أنيق جدا.
يمكنك أن تتخيل يتحرك مع ماريو بعض مفاتيح الأسهم أو شيء من هذا القبيل.
ونعم X لا تعمل.
>> الملف النهائي لذلك نحن ذاهبون لننظر، hellow7_mouse.
هذا هو حول الحصول على مدخلات الماوس.
حتى في هذه واحدة، ونحن استيراد رأس الرياضيات،
لأننا ذاهبون الى قليلا من الرياضيات هنا.
نفس القديمة، نفس القديمة الاشياء، والمقصد، نفس العمر، رأيت أن من قبل.
حسنا، هذا مثير للاهتمام.
حتى نعود إلى فحص فقط لSDL الحدث الإقلاع عن التدخين.
لماذا هذا؟
حتى تتمكن من الحصول على مدخلات الماوس من الأحداث.
مثل عندما تحرك الماوس، يمكنك الحصول على الحدث لذلك.
عند الضغط على زر الماوس، يمكنك الحصول على الحدث لذلك.
>> ولكن هناك أخرى، أبسط قليلا ربما، API للحصول على مدخلات الماوس.
وهذا ببساطة SDL الدولة الحصول على الماوس.
لذلك لدي الباحث لx و ذ لموضع المؤشر.
I تمريرها إلى SDL_GetMouseState، الذي يحدد هذه.
وهذا هو الموقف في تنسيق نظام النافذة.
إذا كان الأمر كذلك كتلة هي في أعلى اليسار من النافذة، التي من شأنها 0، 0.
>> الآن، ما أنا بصدد القيام به هو أنا ذاهب لتفعل قليلا من ناقل الرياضيات.
أراهن أنك اعتقدت أنك لن يحدث نرى أن في CS50، ولكن هنا هو عليه.
انا ذاهب الى القيام ببعض ناقلات الرياضيات للحصول على ناقلات
من الصورة إلى المؤشر.
وهكذا لماذا لدي هذا الطرح هنا؟
حسنا، إذا كنت تستخدم فقط دست .-- ذلك أنا بحاجة إلى ترجمة الماوس العاشر
و y إلى النصف وعرض ارتفاع الصورة،
لأنني أريد وسط الصورة التي سيتم تسير نحو الماوس،
لا أصل الصورة.
>> ولهذا فقط للتأكد من أنني أتحدث عن مركز الصورة هنا.
ثم نحصل على دلتا x و y، التي هو الفرق عن الهدف
إلى الموقف الفعلي للصورة.
ومن ثم نتمكن من الحصول على تنأى هنا، والتي
سيكون فيثاغورس نظرية، الجذر التربيعي ل x
مرات X زائد مرات ذ ذ.
>> الآن لمنع غضب، وأنا يمكن أن تظهر لك ما يفعل ذلك إذا كنت لا تفعل هذا،
إذا كانت المسافة بين المؤشر و مركز الصورة أقل من خمسة،
أنا فقط لن تتحرك الصورة.
خلاف ذلك، وضعنا السرعة.
ونحن تعيينها بحيث سوف يكون دائما سرعة ثابتة.
والنتيجة الصافية لجميع هذا الرياضيات هي أن صورة
هو الذهاب الى التحرك نحو المؤشر.
>> الآن، اتضح أن SDL_GetMouseState،
بالإضافة إلى وضع س و ص الحجج هنا،
تقوم بإرجاع عدد صحيح أيضا أن يتوافق لحالة أزرار الماوس.
لذلك نحن لا يمكن أن يقرأ مباشرة، ولكن في وسعنا
استخدام وحدات الماكرو هذه، واحد مشغل أحادي المعامل، وليس مخيفا،
مجرد أحادي المعامل و.
لذلك نحن نقول أزرار، وهو نتيجة من SDL_GetMouseState لدينا، إذا كان ذلك
وأحادي المعامل، وهذا الماكرو هنا، SDL_BUTTON_LEFT.
>> لذلك هذا هو الذهاب الى حل ببساطة إلى الصورة النقطية الذي يتوافق
لزر الماوس الأيسر للضغط.
وحتى إذا كان أحادي المعامل ويحدث وانها
غير الصفر، مما يعني تم الضغط على الزر الأيسر،
ثم نحن ذاهبون فعلا لنفي كل من X و Y سرعات،
الأمر الذي سيجعل مجرد صورة هارب.
مواقف التحديث.
اصطدام المكتشفة، ينظر إليه كل هذا من قبل، وجعلها، كل الحق.
دعونا جعله.
لذلك كنت حصلت على جعل جمعية الهلال الأحمر السوداني = hello7_mouse.c.
رائعة.
أية أخطاء.
واللعبة.
>> حتى هنا عندي الماوس.
والصورة هي في الواقع مطاردة بلدي الماوس.
الآن، في لعبة تقوم بها، ربما هذا هو مثل مطاردة العدو
يذكر حرف أو كل ما لديك.
ولكن هنا لدينا صورة مطاردة الفأر.
وعند النقر، والفأر يبدأ مطاردة الصورة
وكانت الصورة الهروب من الماوس.
ولهذا رائع.
وإشعار مرة أخرى، هناك لا يزال الكشف عن التصادم هنا.
>> لذلك هذا هو الشيء النهائي عرض أكون قد وضعت هنا.
ودعونا نلقي نظرة على أكثر شيء واحد.
ويعود ذلك هنا، وأنا ذكرت هذا غضب.
حسنا.
إذا كان الأمر كذلك المسافة أقل من خمس بكسل، لقد وضع x و y السرعة إلى الصفر.
ماذا يحدث إذا تخلصنا من ذلك؟
لذلك أنا ذاهب لفعل هذا.
يرجى عذر هذا النمط الرهيب، ولكن نحن علق بها الرمز الصحيح.
لذلك أنا ذاهب لإنقاذ ذلك وتفعل نفس الأمر من قبل لجعله.
>> حسنا.
والآن ماذا يحدث؟
جيد.
نحن لا نزال بعد الماوس فقط مثل قبل،
ولكن عندما نصل الى الماوس، لقد حصلت على هذا غضب الإجمالي.
ما الذي يحدث هناك؟
حسنا، في ناقلات دينا الرياضيات، وتذكر أننا كنا
أخذ المسافة بين المؤشر ووسط الصورة؟
حسنا، كما أن النهج 0 فسيمكننا
مثل هذا النوع من السلوك مجنون حيث الصورة هو نوع من
مثل تتأرجح حول المؤشر.
وهذا ما خلق هذا غضب.
وهذا قبيح.
وربما كنت لا نريد الألعاب يفعل ذلك،
إلا إذا كان نوعا من تأثير خاص.
>> ولهذا السبب لدينا فقط هذا تعسفيا
قطع من خمسة بكسل، حيث نقول اذا كان في غضون خمس بكسل، نحن في حالة جيدة.
نحن لسنا بحاجة لتحريك الصورة بعد الآن.
وهذا ما يحدث هناك.
>> ولهذا الى حد كبير.
أنت تعرف الآن كيفية إنشاء نافذة، تحميل صورة،
رسم صورة للنافذة، والحصول على مدخلات لوحة المفاتيح، والحصول على مدخلات الماوس،
هناك حفنة من الآخر الإدخال التي لن يحدث
تعرف كيف تحصل على إذا كنت مجرد قضاء دقائق قليلة تبحث في الوثائق.
ولذلك عليك أن الواقع تماما عدد قليل من الأدوات تحت تصرفكم الآن
لإرسال لعبة كاملة.
>> الآن، كل لعبة تحتاج بعض الصوت، لكن الوثائق السمعية
هي أيضا جيدة جدا.
وأنا على استعداد للمراهنة على أنه إذا كنت أفهم كل الأشياء
تحدثنا عنه اليوم مع الصور، والسطوح،
النوافذ، وكل شيء، ثم في معرفة API الصوت ليس
سيكون سيئا.
ولذا فإنني أتطلع إلى رؤية ما خلق لكم مع SDL.