1 00:00:00,000 --> 00:00:05,069 2 00:00:05,069 --> 00:00:06,110 THOMAS حية: كل الحق. 3 00:00:06,110 --> 00:00:07,450 مرحبا للجميع. 4 00:00:07,450 --> 00:00:08,690 أنا توماس حية. 5 00:00:08,690 --> 00:00:15,160 هذه الندوة ستكون الكتابة ألعاب 2D في C باستخدام SDL. 6 00:00:15,160 --> 00:00:17,970 إذا كنت لا تعرف أنك كل يسأل، نعم، أنا حقا 7 00:00:17,970 --> 00:00:22,050 تريد أن تلعب مباريات وجعل الألعاب، ولكن ما هو هذا العمل SDL؟ 8 00:00:22,050 --> 00:00:25,320 حتى SDL هي مكتبة C. 9 00:00:25,320 --> 00:00:28,270 لأنها تقف على بسيط طبقة دايركت. 10 00:00:28,270 --> 00:00:31,340 وانها عبر منصة، مكتبة تطوير اللعبة. 11 00:00:31,340 --> 00:00:37,160 وهو يعمل على ويندوز، ماك، لينكس، وحتى دائرة الرقابة الداخلية والروبوت. 12 00:00:37,160 --> 00:00:40,380 أنه يتعامل مع أشياء مثل الوصول إلى أنظمة الصوت 13 00:00:40,380 --> 00:00:44,900 للكمبيوتر، لوحة المفاتيح، و الماوس، المقود، لو انهم المرفقة. 14 00:00:44,900 --> 00:00:48,300 على الهاتف المحمول، فإنه يمكن القيام به حتى الإدخال باللمس وكل ذلك. 15 00:00:48,300 --> 00:00:53,030 وبطبيعة الحال، فإنه يتعامل مع الرسومات، رسم الأشياء على الشاشة. 16 00:00:53,030 --> 00:00:56,470 >> حتى انها تستخدم على نطاق واسع جدا أنه، على الرغم من قد لا يكون سمع به من قبل. 17 00:00:56,470 --> 00:01:00,860 انها بنيت في، على سبيل المثال، محرك مصدر صمام، 18 00:01:00,860 --> 00:01:04,970 التي القوى ألعاب مثل بوابة وفريق القلعة 2. 19 00:01:04,970 --> 00:01:08,680 انها أيضا في عدد كبير جدا ألعاب إيندي أن يخرج، 20 00:01:08,680 --> 00:01:13,545 لذلك أنا متحمس لرؤية ما جميع سيتم اتخاذ معها. 21 00:01:13,545 --> 00:01:20,000 >> أهداف الندوة هي لتحصل على المبينة لتكون النامية SDL. 22 00:01:20,000 --> 00:01:22,700 ونحن في طريقنا لمعرفة كيف لخلق إطار اللعبة. 23 00:01:22,700 --> 00:01:26,130 ونحن في طريقنا لخلق العفاريت، وهي الصور في اللعبة 24 00:01:26,130 --> 00:01:27,744 التي يمكن ان تتحرك حولها. 25 00:01:27,744 --> 00:01:29,910 ونحن في طريقنا لمعرفة كيف لوتحريك العفاريت، 26 00:01:29,910 --> 00:01:32,910 لذلك تحرك حول لهم، وجعل منهم تتغير بمرور الوقت. 27 00:01:32,910 --> 00:01:35,580 ونحن في طريقنا لمعرفة كيف لالتقاط وحة المفاتيح والفأرة 28 00:01:35,580 --> 00:01:38,240 المدخلات من الكمبيوتر. 29 00:01:38,240 --> 00:01:41,550 ما نحن لن نتحدث عنه اليوم هو 3D الرسومات، 30 00:01:41,550 --> 00:01:45,520 لأن هذا هو معقدة للغاية الموضوع الذي نحن لم يكن لديك الوقت ل. 31 00:01:45,520 --> 00:01:49,010 ونحن لن تعلم كيفية تشغيل الصوت على مبارياتنا. 32 00:01:49,010 --> 00:01:53,300 ونحن لن يكون بناء لشيء ولكن لينكس. 33 00:01:53,300 --> 00:01:58,330 >> الآن المحاذير هناك ذلك، نأمل، بحلول نهاية الندوة، 34 00:01:58,330 --> 00:02:01,660 عليك أن تكون مريحة مع وثائق SDL، 35 00:02:01,660 --> 00:02:05,370 لذلك عليك أن تكون قادرا على الذهاب معرفة كيفية تشغيل الصوت لنفسك. 36 00:02:05,370 --> 00:02:12,150 بناء أيضا لنظام التشغيل Mac أو PC يجب أن تعمل بالضبط نفس بناء لينكس، 37 00:02:12,150 --> 00:02:14,700 ولكن الإعداد يذهب ل تكون مختلفة قليلا. 38 00:02:14,700 --> 00:02:17,700 لذلك يجب أن تكون قادرة على معرفة معرفة كيف يفعل هذه الأشياء 39 00:02:17,700 --> 00:02:20,900 في نهاية الندوة اليوم. 40 00:02:20,900 --> 00:02:26,980 >> ذلك لإعداد، ونحن في طريقنا لاستخدام الجهاز الظاهري. 41 00:02:26,980 --> 00:02:31,010 سوف نستخدم IDE CS50، ل نحن ذاهبون لمجرد أن الكتابة في C. 42 00:02:31,010 --> 00:02:35,120 ولكن منذ IDE ليس المتصفح، ونحن لا يمكن إنشاء نوافذ جديدة أو عرض 43 00:02:35,120 --> 00:02:36,410 الرسومات في ذلك. 44 00:02:36,410 --> 00:02:38,450 لذلك نحن بحاجة إلى الجهاز الظاهري. 45 00:02:38,450 --> 00:02:47,790 حتى تتمكن من متابعة التعليمات هنا في manual.CS50.net/appliance/15 46 00:02:47,790 --> 00:02:53,290 لتثبيت الأجهزة CS50 الرسمي، وهو مجرد لينكس الظاهري 47 00:02:53,290 --> 00:02:55,110 آلة. 48 00:02:55,110 --> 00:02:58,090 >> ثم مرة واحدة لديك أن كل مجموعة up-- ذلك 49 00:02:58,090 --> 00:03:02,090 قد يستغرق بعض الوقت، ل وdownload-- كبيرة جدا وأنت تسير 50 00:03:02,090 --> 00:03:07,060 لتشغيل في التحديث الرابطة بين الحصول على VM سودو. 51 00:03:07,060 --> 00:03:09,410 وهذا ما يحدث في الواقع لتحديث جميع البرامج 52 00:03:09,410 --> 00:03:12,670 حزم على الجهاز الظاهري. 53 00:03:12,670 --> 00:03:20,130 >> بعد ذلك، وأنت تسير لتشغيل سودو الرابطة بين الحصول على تثبيت، libsdl2-2.0-0، 54 00:03:20,130 --> 00:03:27,960 libsdl2-DBG، libsdl2 ديف، و بالإضافة إلى ذلك libsdl2-صورة-2،0-0، 55 00:03:27,960 --> 00:03:32,560 libsdl2-صورة-DBG، وlibsdl2 صورة ديف. 56 00:03:32,560 --> 00:03:33,640 فماذا ان تفعل؟ 57 00:03:33,640 --> 00:03:38,440 أن مجرد تثبيت التصحيح المعلومات والوثائق، ورؤوس، 58 00:03:38,440 --> 00:03:41,260 وثنائيات لمدة المكتبات. 59 00:03:41,260 --> 00:03:45,090 منتظم من العمر، SDL 2.0، ومكتبة أخرى 60 00:03:45,090 --> 00:03:50,110 دعا SDL الصور، التي ونحن في طريقنا إلى استخدام 61 00:03:50,110 --> 00:03:54,560 لتحميل ملفات الصور إلى لعبتنا. 62 00:03:54,560 --> 00:03:57,860 >> ذلك مرة واحدة لديك هذا أيضا ذلك، فقط عندما يسأل، 63 00:03:57,860 --> 00:04:01,100 أنت فقط اكتب نعم، هاهنا لتثبيت هذه الحزم، 64 00:04:01,100 --> 00:04:04,430 ومن ثم يجب أن تكون على ما يرام. 65 00:04:04,430 --> 00:04:14,800 لذلك للحصول على رمز التوزيع، كنت can-- يا عزيزي، لا يتم تحديث هذا. 66 00:04:14,800 --> 00:04:18,480 إلا إذا كان لديك سبب- جيثب إذا كان لديك حساب جيثب، 67 00:04:18,480 --> 00:04:24,450 يمكنك القيام بذلك جيت الأمر استنساخ لالريبو 68 00:04:24,450 --> 00:04:30,490 والتي من شأنها تحميل جيت الريبو مع كافة التعليمات البرمجية في ذلك، 69 00:04:30,490 --> 00:04:31,700 بحيث سيكون لديك رمز. 70 00:04:31,700 --> 00:04:36,470 >> إذا لم يكن لديك جيثب الحساب، ما يجب عليك فعله هو نوع 71 00:04:36,470 --> 00:04:48,867 wgithttps: //github.com/tlively/sdl seminar-- وهنا انها different-- 72 00:04:48,867 --> 00:04:49,700 /archive/master.zip. 73 00:04:49,700 --> 00:04:55,610 74 00:04:55,610 --> 00:04:59,220 ذلك مرة أخرى، وهذا هو بالضبط نفس URL، إلا أنه سيكون من 75 00:04:59,220 --> 00:05:09,010 tlively / SDL_seminar / master.zip و كنت تستخدم wgit لتحميل هذا. 76 00:05:09,010 --> 00:05:12,940 وبعد ذلك يمكنك فقط بفك هذا الأرشيف 77 00:05:12,940 --> 00:05:14,900 ومن ثم سيكون لديك كافة التعليمات البرمجية المصدر. 78 00:05:14,900 --> 00:05:17,580 لذلك آسف لذلك. 79 00:05:17,580 --> 00:05:23,880 ثم كما سيتم استضافة التعليمات البرمجية في صفحة الويب الندوة CS50 في بضع 80 00:05:23,880 --> 00:05:25,230 أيام. 81 00:05:25,230 --> 00:05:26,590 >> حسنا. 82 00:05:26,590 --> 00:05:29,932 فكيف نبدأ الكتابة اللعبة الخاصة بنا؟ 83 00:05:29,932 --> 00:05:31,890 كذلك، فإن أول شيء ونحن في طريقنا تريد أن تفعل 84 00:05:31,890 --> 00:05:34,740 هو أن ننظر في وثائق SDL. 85 00:05:34,740 --> 00:05:37,020 حتى هنا في VM. 86 00:05:37,020 --> 00:05:38,720 وهنا صفحة الويب. 87 00:05:38,720 --> 00:05:40,340 لقد انتقلت إلى العيش libsdl.org. 88 00:05:40,340 --> 00:05:43,110 89 00:05:43,110 --> 00:05:48,140 ما أنا ذاهب الى القيام به هنا هو يذهب أكثر إلى الشريط الجانبي، تحت الوثائق، 90 00:05:48,140 --> 00:05:51,040 وانقر على ويكي. 91 00:05:51,040 --> 00:05:56,870 هذا سيجلب لي ليكي يوجد معظم وثائق SDL. 92 00:05:56,870 --> 00:06:01,360 أكثر على الشريط الجانبي هنا، ونحن الذهاب إلى انقر API حسب الفئة، 93 00:06:01,360 --> 00:06:04,300 لأنه ذاهب لإعطاء لنا رأي القاطع لطيفة 94 00:06:04,300 --> 00:06:07,770 من API كامل لSDL. 95 00:06:07,770 --> 00:06:12,390 >> هكذا على سبيل المثال، لدينا التهيئة الأساسية 96 00:06:12,390 --> 00:06:18,380 وأغلقت، كل نوع من الاشياء الإداري لاستخدام SDL، 97 00:06:18,380 --> 00:06:21,630 ومن ثم لدينا قسم ل عرض الأشياء على الشاشة. 98 00:06:21,630 --> 00:06:23,000 هذا الفيديو. 99 00:06:23,000 --> 00:06:25,790 الأحداث المدخلات، وهذا يحصل المدخلات من لوحة المفاتيح، 100 00:06:25,790 --> 00:06:29,710 الحصول على مدخلات من الماوس، و عصا التحكم، إذا كان لديك حتى. 101 00:06:29,710 --> 00:06:32,901 هناك قوة ردود الفعل لأشياء مثل وحدات تحكم اللعبة، التي 102 00:06:32,901 --> 00:06:34,150 نحن لسنا بصدد الحديث عنها. 103 00:06:34,150 --> 00:06:35,630 وهنا الصوت. 104 00:06:35,630 --> 00:06:38,940 وبعد ذلك هناك مجموعة من الآخر الاشياء التي SDL يمكن أن نفعله لك. 105 00:06:38,940 --> 00:06:43,830 >> ولكن اليوم ونحن في طريقنا للتركيز على التهيئة هنا، 106 00:06:43,830 --> 00:06:48,332 عرض الصور في الفيديو القسم، والتعامل مع الأحداث الإدخال. 107 00:06:48,332 --> 00:06:50,290 لذلك فان هذه هي الرئيسية أقسام الوثائق 108 00:06:50,290 --> 00:06:53,050 التي يجب أن تكون مثيرة للقلق حول. 109 00:06:53,050 --> 00:06:57,170 للمتعة فقط، إذا نذهب أكثر هنا وانقر على API بالاسم، 110 00:06:57,170 --> 00:07:04,350 يمكننا أن نرى قائمة كل شيء واحد في مكتبة SDL. 111 00:07:04,350 --> 00:07:11,330 لذلك كل هذه الوظائف، التعدادات، الهياكل، وهو مبلغ مجنون من الاشياء، 112 00:07:11,330 --> 00:07:12,820 ترتيب ابجدي. 113 00:07:12,820 --> 00:07:14,580 وبشكل واضح، حتى تعلمون تفعلونه، 114 00:07:14,580 --> 00:07:19,100 هذا لن يكون مفيدا للغاية، وهذا هو السبب نقوم به API حسب الفئة. 115 00:07:19,100 --> 00:07:20,810 >> لذلك دعونا نبدأ. 116 00:07:20,810 --> 00:07:25,680 نأمل قمت بالفعل تحميل كود التوزيع. 117 00:07:25,680 --> 00:07:30,070 وذلك ما يمكنك القيام به هو، والحق هنا في الأجهزة CS50، 118 00:07:30,070 --> 00:07:31,150 ببساطة فتح المعبر. 119 00:07:31,150 --> 00:07:33,750 120 00:07:33,750 --> 00:07:34,440 ها نحن ذا. 121 00:07:34,440 --> 00:07:40,740 حتى لقد تحميلها بالفعل كود التوزيع باستخدام الرمز البريدي 122 00:07:40,740 --> 00:07:41,690 طريقة. 123 00:07:41,690 --> 00:07:43,140 ولقد فك ضغط عليه. 124 00:07:43,140 --> 00:07:46,120 حتى هنا هو في الماجستير ندوة SDL. 125 00:07:46,120 --> 00:07:49,750 لذلك أنا ذاهب للذهاب إلى هذا الدليل. 126 00:07:49,750 --> 00:07:55,310 وما نراه هنا هو أن لدينا سبعة ملفات C. 127 00:07:55,310 --> 00:07:58,070 وهذا هو الذهاب إلى رمز ونحن في طريقنا إلى أن تبحث في اليوم. 128 00:07:58,070 --> 00:08:00,040 لدينا MAKEFILE. 129 00:08:00,040 --> 00:08:06,950 وليس لدينا دليل الموارد، الذي لديه مجرد صورة 130 00:08:06,950 --> 00:08:09,070 عليك أن تكون رؤية قريبا بما فيه الكفاية. 131 00:08:09,070 --> 00:08:16,060 >> لذلك دعونا فتح هذه الملفات باستخدام محرر G-تحرير. 132 00:08:16,060 --> 00:08:22,000 لذلك أريد أن فتح كافة الملفات التي بادئ ذي بدء مرحبا وتنتهي مع .C. 133 00:08:22,000 --> 00:08:23,380 ها نحن ذا. 134 00:08:23,380 --> 00:08:28,180 لذلك هذا هو نافذة صغيرة، لذلك نحن ذاهب الى محاولة لجعل هذا أكبر. 135 00:08:28,180 --> 00:08:28,900 لا، بل ذهب بعيدا. 136 00:08:28,900 --> 00:08:32,836 137 00:08:32,836 --> 00:08:34,570 >> حسنا. 138 00:08:34,570 --> 00:08:37,959 حتى هنا أول جدا ملف ونحن في طريقنا للنظر في. 139 00:08:37,959 --> 00:08:39,000 انه دعا hello1_sdl.c. 140 00:08:39,000 --> 00:08:41,890 141 00:08:41,890 --> 00:08:47,980 وكل هذا يفعله هو تهيئة SDL مكتبة حتى نتمكن من البدء في استخدامه. 142 00:08:47,980 --> 00:08:51,550 كيف تعرف أن تأتي مع هذا الرمز نفسك؟ 143 00:08:51,550 --> 00:08:53,850 حسنا، إذا نظرنا أكثر في وثائق 144 00:08:53,850 --> 00:08:58,040 ونذهب إلى التهيئة واغلقت الباب، 145 00:08:58,040 --> 00:09:02,230 انها سوف تخبرنا عن حول كيفية تهيئة SDL. 146 00:09:02,230 --> 00:09:06,630 لذلك بالتأكيد قراءة هذه بعض وقت آخر. 147 00:09:06,630 --> 00:09:09,230 انها سوف اقول لكم كل حول ما يجري هنا. 148 00:09:09,230 --> 00:09:14,360 ولكن جوهر الرئيسي في هذه المسألة هو أن نحن بحاجة إلى استدعاء هذه الدالة SDL في مجال تكنولوجيا المعلومات 149 00:09:14,360 --> 00:09:18,910 وتمريرها ما هي أنواع الأشياء نريد المكتبة لتهيئة. 150 00:09:18,910 --> 00:09:23,620 حتى في حالتنا، نحن ذاهبون فقط لتهيئة الفيديو في الوقت الراهن، 151 00:09:23,620 --> 00:09:26,690 حتى نتمكن من البدء في عرض الصور. 152 00:09:26,690 --> 00:09:32,370 >> هنا، يمكنك معرفة ما إذا كان نحن انقر على SDL في مجال تكنولوجيا المعلومات، ونحن 153 00:09:32,370 --> 00:09:36,160 يمكن الحصول على المزيد من المعلومات، بما في ذلك قيمة الإرجاع. 154 00:09:36,160 --> 00:09:39,050 لذلك نرى هنا أنه returnes صفر على النجاح. 155 00:09:39,050 --> 00:09:43,320 حتى في التعليمات البرمجية لدينا، ونحن في طريقنا ل معرفة ما اذا كان لا يعود الصفر، 156 00:09:43,320 --> 00:09:47,020 وإذا كان لا يعود الصفر، لذلك لم يكن ناجحا، 157 00:09:47,020 --> 00:09:50,650 ثم نحن في طريقنا لمجرد طباعة خطأ استخدام هذه الوظيفة الأخرى، 158 00:09:50,650 --> 00:09:56,260 خطأ الحصول على SDL، والتي ترجع سلسلة وصف الخطأ الذي حدث. 159 00:09:56,260 --> 00:09:58,510 ونحن في طريقنا لطباعة تلك خطأ ومن ثم نحن فقط 160 00:09:58,510 --> 00:10:02,270 الذهاب لإنهاء البرنامج مع رمز الخطأ. 161 00:10:02,270 --> 00:10:06,470 >> ثم شيء آخر أننا بحاجة القيام به هو، قبل إنهاء البرنامج، 162 00:10:06,470 --> 00:10:10,830 إذا نجحنا في تهيئة SDL، نحن بحاجة فقط للاتصال انسحبت SDL. 163 00:10:10,830 --> 00:10:15,750 وهذا ما يحدث للتعامل مع تنظيف كل من الموارد الداخلية SDL بالنسبة لنا. 164 00:10:15,750 --> 00:10:21,240 حتى there-- الوثائق مرة أخرى، نحن هنا في التهيئة 165 00:10:21,240 --> 00:10:23,640 واغلقت الباب من وثائق. 166 00:10:23,640 --> 00:10:26,680 يمكنك فقط انقر على وظيفة هنا، قم بإنهاء SDL، 167 00:10:26,680 --> 00:10:28,700 ويمكنك أن تقرأ كل شيء عن ذلك أيضا. 168 00:10:28,700 --> 00:10:31,400 والكثير من هذه وظيفة صفحات الوثائق 169 00:10:31,400 --> 00:10:35,630 يكون رمز المثال، لذلك هذا هو موردا جيدا للغاية. 170 00:10:35,630 --> 00:10:39,610 بالتأكيد قضاء بعض الوقت قراءة اجزاء من هذا الويكي 171 00:10:39,610 --> 00:10:42,520 إذا كنت تنوي القيام به هذا لمشروع. 172 00:10:42,520 --> 00:10:43,760 >> حسنا. 173 00:10:43,760 --> 00:10:46,590 لذلك هذا هو برنامجنا بأكمله. 174 00:10:46,590 --> 00:10:53,935 ما يمكننا القيام به الآن is-- أنا الذهاب لفتح MAKEFILE هنا، 175 00:10:53,935 --> 00:10:56,150 لذلك أنا ذاهب لتأخذ ننظر كيف يعمل. 176 00:10:56,150 --> 00:10:59,500 وانها MAKEFILE بسيط جدا، على غرار ما كنت قد رأيت من قبل. 177 00:10:59,500 --> 00:11:04,010 أحد الفروق الرئيسية غير أنه، هنا، هذا 178 00:11:04,010 --> 00:11:07,870 يجري لادخال نتيجة تشغيل هذا الأمر الذي كنت قد بالفعل 179 00:11:07,870 --> 00:11:10,850 تثبيت إذا كنت قد قمت بتثبيت SDL. 180 00:11:10,850 --> 00:11:13,230 وهذا أمر ما يجري لتوليد 181 00:11:13,230 --> 00:11:16,710 بعض الأعلام إضافية للمترجم. 182 00:11:16,710 --> 00:11:22,050 >> بالإضافة إلى ذلك، ونحن يعطيها جميع الأوامر المعتادة، وكذلك 183 00:11:22,050 --> 00:11:23,430 هذين الأمرين. 184 00:11:23,430 --> 00:11:30,270 حتى المقابض -lsdl2 صورة ربط في مكتبة الصور SDL. 185 00:11:30,270 --> 00:11:36,200 و-lm يعالج الواقع الربط في مكتبة الرياضيات C القياسية. 186 00:11:36,200 --> 00:11:40,630 لذلك نحن لا تسير في حاجة إلى تلك لكافة الملفات C لدينا، 187 00:11:40,630 --> 00:11:43,900 ولكن نحن فقط وضعت لهم في ذلك ما في وسعنا استخدام نفس MAKEFILE على كل شيء 188 00:11:43,900 --> 00:11:44,816 بدون تعديلات. 189 00:11:44,816 --> 00:11:46,970 190 00:11:46,970 --> 00:11:50,080 >> هنا في المصادر، هذا هو المكان الذي كنت 191 00:11:50,080 --> 00:11:53,680 وضع الملفات التي كانوا في طريقهم تجميع للمشروع الخاص بك. 192 00:11:53,680 --> 00:11:57,570 ولكن بما أن كل واحدة من بلدي C ملفات هنا لديه وظيفة الرئيسية، 193 00:11:57,570 --> 00:12:00,000 انها سوف يحصل الخلط إذا وضعنا لهم في كل شيء. 194 00:12:00,000 --> 00:12:06,930 لذلك أنا سأقول فقط، في الوقت الراهن، hello1_sdl.c، 195 00:12:06,930 --> 00:12:11,150 وهو واحد ونحن فقط نظرت. 196 00:12:11,150 --> 00:12:18,740 حتى إذا ذهبت إلى أكثر من هنا، ويمكنني أن لا تجعل. 197 00:12:18,740 --> 00:12:22,160 وماذا فعلت هل هو مجرد جمعت هذا الملف الأول. 198 00:12:22,160 --> 00:12:28,780 وبعد ذلك يمكننا اكتب ./game، ل انها القابل للتنفيذ أنها أنتجت. 199 00:12:28,780 --> 00:12:31,660 وكل ما فعلته هو طباعة التهيئة ناجحة. 200 00:12:31,660 --> 00:12:33,300 وهكذا فعلنا شيئا الصحيح. 201 00:12:33,300 --> 00:12:36,200 ولكن هذا هو نوع من السأم، لأننا لم ترى نافذة، 202 00:12:36,200 --> 00:12:37,900 لا شيء كان يتحرك حولها. 203 00:12:37,900 --> 00:12:41,030 >> كبيرة جدا، وصلنا SDL تهيئة. 204 00:12:41,030 --> 00:12:43,520 الآن، دعونا ننتقل إلى شيء قليلا أكثر إثارة للاهتمام. 205 00:12:43,520 --> 00:12:54,700 حتى هنا لدينا hello2_window.c، و هذا سيكون أكثر قليلا 206 00:12:54,700 --> 00:13:00,010 برنامج معقد C التي تهيئة SDL تماما مثل قبل، 207 00:13:00,010 --> 00:13:04,250 إلا الآن ونحن في طريقنا أيضا تهيئة الموقت SDL. 208 00:13:04,250 --> 00:13:07,720 وهذا هو الذهاب الى السماح لنا الوصول إلى توقيت داخلي 209 00:13:07,720 --> 00:13:10,550 وظائف استخدام المتعلقة الوقت. 210 00:13:10,550 --> 00:13:11,920 >> ثم دعونا ننظر إلى هنا. 211 00:13:11,920 --> 00:13:16,840 ما نقوم به هو لدينا هذا المؤشر إلى نافذة البنية SDL، الذي 212 00:13:16,840 --> 00:13:21,160 سوف يتم إنشاؤها من قبل هذه الدعوة إلى الوظيفة، SDL إنشاء نافذة. 213 00:13:21,160 --> 00:13:25,380 الآن، وهذا يستغرق الكثير من الحجج، لذلك دعونا نذهب للبحث في الوثائق. 214 00:13:25,380 --> 00:13:27,930 ذلك مرة أخرى، أنا ذاهب ل API حسب الفئة، وأنا 215 00:13:27,930 --> 00:13:33,820 الذهاب الى الفيديو هنا، وأول القسم، وعرض إدارة النافذة. 216 00:13:33,820 --> 00:13:36,470 لذلك هذا القسم له طن من الأشياء في ذلك، 217 00:13:36,470 --> 00:13:39,970 ولكن إذا نظرتم من خلال هذه الوظائف، عليك 218 00:13:39,970 --> 00:13:43,620 نرى أن الأرجح لدينا واحدة تريد يسمى SDL إنشاء النافذة، 219 00:13:43,620 --> 00:13:46,600 الذي صادف أن يكون الحق في الأعلى. 220 00:13:46,600 --> 00:13:49,080 >> وهكذا وهذا هو وثائق لهذه المهمة. 221 00:13:49,080 --> 00:13:53,710 انها تسير في إطار أن يكون لها عنوان، وx و y موضع على الشاشة، 222 00:13:53,710 --> 00:13:56,960 انها ستكون لدينا عرض، ارتفاع، وبعد ذلك سيستغرق بعض الأعلام. 223 00:13:56,960 --> 00:14:01,220 الآن، نحن لا نهتم فعلا عن أي من هذه العلامات في الوقت الراهن، 224 00:14:01,220 --> 00:14:04,560 ولكن إذا كنت تريد أن تفعل شيئا مثل تقديم إطار كامل الشاشة، 225 00:14:04,560 --> 00:14:07,920 هل يمكن أن نلقي نظرة على ذلك. 226 00:14:07,920 --> 00:14:13,190 الآن، نحن ذاهبون فقط لاستخدام هذه القيم خاصة، 227 00:14:13,190 --> 00:14:18,775 نافذة SDL بالإضافة إلى تركز لx و y من أجل 228 00:14:18,775 --> 00:14:21,800 لخلق مجرد نافذة في وسط الشاشة لدينا. 229 00:14:21,800 --> 00:14:24,370 >> وهذا ما أن يفعل. 230 00:14:24,370 --> 00:14:27,960 وإذا حدث أن تكون نافذة لاغية، وهذا يعني وجود خطأ، 231 00:14:27,960 --> 00:14:32,570 ثم مرة أخرى نحن ذاهبون لمجرد طباعة الخطأ باستخدام الخطأ الحصول على SDL. 232 00:14:32,570 --> 00:14:36,570 ثم لأننا تهيئة SDL، ونحن الآن بحاجة إلى إغلاقه. 233 00:14:36,570 --> 00:14:40,900 لذلك فإننا ندعو استقال SDL قبل عودة للرئيسية واحدة. 234 00:14:40,900 --> 00:14:42,905 >> لذلك لدينا هذه النافذة مفتوحة أمل. 235 00:14:42,905 --> 00:14:44,613 وما نحن ذاهبون القيام به هو نحن ذاهبون 236 00:14:44,613 --> 00:14:50,340 للاتصال SDL عن 5000 ميلي ثانية، وهو نفس خمس ثوان. 237 00:14:50,340 --> 00:14:55,640 وعندما ننتهي مع ذلك، انها سوف تدمر النافذة، 238 00:14:55,640 --> 00:14:59,470 تنظيف مكتبة SDL، والخروج من البرنامج. 239 00:14:59,470 --> 00:15:05,240 لذلك دعونا نمضي قدما وإعطاء هذا رصاصة واحدة. 240 00:15:05,240 --> 00:15:08,660 >> حتى الآن بدلا من تغيير في makefile في كل مرة، 241 00:15:08,660 --> 00:15:12,180 يمكنني ببساطة لا تجعل، و ثم في سطر الأوامر، 242 00:15:12,180 --> 00:15:16,090 وتقول مصادر يساوي ثم ملف نقوم بتجميع. 243 00:15:16,090 --> 00:15:17,090 لذلك فمن hello2_window.c. 244 00:15:17,090 --> 00:15:21,390 245 00:15:21,390 --> 00:15:21,890 رائع. 246 00:15:21,890 --> 00:15:22,970 لا erros. 247 00:15:22,970 --> 00:15:26,085 الآن، إذا كنا تشغيل قابل للتنفيذ لدينا، ونحن نرى هذا الإطار. 248 00:15:26,085 --> 00:15:27,960 الآن هناك عدد قليل مشاكل مع النافذة. 249 00:15:27,960 --> 00:15:32,820 اننا يمكن ان تتحرك حولها، ولكن لديها هذا غير المرغوب فيه خلفية داخل منه. 250 00:15:32,820 --> 00:15:34,660 لذلك نحن لم رسمها أي شيء، ولذا فلا بد من 251 00:15:34,660 --> 00:15:38,210 مجرد كاملة من القمامة، والتي هو الى حد كبير ما كنا نتوقع. 252 00:15:38,210 --> 00:15:41,010 >> وعلاوة على ذلك، فإننا لا نستطيع إغلاق النافذة. 253 00:15:41,010 --> 00:15:44,780 أنا الضغط على هذا X في الزاوية ولا شيء يحدث. 254 00:15:44,780 --> 00:15:47,840 لذلك سنرى كيفية إصلاح أن في قليلا. 255 00:15:47,840 --> 00:15:51,750 لذلك دعونا إصلاح جزء فيها نافذة مليء القمامة أولا. 256 00:15:51,750 --> 00:16:00,850 حتى اذا ذهبنا الى hello3_image.c، ما يمكننا أن نرى هو أننا قمنا بإضافة قليل 257 00:16:00,850 --> 00:16:03,360 المزيد من الأشياء هنا. 258 00:16:03,360 --> 00:16:08,740 أضفنا هذا الرأس الجديد ملف للحصول على وظائف جهاز ضبط الوقت. 259 00:16:08,740 --> 00:16:11,490 أعتقد أننا فعلنا ذلك في الماضي واحد أيضا، وأنا لم أذكر ذلك. 260 00:16:11,490 --> 00:16:13,550 ولكن الآن لأننا العمل مع الصور، 261 00:16:13,550 --> 00:16:18,720 نحن في حاجة إلى تضمين SDL صورة ملف الرأس كذلك. 262 00:16:18,720 --> 00:16:22,087 حتى انها نفس الشيء من قبل، تهيئة SDL هنا، 263 00:16:22,087 --> 00:16:23,420 نفس الصفقة مع إنشاء النوافذ. 264 00:16:23,420 --> 00:16:25,380 لقد رأينا ذلك من قبل الآن. 265 00:16:25,380 --> 00:16:29,870 >> الآن نحن بحاجة إلى إنشاء ما يسمى العارض، الذي نوع من يسير جنبا إلى جنب 266 00:16:29,870 --> 00:16:30,800 مع النافذة. 267 00:16:30,800 --> 00:16:33,860 ولكن هذا النوع من الكائن المجرد هذا 268 00:16:33,860 --> 00:16:37,370 المسؤول عن القيام بكل هذه رسم العمليات لالنافذة. 269 00:16:37,370 --> 00:16:41,580 وأنه يتوافق مع الواقع إلى برنامج تحميل 270 00:16:41,580 --> 00:16:47,880 في أجهزة الرسومات في الخاص الكمبيوتر أو الهاتف أو أيا كان. 271 00:16:47,880 --> 00:16:51,005 حتى الأعلام نريد لتمرير it-- ويمكنك أن تبحث في الوثائق 272 00:16:51,005 --> 00:16:56,160 للحصول على مزيد من التفاصيل here-- ذاهبون أن SDL تقديم المعجل، التي 273 00:16:56,160 --> 00:16:58,550 يعني أنه سيكون باستخدام أجهزة الرسومات 274 00:16:58,550 --> 00:17:01,490 وليس فقط يحتذى في مجال البرمجيات. 275 00:17:01,490 --> 00:17:07,390 >> ونحن في طريقنا للاستخدام SDL العارض PRESENTVSYNC. 276 00:17:07,390 --> 00:17:12,280 VSYNC هو الشيء الذي يجعل ببساطة الرسومات الخاصة بك تبدو أفضل ويمنع 277 00:17:12,280 --> 00:17:14,970 هذا الشيء يسمى الشاشة الإرهاب، حيث نصف 278 00:17:14,970 --> 00:17:17,720 من إطار واحد ونصف في اليوم التالي الانجرار إطار في نفس الوقت 279 00:17:17,720 --> 00:17:20,056 ويبدو مروعا. 280 00:17:20,056 --> 00:17:23,130 ولكن مرة أخرى، يمكنك الذهاب قراءة عن ذلك بنفسك. 281 00:17:23,130 --> 00:17:24,319 >> لذلك لدينا بعض الأعلام هنا. 282 00:17:24,319 --> 00:17:27,810 ولذا فإننا ذاهبون فقط للاتصال هذه الوظيفة SDL خلق العارض. 283 00:17:27,810 --> 00:17:31,340 ونحن في طريقنا لاعطائها النافذة لاقترانه أن العارض. 284 00:17:31,340 --> 00:17:34,520 واحد السلبي يعني أننا لا نهتم بما برنامج تشغيل الرسومات ونحن في طريقنا للاستخدام. 285 00:17:34,520 --> 00:17:36,603 بحيث ينبغي حد كبير يكون دائما سلبيا، 286 00:17:36,603 --> 00:17:39,010 ما لم تعرفه عن برامج تشغيل الرسومات. 287 00:17:39,010 --> 00:17:41,650 وبعد ذلك نحن ذاهبون فقط لتمريرها الأعلام لدينا. 288 00:17:41,650 --> 00:17:47,240 حتى إذا كان ذلك يعود لاغية، ثم نحن الذهاب لطباعة خطأ كالعادة، 289 00:17:47,240 --> 00:17:49,550 ولكن بعد ذلك ونحن في طريقنا أيضا لتدمير النافذة 290 00:17:49,550 --> 00:17:54,970 لتنظيف تلك الموارد قبل داعيا SDL إنهاء والعودة. 291 00:17:54,970 --> 00:17:58,110 >> الآن، الجزء المثير للاهتمام هنا وحيث أننا تحميل صورتنا 292 00:17:58,110 --> 00:18:00,870 باستخدام هذه الوظيفة IMG_load. 293 00:18:00,870 --> 00:18:04,050 هذه هي الوظيفة الوحيدة نحن ذاهبون استخدام من مكتبة الصور SDL. 294 00:18:04,050 --> 00:18:05,480 انها واحدة الوحيد الذي نحتاجه. 295 00:18:05,480 --> 00:18:12,950 انها وظيفة التي تأخذ سلسلة هذا هو مسار أي مورد الصورة. 296 00:18:12,950 --> 00:18:18,024 ويمكن أن يكون بابوا نيو غينيا، وGIF، نقطية، أي من هذه الأشياء. 297 00:18:18,024 --> 00:18:19,690 وهذا هو السبب في هذه الوظيفة هي لطيفة جدا. 298 00:18:19,690 --> 00:18:22,560 فإنه يمكن التعامل مع حد كبير أي شكل. 299 00:18:22,560 --> 00:18:27,240 الأحمال في الذاكرة ويخزنها كما دعا شيء سطح SDL. 300 00:18:27,240 --> 00:18:34,660 >> الآن على سطح SDL هو مجرد البنية تمثل بيانات الصورة في الذاكرة. 301 00:18:34,660 --> 00:18:38,054 بحيث يمكنك قراءة المزيد حول أن في وثائق اثنين. 302 00:18:38,054 --> 00:18:40,720 وإذا كان هذا الأخطاء، ثم نحن تنوي القيام به في كل شيء حيث 303 00:18:40,720 --> 00:18:44,480 نطبع الخطأ، أغلق دينا الموارد، ومن ثم إنهاء البرنامج. 304 00:18:44,480 --> 00:18:48,970 الآن الشيء المثير للاهتمام هو، قبل يمكننا رسم هذه الصورة إلى النافذة، 305 00:18:48,970 --> 00:18:51,390 نحن بحاجة لجعله الملمس. 306 00:18:51,390 --> 00:18:54,460 الآن الملمس يتوافق لبيانات الصورة تحميل 307 00:18:54,460 --> 00:18:57,820 في الذاكرة للأجهزة الرسم و. 308 00:18:57,820 --> 00:19:00,720 >> لذلك السطح في main الذاكرة، الذاكرة العادية 309 00:19:00,720 --> 00:19:05,550 أننا أستعمل كل فصل دراسي، والملمس في هذا VRAM منفصل 310 00:19:05,550 --> 00:19:09,410 الذاكرة أن ضوابط بطاقة الرسومات. 311 00:19:09,410 --> 00:19:13,170 لذلك فإننا ندعو هذه الوظيفة SDL_CreateTextureFromSurface. 312 00:19:13,170 --> 00:19:17,104 اعطيناها لدينا العارض وسطح لدينا. 313 00:19:17,104 --> 00:19:19,020 ثم نحن في الواقع فعلت مع السطح، 314 00:19:19,020 --> 00:19:20,311 لذلك نحن ذاهبون لمجرد تحريرها. 315 00:19:20,311 --> 00:19:22,210 نحن لسنا بحاجة بعد الآن. 316 00:19:22,210 --> 00:19:26,650 ثم حتى إذا كان هذا النداء errored وعاد لاغية، 317 00:19:26,650 --> 00:19:29,630 ثم نحن في طريقنا للقيام كلها خطأ الإبلاغ الشيء مرة أخرى. 318 00:19:29,630 --> 00:19:30,920 >> حسنا. 319 00:19:30,920 --> 00:19:34,810 هنا، نصل إلى بعض وظائف التقديم الفعلية. 320 00:19:34,810 --> 00:19:37,730 لذلك يدعو SDL_RenderClear وفمررها 321 00:19:37,730 --> 00:19:42,550 العارض المرتبطة نافذتنا ببساطة يجعل نافذة يذهب السوداء. 322 00:19:42,550 --> 00:19:47,650 لذلك يزيل تلك الزبالة التي شهدناها في نافذتنا قبل ويجعل من الأسود. 323 00:19:47,650 --> 00:19:50,750 وبعد ذلك نحن ذاهبون للاتصال SDL_RenderCopy، 324 00:19:50,750 --> 00:19:53,010 إعطائها لدينا العارض، والملمس لدينا. 325 00:19:53,010 --> 00:19:55,800 وسوف نتحدث عن ما هذه الحقول في شيء. 326 00:19:55,800 --> 00:19:57,830 ولكن هذا سيكون ل أخذ البيانات الملمس 327 00:19:57,830 --> 00:20:03,100 ونسخه على موقعنا نافذة على رسم الصورة. 328 00:20:03,100 --> 00:20:07,020 وذلك بعد أن فعلت هذه النسخة البيانات على نافذتنا، 329 00:20:07,020 --> 00:20:11,180 علينا أن نفعل هذا وظيفة اضافية دعا SDL_RenderPresent. 330 00:20:11,180 --> 00:20:15,360 >> وهذا مثير للاهتمام لأن هذا يحصل 331 00:20:15,360 --> 00:20:18,770 في موضوع دعا التخزين المؤقت المزدوج. 332 00:20:18,770 --> 00:20:24,380 لذلك التخزين المؤقت المزدوج هو الاسلوب الذي يجعل الرسومات الخاصة بك تبدو أفضل كثيرا. 333 00:20:24,380 --> 00:20:28,240 مرة أخرى، فإنه يمنع أن تمزق الشاشة كنت أتحدث عنها في وقت سابق، حيث 334 00:20:28,240 --> 00:20:29,590 لديك اثنين من المخازن. 335 00:20:29,590 --> 00:20:32,260 هناك منطقة عازلة في الظهر الذاكرة ومنطقة عازلة الأمامي. 336 00:20:32,260 --> 00:20:36,410 المخزن المؤقت الأمامي هو حرفيا ما هو على الشاشة في الوقت الراهن. 337 00:20:36,410 --> 00:20:42,070 لذلك نحن نفعل كل هذه نلفت الاختلافات، مثل SDL تقديم نسخة أو SDL_RenderClear 338 00:20:42,070 --> 00:20:43,080 إلى المخزن المؤقت الخلفي. 339 00:20:43,080 --> 00:20:44,800 بحيث تعديل الأمور في المخزن المؤقت الخلفي. 340 00:20:44,800 --> 00:20:48,970 هنا نحن قد رسم هذه الساحة الخضراء إلى المخزن المؤقت مرة أخرى. 341 00:20:48,970 --> 00:20:52,300 >> حتى ذلك الحين عندما ننتهي به لدينا تجعل العمليات التي 342 00:20:52,300 --> 00:20:55,700 قد يستغرق فترة طويلة حقا الوقت، ما نحن في طريقنا للقيام 343 00:20:55,700 --> 00:20:57,860 هو تبديل مخازن. 344 00:20:57,860 --> 00:21:00,720 لذلك يأخذ حرفيا فقط عازلة الأمامي والخلفي عازلة 345 00:21:00,720 --> 00:21:02,990 ومفاتيح لهم، لذلك هذا، على الفور، 346 00:21:02,990 --> 00:21:06,630 في عملية واحدة، بدلا من ربما مئات أو آلاف، 347 00:21:06,630 --> 00:21:10,910 كل من صدر حديثا الكائنات التي تظهر على الشاشة. 348 00:21:10,910 --> 00:21:13,160 وهذا يمنع الامور مثل منعش الشاشة 349 00:21:13,160 --> 00:21:16,710 نصف عندما قمنا تعادل فقط من الأشياء لدينا للإطار. 350 00:21:16,710 --> 00:21:21,280 ولهذا السبب نحن بحاجة إلى استدعاء SDL_RenderPresent، فضلا 351 00:21:21,280 --> 00:21:23,320 كما SDL_RenderCopy. 352 00:21:23,320 --> 00:21:25,749 >> مرة أخرى، نحن ذاهبون فقط الانتظار لمدة خمس ثوان. 353 00:21:25,749 --> 00:21:27,540 ثم نحن في طريقنا لل تنظيف مواردنا. 354 00:21:27,540 --> 00:21:29,540 لدينا عدد غير قليل من أكثر هذه المرة. 355 00:21:29,540 --> 00:21:31,750 وبعد ذلك نحن ذاهبون فقط للخروج من البرنامج. 356 00:21:31,750 --> 00:21:35,350 لذلك دعونا نفعل ذلك. 357 00:21:35,350 --> 00:21:41,880 انا ذاهب الى جعل اكتب، ثم المصادر يساوي hello-- هذا هو الآن 3image.c. 358 00:21:41,880 --> 00:21:49,632 359 00:21:49,632 --> 00:21:52,240 كل الحق، أن تجميع أية أخطاء. 360 00:21:52,240 --> 00:21:57,210 ويمكنك أن ترى هنا لقد قمت الآن تعادل خارج صورة بلدي، مرحبا، CS50! 361 00:21:57,210 --> 00:22:00,560 لدينا النافذة، والتي يختفي بعد خمس ثوان. 362 00:22:00,560 --> 00:22:02,090 >> الآن، وهذا لا يزال لديه مشاكل، أليس كذلك؟ 363 00:22:02,090 --> 00:22:05,750 هذه ليست التطبيق الجيد، لأنه عندما أحاول أن أغلق النافذة، 364 00:22:05,750 --> 00:22:06,500 لاشيء يحدث. 365 00:22:06,500 --> 00:22:09,540 أن x لا يزال غير متجاوبة. 366 00:22:09,540 --> 00:22:17,420 لذلك دعونا نلقي نظرة على ملف المقبل، hello4animation. 367 00:22:17,420 --> 00:22:21,850 لذلك هذا هو الملف ما يجري لإدخال 368 00:22:21,850 --> 00:22:25,124 الحركة والتنقل لصورتنا. 369 00:22:25,124 --> 00:22:27,040 لذلك نحن ذاهبون للقيام الشيء نفسه كما كان من قبل، 370 00:22:27,040 --> 00:22:30,190 بدء SDL، إنشاء نافذة، إنشاء العارض، 371 00:22:30,190 --> 00:22:33,030 تحميل الصورة إلى الذاكرة، إنشاء الملمس. 372 00:22:33,030 --> 00:22:35,090 لقد رأينا كل هذا من قبل. 373 00:22:35,090 --> 00:22:36,770 الآن، وهذا هو الجديد. 374 00:22:36,770 --> 00:22:42,305 ونحن في طريقنا إلى أن بنية تسمى والمستطيل SDL، الذي هو مجرد مستطيل. 375 00:22:42,305 --> 00:22:49,950 اذا ذهبنا أكثر من هنا، يمكننا القيام بالبحث عن SDL المستطيل، 376 00:22:49,950 --> 00:22:54,040 ويمكنك ان ترى انها هيكل بسيط جدا. 377 00:22:54,040 --> 00:22:56,760 كان لديه خ، ذ ل الموقف، وذلك 378 00:22:56,760 --> 00:23:02,080 لديه عرض وارتفاع لل حجم المستطيل. 379 00:23:02,080 --> 00:23:07,785 >> وذلك ما نحن بصدد القيام به هو نحن الذهاب لتعريف هذه SDL المستطيل دست، 380 00:23:07,785 --> 00:23:09,480 للالمقصد. 381 00:23:09,480 --> 00:23:14,130 وهذا هو المكان المناسب على الشاشة حيث 382 00:23:14,130 --> 00:23:16,005 ونحن في طريقنا إلى أن الرسم صورتنا، أليس ذلك 383 00:23:16,005 --> 00:23:17,880 إذا نحن في طريقنا لتكون نقل الصورة حولها، 384 00:23:17,880 --> 00:23:20,300 ثم الوجهة حيث ونحن في طريقنا إلى رسم الصورة 385 00:23:20,300 --> 00:23:22,620 تحتاج إلى أن تتحرك حولها. 386 00:23:22,620 --> 00:23:24,910 لذلك نحن ذاهبون لهذه الكلمة وظيفة SDL_QueryTexture. 387 00:23:24,910 --> 00:23:27,550 388 00:23:27,550 --> 00:23:33,500 وتلاحظ أنا تمرير عنوان من dest.w، وهو العرض، 389 00:23:33,500 --> 00:23:36,950 وdest.h، وهو الارتفاع. 390 00:23:36,950 --> 00:23:40,425 وهكذا SDL_QueryTexture يجري لتخزين في تلك الحقول العرض 391 00:23:40,425 --> 00:23:41,675 وارتفاع نسيج لدينا. 392 00:23:41,675 --> 00:23:44,680 393 00:23:44,680 --> 00:23:47,030 >> ثم ما أنا ذاهب القيام به هو أنا ذاهب 394 00:23:47,030 --> 00:23:55,580 لوضع dest.x نافذة تكون عرض dest.w ناقص، وهو 395 00:23:55,580 --> 00:23:59,000 عرض العفريت، مقسوما على 2. 396 00:23:59,000 --> 00:24:03,860 وهذا يجري إعداده لذلك أن الصورة تتمحور تماما 397 00:24:03,860 --> 00:24:06,780 في إطار عملنا، كل الحق؟ 398 00:24:06,780 --> 00:24:08,652 وحتى الآن لدي موقف ذ. 399 00:24:08,652 --> 00:24:10,360 وهذا هو الذهاب الى يكون هذا المتغير 400 00:24:10,360 --> 00:24:16,390 تغيير، لأننا سنتعرض ل تحريك الصورة في الاتجاه ذ. 401 00:24:16,390 --> 00:24:19,050 والآن لدينا شيء دعا حلقة الرسوم المتحركة. 402 00:24:19,050 --> 00:24:21,180 >> فكيف لا يعمل الرسوم المتحركة؟ 403 00:24:21,180 --> 00:24:27,630 حسنا، يمكن أن العين البشرية كشف 12 متميزا الصور في كل ثانية، كل الحق؟ 404 00:24:27,630 --> 00:24:33,060 لذلك إذا كنت فلاش 12 صورة بطاقات في وجهي في الثانية، رأيت كل تلك الصور 405 00:24:33,060 --> 00:24:35,950 كصورة متميزه الخاصة بها. 406 00:24:35,950 --> 00:24:39,690 الآن، إذا كنت فلاش أكثر صور لي في الثانية، 407 00:24:39,690 --> 00:24:42,140 ثم عيني ستبدأ لطمس معا 408 00:24:42,140 --> 00:24:46,920 وأود أن تتصور أنها الحركة، بدلا من صورة متميزة واحد. 409 00:24:46,920 --> 00:24:51,930 لذلك، على سبيل المثال، الأفلام والقنوات التلفزيونية، أنها وميض الصور في لكم 24 مرة 410 00:24:51,930 --> 00:24:52,570 ثانية. 411 00:24:52,570 --> 00:24:55,110 ذلك أن 24 لقطة في الثانية الواحدة. 412 00:24:55,110 --> 00:25:00,136 شاشات الكمبيوتر، من ناحية أخرى، وغالبا ما تكون في 60 لقطة في الثانية الواحدة. 413 00:25:00,136 --> 00:25:01,260 هذا هو سرعة التحديث الخاصة بهم. 414 00:25:01,260 --> 00:25:04,650 هذه هي الطريقة التي غالبا ما تحديث الصورة التي تظهر على الشاشة. 415 00:25:04,650 --> 00:25:08,960 لذلك هدفنا سيكون 60 لقطة في الثانية للألعاب دينا. 416 00:25:08,960 --> 00:25:11,770 417 00:25:11,770 --> 00:25:13,710 >> لذلك دعونا نرى أن في التعليمات البرمجية. 418 00:25:13,710 --> 00:25:19,064 لذلك لكل إطار، ونحن أولا الذهاب لمسح النافذة. 419 00:25:19,064 --> 00:25:20,230 هذا هو النمط العام. 420 00:25:20,230 --> 00:25:22,450 كنت واضحا دائما نافذة لكل إطار، ومن ثم 421 00:25:22,450 --> 00:25:25,210 تفعل كل من الرسم العمليات، ثم في النهاية، 422 00:25:25,210 --> 00:25:29,610 لا RenderPresent لاظهار كل شيء في الإطار. 423 00:25:29,610 --> 00:25:33,910 ثم كنت تريد الذهاب ل لدينا انتظار في نهاية 424 00:25:33,910 --> 00:25:36,340 الانتظار حتى اليوم التالي يجب أن يبدأ الإطار. 425 00:25:36,340 --> 00:25:38,650 >> لذلك إذا كنت تفعل الكثير من حساب معقد هنا 426 00:25:38,650 --> 00:25:43,100 التي استغرقت أكثر من 16 ميلي ثانية، سيكون من المستحيل بالنسبة لي 427 00:25:43,100 --> 00:25:46,890 للحصول على هذا الإطار معدل 60 أن كنت أريد، لأن كل إطار 428 00:25:46,890 --> 00:25:48,750 أخذ وقتا طويلا لحساب. 429 00:25:48,750 --> 00:25:52,340 وعلاوة على ذلك، نقوم به حقا نوع من كمية لا تذكر من العمل 430 00:25:52,340 --> 00:25:54,820 هنا، لأنه لا يوجد فقط شيء واحد نحن الرسم. 431 00:25:54,820 --> 00:25:59,390 لذلك أنا مجرد الانتظار 1/60 ل الثانية، والذي هو طول 432 00:25:59,390 --> 00:26:01,520 من إطار بين الإطارات. 433 00:26:01,520 --> 00:26:05,610 لذلك أنا نوع من التظاهر به كل ما عندي من العمل يستغرق وقتا الصفر. 434 00:26:05,610 --> 00:26:09,050 ولكن في لعبة حقيقية، كنت قد طرح 435 00:26:09,050 --> 00:26:13,760 ومقدار الوقت الذي استغرق لتفعل كل هذا العمل من وقت الراحة الخاصة بك. 436 00:26:13,760 --> 00:26:16,970 >> لذلك على أي حال، ما أنا به فعلا في هذه الحلقة؟ 437 00:26:16,970 --> 00:26:19,070 I مسح النافذة. 438 00:26:19,070 --> 00:26:27,470 أنا وضعت dest.y، وهو صحيح إلى موقفي ذ الفعلي صبها في عدد صحيح. 439 00:26:27,470 --> 00:26:32,070 الآن، أريد تعويم القرار لموقف ذ بلدي في لعبي، 440 00:26:32,070 --> 00:26:34,150 ولكن بعد ذلك إلى الواقع استدراجه على الشاشة، 441 00:26:34,150 --> 00:26:39,070 فإنه يحتاج [إينتس]، لأنه في وحدات بكسل، لذلك هذا ما هو المدلى بها ل. 442 00:26:39,070 --> 00:26:41,745 انا ذاهب الى رسم الصورة. 443 00:26:41,745 --> 00:26:45,180 لذلك هذا هو مستطيل المصدر. 444 00:26:45,180 --> 00:26:47,060 وهذا هو المستطيل الوجهة. 445 00:26:47,060 --> 00:26:50,310 لذلك مررت فارغة ل المستطيل المصدر 446 00:26:50,310 --> 00:26:53,426 أن أقول أريد أن ألفت بلدي نسيج كامل. 447 00:26:53,426 --> 00:26:55,300 ولكن إذا كان لديك الكثير من القوام في اللعبة 448 00:26:55,300 --> 00:26:59,120 وانهم جميعا في خريطة واحدة الملمس كبيرة التي تم تحميلها إلى SDL واحدة فقط 449 00:26:59,120 --> 00:27:02,850 نسيج، هل يمكن استخدام مستطيل المصدر 450 00:27:02,850 --> 00:27:06,750 لاختيار واحد من القوام أصغر، واحد من العفاريت الصغيرة، 451 00:27:06,750 --> 00:27:09,450 من تلك الخريطة الملمس كبيرة. 452 00:27:09,450 --> 00:27:14,740 >> ذلك مرة أخرى، وأنا يمر بلدي تقديم، بلدي الملمس، والآن الوجهة. 453 00:27:14,740 --> 00:27:18,320 هذا سيكون مكان في نافذة انها سوف يمكن استخلاصها. 454 00:27:18,320 --> 00:27:21,390 وبعد ذلك، لأنني موحية شيء، ولست بحاجة حركة، 455 00:27:21,390 --> 00:27:25,150 انا ذاهب الى أن تحديث موقف العفريت على كل إطار. 456 00:27:25,150 --> 00:27:30,190 لذلك ليس لدي هذا يسمى التمرير المستمر سرعة في وحدات بكسل في الثانية الواحدة. 457 00:27:30,190 --> 00:27:34,320 الآن، في كل مرة نقوم به حركة، الإطار هو فقط 1/60 من الثانية. 458 00:27:34,320 --> 00:27:36,740 لذلك أنا ذاهب لتقسيم هذا بنسبة 60. 459 00:27:36,740 --> 00:27:42,350 وبعد ذلك، دعونا نرى، وأنا طرح هذا من موقف ذ. 460 00:27:42,350 --> 00:27:44,470 لماذا أنا بطرح؟ 461 00:27:44,470 --> 00:27:46,169 أننا سنصل إلى أنه في الثانية. 462 00:27:46,169 --> 00:27:48,460 حتى ذلك الحين I تنظيف مواردي والبرنامج من جديد. 463 00:27:48,460 --> 00:27:49,830 >> لذلك دعونا جعل ذلك. 464 00:27:49,830 --> 00:27:52,450 465 00:27:52,450 --> 00:28:03,570 لذلك دعونا نذهب إلى جعل الهلال الأحمر السوداني = hello4 animation.c، كل الحق؟ 466 00:28:03,570 --> 00:28:05,720 اللعبة. 467 00:28:05,720 --> 00:28:06,770 ها أنت ذا. 468 00:28:06,770 --> 00:28:12,690 لذلك لدي التمرير فوق نافذة، وهو أنيق جدا. 469 00:28:12,690 --> 00:28:17,110 ولكن مع الاستمرار على، كنت يحذف من موقع ذ في كل مرة. 470 00:28:17,110 --> 00:28:18,910 ما الذي يحدث هناك؟ 471 00:28:18,910 --> 00:28:24,010 حسنا، اتضح أنه في SDL، و في الواقع، في معظم رسومات الحاسوب، 472 00:28:24,010 --> 00:28:28,890 أصل لنظام الإحداثيات هو أعلى يسار النافذة. 473 00:28:28,890 --> 00:28:34,960 >> لذلك يذهب اتجاه x إيجابي عبر نافذتك إلى اليمين. 474 00:28:34,960 --> 00:28:38,110 والاتجاه الإيجابي ذ يذهب فعلا إلى أسفل. 475 00:28:38,110 --> 00:28:40,470 ذلك مرة أخرى، في الأصل ل الجزء العلوي الأيسر من النافذة، 476 00:28:40,470 --> 00:28:46,190 الاتجاه الإيجابي ذ باستمرار، و x الإيجابي هو الحق. 477 00:28:46,190 --> 00:28:48,770 لذلك عندما طرح من موقف ذ، وهذا 478 00:28:48,770 --> 00:28:52,640 الذهاب لجعله يذهب على السلبيات الاتجاه ذ، وهو ما يصل النافذة. 479 00:28:52,640 --> 00:28:55,500 وهذا ما يحدث هناك. 480 00:28:55,500 --> 00:28:56,510 رائع. 481 00:28:56,510 --> 00:28:59,240 >> دعونا ننظر في الملف التالي. 482 00:28:59,240 --> 00:29:05,700 هنا هو جزء من تظهر فيها ونحن في النهاية 483 00:29:05,700 --> 00:29:08,920 الحصول على هذا X في الزاوية من النافذة من المفترض أن إغلاق النافذة 484 00:29:08,920 --> 00:29:10,660 للعمل. 485 00:29:10,660 --> 00:29:12,800 فما الذي يحدث؟ 486 00:29:12,800 --> 00:29:17,520 نحن تهيئة SDL، إنشاء النافذة، إنشاء العارض، تحميل الصور، 487 00:29:17,520 --> 00:29:19,770 خلق نسيج كما رأيناه من قبل. 488 00:29:19,770 --> 00:29:26,850 لدينا نفس المستطيل الوجهة كما كان من قبل، نفس المكالمة الاستعلام الملمس. 489 00:29:26,850 --> 00:29:29,780 ولكن هذه المرة، ونحن بعد ذلك الذهاب لتقسيم العرض 490 00:29:29,780 --> 00:29:33,110 وارتفاع جهتنا بنسبة 4. 491 00:29:33,110 --> 00:29:36,430 وهذا له تأثير فقط رفع صورة لدينا باستمرار عندما 492 00:29:36,430 --> 00:29:39,884 نحن عرضه في إطار أربعة. 493 00:29:39,884 --> 00:29:40,800 ولهذا أنيق جدا. 494 00:29:40,800 --> 00:29:42,770 يمكننا فقط حجم تماما مثل ذلك. 495 00:29:42,770 --> 00:29:45,970 ونحن في طريقنا لبدء العفريت في وسط الشاشة. 496 00:29:45,970 --> 00:29:49,410 والآن لدينا x و y سرعة و انهم على حد سواء سنبدأ من الصفر. 497 00:29:49,410 --> 00:29:53,740 498 00:29:53,740 --> 00:29:55,880 >> هذا هو الملف خاطئ. 499 00:29:55,880 --> 00:29:56,380 أنا اسف. 500 00:29:56,380 --> 00:29:57,960 ولهذا كله صحيح. 501 00:29:57,960 --> 00:30:00,170 هذا كل شيء لا يزال في هذا الملف. 502 00:30:00,170 --> 00:30:03,210 لدينا القسمة على 4 وكل شيء. 503 00:30:03,210 --> 00:30:07,830 حتى هنا لدينا x و y موقف للوسط النافذة. 504 00:30:07,830 --> 00:30:12,480 واعطيناها سرعتها الأولية هذا بسرعة ثابتة، والتي 505 00:30:12,480 --> 00:30:15,180 أعتقد هو 300 بكسل في الثانية الواحدة. 506 00:30:15,180 --> 00:30:19,850 الآن، لدينا هذا الباحث أن مجرد كذلك تكون منطقية تسمى طلبت قريب. 507 00:30:19,850 --> 00:30:23,970 وبدلا من أن يفعل ل حلقة لا نهائية على جهاز توقيت هنا، 508 00:30:23,970 --> 00:30:29,180 ونحن في طريقنا إلى أن موحية كما طالما قريب لا يتم طلبها. 509 00:30:29,180 --> 00:30:30,960 >> فكيف نقوم بمعالجة الأحداث؟ 510 00:30:30,960 --> 00:30:35,600 حسنا، SDL قوائم الانتظار تصل الأحداث في طابور الحرفي وراء الكواليس. 511 00:30:35,600 --> 00:30:38,860 ثم كل إطار، يمكننا dequeue الأحداث 512 00:30:38,860 --> 00:30:43,900 من أن قائمة الانتظار باستخدام هذا SDL_PullEvent المكالمة. 513 00:30:43,900 --> 00:30:46,730 ومرة أخرى، تذهب بالتأكيد قراءة حول هذا في الوثائق. 514 00:30:46,730 --> 00:30:50,450 هناك الكثير من التفاصيل والكثير المزيد من الوظائف التي يمكن استخدامها مع هذا. 515 00:30:50,450 --> 00:30:54,750 نحن تمريرها عنوان من هذا الشيء، SDL_Event 516 00:30:54,750 --> 00:30:56,990 أن لدينا هنا في بنية تخزين العناصر. 517 00:30:56,990 --> 00:30:58,840 >> الآن، ما هو SDL_event؟ 518 00:30:58,840 --> 00:31:02,356 لأن SDL، إذا نظرنا في وdocumentation-- دعونا 519 00:31:02,356 --> 00:31:07,580 ترى، API حسب الفئة، ومدخلات الأحداث، والتعامل مع الحدث، 520 00:31:07,580 --> 00:31:15,150 يمكننا أن ننظر في عدد أحداث مختلفة هنا 521 00:31:15,150 --> 00:31:18,600 ويمكننا أن نرى هناك طن كله منهم. 522 00:31:18,600 --> 00:31:22,150 فما هو هذا الشيء SDL_Event؟ 523 00:31:22,150 --> 00:31:28,190 524 00:31:28,190 --> 00:31:31,107 SDL_Event هو اتحاد. 525 00:31:31,107 --> 00:31:31,940 نجاح باهر، ما هو الاتحاد؟ 526 00:31:31,940 --> 00:31:33,910 ربما كنت قد أبدا سمعت ذلك من قبل. 527 00:31:33,910 --> 00:31:35,610 وهذا موافق. 528 00:31:35,610 --> 00:31:39,420 >> والاتحاد هو نوع من مثل البنية، ما عدا البنية 529 00:31:39,420 --> 00:31:41,960 لديه مساحة للجميع حقولها والذاكرة، 530 00:31:41,960 --> 00:31:45,060 في حين أن النقابة لديها فقط مساحة كافية لتناسب أكبر 531 00:31:45,060 --> 00:31:49,660 واحدة من حقولها، مما يعني أنه يمكن تخزين واحد من حقولها فقط 532 00:31:49,660 --> 00:31:52,830 في وقت واحد، أي نوع من المنطقي للأحداث، أليس كذلك؟ 533 00:31:52,830 --> 00:31:55,810 نحن يمكن أن يكون لها لوحة المفاتيح الحدث أو الحدث النافذة، 534 00:31:55,810 --> 00:31:59,750 ولكن حدث واحد لا يمكن أن يكون على حد سواء الحدث لوحة المفاتيح والحدث النافذة، 535 00:31:59,750 --> 00:32:05,450 لذلك سيكون من السخف أن يكون لديك مساحة لل كل من هؤلاء داخل الاتحاد هذا الحدث. 536 00:32:05,450 --> 00:32:07,770 حتى إذا كنت تريد إنشاء النقابة الخاصة بك، 537 00:32:07,770 --> 00:32:10,020 يبدو بالضبط نفس الشيء كما خلق البنية، 538 00:32:10,020 --> 00:32:14,140 إلا أن نستخدم الكلمة الاتحاد بدلا من الكلمة البنية. 539 00:32:14,140 --> 00:32:17,490 وتذكر، لجميع أشياء داخل النقابة الخاصة بك، 540 00:32:17,490 --> 00:32:22,020 المتغير الفعلي الذي هو اتحاد يمكن أن يكون واحدا من تلك القيم فقط 541 00:32:22,020 --> 00:32:24,780 في وقت واحد. 542 00:32:24,780 --> 00:32:29,940 >> فكيف يمكننا معرفة نوع الحدث أننا برزت مجرد الخروج من هذا الطابور؟ 543 00:32:29,940 --> 00:32:33,370 حسنا، يمكننا اختبار لevent.type. 544 00:32:33,370 --> 00:32:35,792 وإذا كان هذا هو المساواة لSDL_Quit، ونحن نعلم 545 00:32:35,792 --> 00:32:37,500 انها حالة ما تم إنشاؤها عندما كنا 546 00:32:37,500 --> 00:32:39,510 ضرب أن X في الزاوية من النافذة. 547 00:32:39,510 --> 00:32:44,270 ويمكننا أن مجموعة قريبة طلب يساوي 1. 548 00:32:44,270 --> 00:32:47,230 والباقي هو مجرد بعض الرسوم المتحركة ان كنت قد رأيت من قبل. 549 00:32:47,230 --> 00:32:52,802 لذلك دعونا نمضي قدما وجعل هذا ونرى كيف أنها تعمل بشكل جيد. 550 00:32:52,802 --> 00:32:55,135 لذلك أنا ذاهب لكتابة جعل و ثم جمعية الهلال الأحمر السوداني = hello5_events.c. 551 00:32:55,135 --> 00:33:03,760 552 00:33:03,760 --> 00:33:04,770 هناك نذهب. 553 00:33:04,770 --> 00:33:05,780 ألعاب. 554 00:33:05,780 --> 00:33:08,920 >> الآن، يمكننا أن نرى ذلك كان تحجيم الواقع بنسبة أربعة. 555 00:33:08,920 --> 00:33:10,360 والآن حان كذاب حولها. 556 00:33:10,360 --> 00:33:14,630 لدي بعض كشف التصادم يحدث مع الجانبين من النافذة 557 00:33:14,630 --> 00:33:16,840 يمكننا أن نلقي نظرة على. 558 00:33:16,840 --> 00:33:21,190 وماذا يحدث عندما أذهب لإغلاقه؟ 559 00:33:21,190 --> 00:33:22,120 أن يتم إغلاقه. 560 00:33:22,120 --> 00:33:22,740 رائع. 561 00:33:22,740 --> 00:33:24,290 تلقينا هذا الحدث. 562 00:33:24,290 --> 00:33:26,630 ونحن التعامل معها. 563 00:33:26,630 --> 00:33:30,730 >> لذلك دعونا ننظر إلى الوراء في التعليمات البرمجية. 564 00:33:30,730 --> 00:33:33,020 فكيف لم أحصل عليه كذاب حول مثل ذلك؟ 565 00:33:33,020 --> 00:33:37,200 أذكر أنني تعيين كل من x و ذ البداية إلى سرعات. 566 00:33:37,200 --> 00:33:39,260 والسرعة هي إيجابية ثابت، حتى أن 567 00:33:39,260 --> 00:33:42,680 الذهاب للحصول على انها البدء الذهاب إلى الأسفل وإلى اليمين. 568 00:33:42,680 --> 00:33:45,680 569 00:33:45,680 --> 00:33:50,310 >> الآن، كل إطار، بالإضافة إلى معالجة أي أحداث قد تكون وقعت، 570 00:33:50,310 --> 00:33:57,520 أنا ذاهب لاكتشاف ما إذا كان بلدي العفريت يحاول الخروج من النافذة. 571 00:33:57,520 --> 00:34:03,610 حتى نتمكن من القيام بذلك عن طريق فحص فقط x_pos مع 0، y_pos 0، ثم 572 00:34:03,610 --> 00:34:07,370 كما x_pos وy_pos مع نافذة العرض والارتفاع النافذة. 573 00:34:07,370 --> 00:34:11,010 لاحظ لقد طرح عرض العفريت. 574 00:34:11,010 --> 00:34:14,090 وهذا هو لأنه إذا لم أكن طرح عرض العفريت، 575 00:34:14,090 --> 00:34:17,760 انها ستراجع فقط أن أصل العفريت 576 00:34:17,760 --> 00:34:19,690 لم يذهب خارج النافذة. 577 00:34:19,690 --> 00:34:21,480 لكننا نريد كامل عرض العفريت 578 00:34:21,480 --> 00:34:24,030 أن تكون دائما داخل النافذة و ذروة كامل من العفريت 579 00:34:24,030 --> 00:34:25,321 أن تكون دائما داخل الإطار. 580 00:34:25,321 --> 00:34:27,429 وهذا ما هو الطرح ل. 581 00:34:27,429 --> 00:34:30,080 وهناك الكثير من الهندسة هنا يمكن تكون مفيدة لاستدراجه خارج 582 00:34:30,080 --> 00:34:33,929 على الورق مع تنسيق نظام لمعرفة ما يجري. 583 00:34:33,929 --> 00:34:38,090 >> حتى لو كنت لا تتصادم، أنا فقط ببساطة إعادة الموقف 584 00:34:38,090 --> 00:34:41,400 بحيث أنه لن للخروج من الشاشة. 585 00:34:41,400 --> 00:34:47,179 وانا ذاهب الى، إذا كان مستبعد على أحد الجوانب، 586 00:34:47,179 --> 00:34:51,469 انا ذاهب الى ينفي س السرعة بحيث 587 00:34:51,469 --> 00:34:53,210 يبدأ كذاب في الاتجاه الآخر. 588 00:34:53,210 --> 00:34:56,210 وبالمثل، إذا كان يضرب أعلى أو أسفل، 589 00:34:56,210 --> 00:34:59,820 انا ذاهب لضبط سرعة ذ مساوية لسرعة ص السلبية، 590 00:34:59,820 --> 00:35:01,690 بحيث ترتد مرة أخرى. 591 00:35:01,690 --> 00:35:03,860 ولهذا كيف وصلنا إلى ذلك هنا. 592 00:35:03,860 --> 00:35:07,560 >> والمواقف تحديث تماما مثل رأيناه من قبل، 593 00:35:07,560 --> 00:35:12,510 القسمة على 60، لأننا التعامل مع فقط 1/60 من الثانية. 594 00:35:12,510 --> 00:35:15,750 ومن ثم جعلها، بالضبط نفس كما كان من قبل. 595 00:35:15,750 --> 00:35:19,810 وهكذا وهذا كل شيء التي كانت جارية في هذا الملف. 596 00:35:19,810 --> 00:35:22,490 لذلك هذه هي الطريقة التي نفعل الأحداث. 597 00:35:22,490 --> 00:35:29,260 الشيء الرئيسي ليأخذ هنا هي هذه الوظيفة SDL_PullEvent. 598 00:35:29,260 --> 00:35:33,020 ويجب عليك بالتأكيد قراءة المزيد من الوثائق حول SDL_Event 599 00:35:33,020 --> 00:35:38,630 الاتحاد، لأن هذا النوع البيانات مهم جدا جدا، لأننا استخدامه 600 00:35:38,630 --> 00:35:40,690 لجميع أنواع الأحداث. 601 00:35:40,690 --> 00:35:46,539 >> على سبيل المثال، نستخدمها لوحة المفاتيح الأحداث، وهو ما هو هذا الملف لل. 602 00:35:46,539 --> 00:35:47,330 فماذا لدينا؟ 603 00:35:47,330 --> 00:35:50,180 لدينا نفس الشيء كما كان من قبل، تهيئة SDL، إنشاء النافذة، 604 00:35:50,180 --> 00:35:55,260 إنشاء العارض، تحميل صورة في الذاكرة، وخلق نسيج. 605 00:35:55,260 --> 00:36:00,530 مرة أخرى، نحن في طريقنا لل يكون هذا دست المستطيل، 606 00:36:00,530 --> 00:36:04,890 ونحن في طريقنا لقياس الصورة أربع، وجعله أصغر قليلا. 607 00:36:04,890 --> 00:36:08,000 الآن، ونحن نذهب لبدء شبح في وسط الشاشة. 608 00:36:08,000 --> 00:36:12,090 لكن هذه المرة، ونحن في طريقنا لتعيين س الأولية والسرعات ص إلى الصفر، 609 00:36:12,090 --> 00:36:15,140 لأن لوحة المفاتيح الذهاب إلى السيطرة على تلك. 610 00:36:15,140 --> 00:36:18,900 وعلاوة على ذلك، نحن في طريقنا لل تتبع هذه المتغيرات 611 00:36:18,900 --> 00:36:20,450 أعلى والأسفل واليسار واليمين. 612 00:36:20,450 --> 00:36:23,090 وهذا ما يحدث للحفاظ على المسار النظر عما إذا قمنا 613 00:36:23,090 --> 00:36:27,370 الضغط على أزرار لوحة المفاتيح التي تتوافق مع أعلى، أسفل، يسار، 614 00:36:27,370 --> 00:36:28,460 والحق. 615 00:36:28,460 --> 00:36:32,440 >> الآن، وهذا هو نوع من الهوى لأننا لا نستطيع استخدام W، A، S، 616 00:36:32,440 --> 00:36:35,480 D هنا، أو مفاتيح الأسهم الفعلية. 617 00:36:35,480 --> 00:36:38,590 سنرى أنه في ثانية واحدة. 618 00:36:38,590 --> 00:36:41,140 لذلك نحن ذاهبون الى معالجة الحدث تماما مثل قبل. 619 00:36:41,140 --> 00:36:42,530 نحن سحب هذا الحدث. 620 00:36:42,530 --> 00:36:45,840 ولكن الآن نحن في طريقنا لل التبديل على نوع الحدث. 621 00:36:45,840 --> 00:36:47,710 إذا كان SDL_Quit، ونحن الذهاب الى مجموعة قريبة 622 00:36:47,710 --> 00:36:49,990 طلب واحد، تماما مثل قبل. 623 00:36:49,990 --> 00:36:52,315 الذي يعالج س في زاوية النافذة، 624 00:36:52,315 --> 00:36:55,050 بحيث نافذتنا يغلق الواقع. 625 00:36:55,050 --> 00:37:00,110 >> خلاف ذلك، اذا حصلنا على مفتاح SDL أسفل الحدث، وهو ما يعني أننا الضغط على مفتاح، 626 00:37:00,110 --> 00:37:04,470 ثم ما نحن بصدد القيام به هو نحن الذهاب للتبديل على هذا الشيء هنا، 627 00:37:04,470 --> 00:37:11,370 التي means-- ذلك event.key يعني علاج الاتحاد هذا الحدث، 628 00:37:11,370 --> 00:37:15,490 اذهب والحصول على المفتاح هيكل حدث في ذلك. 629 00:37:15,490 --> 00:37:18,810 هكذا اتضح أن هذا الاتحاد هو بنية الحدث الرئيسي. 630 00:37:18,810 --> 00:37:22,820 ثم انتقل إلى المفتاح بنية الحدث مجالها 631 00:37:22,820 --> 00:37:26,140 دعا keysym ثم scancode. 632 00:37:26,140 --> 00:37:29,480 ومرة أخرى، وقراءة بالتأكيد وثائق حول هذا الموضوع. 633 00:37:29,480 --> 00:37:31,220 المدخلات كلمات رئيسية جدا للاهتمام. 634 00:37:31,220 --> 00:37:34,020 يمكنك الحصول على رموز مسح ضوئي أو رموز رئيسية. 635 00:37:34,020 --> 00:37:38,590 وانها خفية قليلا، ولكن وثائق جيدة جدا. 636 00:37:38,590 --> 00:37:43,380 >> إذا كان الأمر كذلك نرى رمز المسح الضوئي لل لدينا اضغط على مفتاح يجري W أو حتى، 637 00:37:43,380 --> 00:37:45,450 ونحن في طريقنا لاقامة يساوي 1. 638 00:37:45,450 --> 00:37:47,240 وبعد ذلك الخروج من هذا التحول. 639 00:37:47,240 --> 00:37:52,980 إذا كان A أو اليسار، وضعنا اليسار إلى 1، وآخرون إلى ذلك، وهلم جرا، لأسفل واليمين. 640 00:37:52,980 --> 00:37:57,080 الآن، في هذا التحول الخارجي، إذا كان لنا أن نرى مفتاح حتى الحدث، 641 00:37:57,080 --> 00:38:00,730 هذا يعني أننا قد أصدرت المفتاح ونحن لم يعد الضغط عليه. 642 00:38:00,730 --> 00:38:05,380 لذلك أنا ذاهب الى ان ما يصل يساوي 0، اليسار يساوي 0، بانخفاض يساوي 0، الحق 643 00:38:05,380 --> 00:38:08,260 يساوي 0، وهلم جرا. 644 00:38:08,260 --> 00:38:12,070 >> وتلاحظ لدينا في كل من هذه وضع حالتين بجوار بعضها البعض 645 00:38:12,070 --> 00:38:14,490 مع عدم وجود رمز منفصل في الحالة الأولى، والتي 646 00:38:14,490 --> 00:38:18,180 يعني أنه سواء كان ذلك وS أو أسفل هنا، 647 00:38:18,180 --> 00:38:20,520 انه سيكون لتنفيذ هذه التعليمات البرمجية. 648 00:38:20,520 --> 00:38:22,090 ولهذا مفيد جدا. 649 00:38:22,090 --> 00:38:24,830 أنه يمنعنا الحاجة إلى بذل المزيد من الجهد الشروط والمحاذير والأشياء 650 00:38:24,830 --> 00:38:26,980 من هذا القبيل. 651 00:38:26,980 --> 00:38:29,420 >> لذلك نحن في طريقنا لل تحديد السرعة. 652 00:38:29,420 --> 00:38:31,020 وضعنا السرعة إلى 0. 653 00:38:31,020 --> 00:38:33,910 ثم إذا كان الضغط أعلى وليس لأسفل، ثم نحن 654 00:38:33,910 --> 00:38:37,450 ضبط سرعة Y لسرعة السلبية. 655 00:38:37,450 --> 00:38:42,930 تذكر سلبية، لأن الاتجاه ذ السلبي هو ما يصل. 656 00:38:42,930 --> 00:38:45,540 والاتجاه ذ الإيجابي هو أسفل. 657 00:38:45,540 --> 00:38:47,510 إذا تم الضغط على أسفل ولم يصل، ثم نحن 658 00:38:47,510 --> 00:38:53,860 الذهاب إلى تعيينها إلى سرعة إيجابية، وهو ما يعني الذهاب إلى أسفل الشاشة. 659 00:38:53,860 --> 00:38:55,460 نفس الشيء مع اليسار واليمين. 660 00:38:55,460 --> 00:38:58,200 >> ثم نحن في طريقنا للتحديث مواقف مثل قبل. 661 00:38:58,200 --> 00:39:00,740 ونحن في طريقنا للقيام تصادم كشف مع حدود، 662 00:39:00,740 --> 00:39:04,290 ولكننا لن إعادة تعيين السرعة، لأن السرعة هي فقط 663 00:39:04,290 --> 00:39:06,780 التحكم بواسطة لوحة المفاتيح. 664 00:39:06,780 --> 00:39:11,230 ولكن نحن نذهب لإعادة وظائف لابقائه في النافذة. 665 00:39:11,230 --> 00:39:14,400 ونحن في طريقنا للتعيين وظائف في البنية 666 00:39:14,400 --> 00:39:17,400 ثم تفعل كل جعل الاشياء من قبل. 667 00:39:17,400 --> 00:39:20,750 لذلك دعونا نرى ما تفعله. 668 00:39:20,750 --> 00:39:25,460 لذا تأكد SRCS-- دعونا نرى، هذا هو hello6_keyboard.c. 669 00:39:25,460 --> 00:39:38,140 670 00:39:38,140 --> 00:39:38,820 >> اوه لا. 671 00:39:38,820 --> 00:39:40,150 حتى وصلنا بعض التحذيرات هنا. 672 00:39:40,150 --> 00:39:43,840 وهذا ما نقول ببساطة لم نكن تحقق من كل نوع ممكن واحد 673 00:39:43,840 --> 00:39:45,610 من الحدث. 674 00:39:45,610 --> 00:39:49,470 وهذا موافق، ل هناك 236 منهم أو نحو ذلك. 675 00:39:49,470 --> 00:39:51,760 لذلك أنا ذاهب إلى تجاهل تلك التحذيرات. 676 00:39:51,760 --> 00:39:53,530 لا يزال تجميعها بشكل جيد. 677 00:39:53,530 --> 00:39:56,100 لذلك أنا ذاهب للعب اللعبة. 678 00:39:56,100 --> 00:39:57,590 انها لا تتحرك. 679 00:39:57,590 --> 00:40:04,150 ولكن الآن، عندما كنت الهريس على بلدي لوحة المفاتيح، يمكنني القيام ببعض الحركة WASD هنا، 680 00:40:04,150 --> 00:40:06,870 يمكنني استخدام مفاتيح الأسهم كذلك. 681 00:40:06,870 --> 00:40:10,070 ولاحظ، على الرغم من أنا الضغط الآن الحق، 682 00:40:10,070 --> 00:40:13,804 انها ليست الخروج من النافذة، لأنني إعادة تعيينها في كل إطار. 683 00:40:13,804 --> 00:40:14,720 ولهذا أنيق جدا. 684 00:40:14,720 --> 00:40:19,420 يمكنك أن تتخيل يتحرك مع ماريو بعض مفاتيح الأسهم أو شيء من هذا القبيل. 685 00:40:19,420 --> 00:40:22,880 ونعم X لا تعمل. 686 00:40:22,880 --> 00:40:26,900 >> الملف النهائي لذلك نحن ذاهبون لننظر، hellow7_mouse. 687 00:40:26,900 --> 00:40:29,600 هذا هو حول الحصول على مدخلات الماوس. 688 00:40:29,600 --> 00:40:34,790 حتى في هذه واحدة، ونحن استيراد رأس الرياضيات، 689 00:40:34,790 --> 00:40:38,100 لأننا ذاهبون الى قليلا من الرياضيات هنا. 690 00:40:38,100 --> 00:40:45,260 نفس القديمة، نفس القديمة الاشياء، والمقصد، نفس العمر، رأيت أن من قبل. 691 00:40:45,260 --> 00:40:46,910 حسنا، هذا مثير للاهتمام. 692 00:40:46,910 --> 00:40:51,730 حتى نعود إلى فحص فقط لSDL الحدث الإقلاع عن التدخين. 693 00:40:51,730 --> 00:40:52,460 لماذا هذا؟ 694 00:40:52,460 --> 00:40:55,110 حتى تتمكن من الحصول على مدخلات الماوس من الأحداث. 695 00:40:55,110 --> 00:40:57,670 مثل عندما تحرك الماوس، يمكنك الحصول على الحدث لذلك. 696 00:40:57,670 --> 00:41:00,520 عند الضغط على زر الماوس، يمكنك الحصول على الحدث لذلك. 697 00:41:00,520 --> 00:41:05,760 >> ولكن هناك أخرى، أبسط قليلا ربما، API للحصول على مدخلات الماوس. 698 00:41:05,760 --> 00:41:09,500 وهذا ببساطة SDL الدولة الحصول على الماوس. 699 00:41:09,500 --> 00:41:14,370 لذلك لدي الباحث لx و ذ لموضع المؤشر. 700 00:41:14,370 --> 00:41:18,910 I تمريرها إلى SDL_GetMouseState، الذي يحدد هذه. 701 00:41:18,910 --> 00:41:22,200 وهذا هو الموقف في تنسيق نظام النافذة. 702 00:41:22,200 --> 00:41:25,520 إذا كان الأمر كذلك كتلة هي في أعلى اليسار من النافذة، التي من شأنها 0، 0. 703 00:41:25,520 --> 00:41:28,040 704 00:41:28,040 --> 00:41:33,380 >> الآن، ما أنا بصدد القيام به هو أنا ذاهب لتفعل قليلا من ناقل الرياضيات. 705 00:41:33,380 --> 00:41:36,910 أراهن أنك اعتقدت أنك لن يحدث نرى أن في CS50، ولكن هنا هو عليه. 706 00:41:36,910 --> 00:41:40,720 انا ذاهب الى القيام ببعض ناقلات الرياضيات للحصول على ناقلات 707 00:41:40,720 --> 00:41:43,840 من الصورة إلى المؤشر. 708 00:41:43,840 --> 00:41:53,280 وهكذا لماذا لدي هذا الطرح هنا؟ 709 00:41:53,280 --> 00:42:01,350 حسنا، إذا كنت تستخدم فقط دست .-- ذلك أنا بحاجة إلى ترجمة الماوس العاشر 710 00:42:01,350 --> 00:42:05,166 و y إلى النصف وعرض ارتفاع الصورة، 711 00:42:05,166 --> 00:42:08,040 لأنني أريد وسط الصورة التي سيتم تسير نحو الماوس، 712 00:42:08,040 --> 00:42:10,160 لا أصل الصورة. 713 00:42:10,160 --> 00:42:15,650 >> ولهذا فقط للتأكد من أنني أتحدث عن مركز الصورة هنا. 714 00:42:15,650 --> 00:42:19,510 ثم نحصل على دلتا x و y، التي هو الفرق عن الهدف 715 00:42:19,510 --> 00:42:23,430 إلى الموقف الفعلي للصورة. 716 00:42:23,430 --> 00:42:25,690 ومن ثم نتمكن من الحصول على تنأى هنا، والتي 717 00:42:25,690 --> 00:42:29,140 سيكون فيثاغورس نظرية، الجذر التربيعي ل x 718 00:42:29,140 --> 00:42:32,720 مرات X زائد مرات ذ ذ. 719 00:42:32,720 --> 00:42:38,400 >> الآن لمنع غضب، وأنا يمكن أن تظهر لك ما يفعل ذلك إذا كنت لا تفعل هذا، 720 00:42:38,400 --> 00:42:45,830 إذا كانت المسافة بين المؤشر و مركز الصورة أقل من خمسة، 721 00:42:45,830 --> 00:42:48,730 أنا فقط لن تتحرك الصورة. 722 00:42:48,730 --> 00:42:52,900 خلاف ذلك، وضعنا السرعة. 723 00:42:52,900 --> 00:42:55,960 ونحن تعيينها بحيث سوف يكون دائما سرعة ثابتة. 724 00:42:55,960 --> 00:42:58,770 والنتيجة الصافية لجميع هذا الرياضيات هي أن صورة 725 00:42:58,770 --> 00:43:01,660 هو الذهاب الى التحرك نحو المؤشر. 726 00:43:01,660 --> 00:43:08,470 >> الآن، اتضح أن SDL_GetMouseState، 727 00:43:08,470 --> 00:43:14,490 بالإضافة إلى وضع س و ص الحجج هنا، 728 00:43:14,490 --> 00:43:21,340 تقوم بإرجاع عدد صحيح أيضا أن يتوافق لحالة أزرار الماوس. 729 00:43:21,340 --> 00:43:24,600 لذلك نحن لا يمكن أن يقرأ مباشرة، ولكن في وسعنا 730 00:43:24,600 --> 00:43:29,090 استخدام وحدات الماكرو هذه، واحد مشغل أحادي المعامل، وليس مخيفا، 731 00:43:29,090 --> 00:43:30,650 مجرد أحادي المعامل و. 732 00:43:30,650 --> 00:43:38,320 لذلك نحن نقول أزرار، وهو نتيجة من SDL_GetMouseState لدينا، إذا كان ذلك 733 00:43:38,320 --> 00:43:43,990 وأحادي المعامل، وهذا الماكرو هنا، SDL_BUTTON_LEFT. 734 00:43:43,990 --> 00:43:47,680 >> لذلك هذا هو الذهاب الى حل ببساطة إلى الصورة النقطية الذي يتوافق 735 00:43:47,680 --> 00:43:51,090 لزر الماوس الأيسر للضغط. 736 00:43:51,090 --> 00:43:55,470 وحتى إذا كان أحادي المعامل ويحدث وانها 737 00:43:55,470 --> 00:43:59,340 غير الصفر، مما يعني تم الضغط على الزر الأيسر، 738 00:43:59,340 --> 00:44:04,320 ثم نحن ذاهبون فعلا لنفي كل من X و Y سرعات، 739 00:44:04,320 --> 00:44:06,700 الأمر الذي سيجعل مجرد صورة هارب. 740 00:44:06,700 --> 00:44:07,980 مواقف التحديث. 741 00:44:07,980 --> 00:44:10,920 اصطدام المكتشفة، ينظر إليه كل هذا من قبل، وجعلها، كل الحق. 742 00:44:10,920 --> 00:44:11,510 دعونا جعله. 743 00:44:11,510 --> 00:44:14,200 744 00:44:14,200 --> 00:44:16,050 لذلك كنت حصلت على جعل جمعية الهلال الأحمر السوداني = hello7_mouse.c. 745 00:44:16,050 --> 00:44:21,720 746 00:44:21,720 --> 00:44:22,220 رائعة. 747 00:44:22,220 --> 00:44:23,490 أية أخطاء. 748 00:44:23,490 --> 00:44:24,900 واللعبة. 749 00:44:24,900 --> 00:44:26,440 >> حتى هنا عندي الماوس. 750 00:44:26,440 --> 00:44:29,000 والصورة هي في الواقع مطاردة بلدي الماوس. 751 00:44:29,000 --> 00:44:33,140 الآن، في لعبة تقوم بها، ربما هذا هو مثل مطاردة العدو 752 00:44:33,140 --> 00:44:35,240 يذكر حرف أو كل ما لديك. 753 00:44:35,240 --> 00:44:37,440 ولكن هنا لدينا صورة مطاردة الفأر. 754 00:44:37,440 --> 00:44:41,000 وعند النقر، والفأر يبدأ مطاردة الصورة 755 00:44:41,000 --> 00:44:42,860 وكانت الصورة الهروب من الماوس. 756 00:44:42,860 --> 00:44:43,810 ولهذا رائع. 757 00:44:43,810 --> 00:44:47,770 وإشعار مرة أخرى، هناك لا يزال الكشف عن التصادم هنا. 758 00:44:47,770 --> 00:44:53,930 >> لذلك هذا هو الشيء النهائي عرض أكون قد وضعت هنا. 759 00:44:53,930 --> 00:44:58,870 ودعونا نلقي نظرة على أكثر شيء واحد. 760 00:44:58,870 --> 00:45:02,970 ويعود ذلك هنا، وأنا ذكرت هذا غضب. 761 00:45:02,970 --> 00:45:05,000 حسنا. 762 00:45:05,000 --> 00:45:12,890 إذا كان الأمر كذلك المسافة أقل من خمس بكسل، لقد وضع x و y السرعة إلى الصفر. 763 00:45:12,890 --> 00:45:15,960 ماذا يحدث إذا تخلصنا من ذلك؟ 764 00:45:15,960 --> 00:45:19,070 لذلك أنا ذاهب لفعل هذا. 765 00:45:19,070 --> 00:45:23,820 766 00:45:23,820 --> 00:45:30,150 يرجى عذر هذا النمط الرهيب، ولكن نحن علق بها الرمز الصحيح. 767 00:45:30,150 --> 00:45:38,080 لذلك أنا ذاهب لإنقاذ ذلك وتفعل نفس الأمر من قبل لجعله. 768 00:45:38,080 --> 00:45:38,785 >> حسنا. 769 00:45:38,785 --> 00:45:39,660 والآن ماذا يحدث؟ 770 00:45:39,660 --> 00:45:43,260 771 00:45:43,260 --> 00:45:43,760 جيد. 772 00:45:43,760 --> 00:45:45,801 نحن لا نزال بعد الماوس فقط مثل قبل، 773 00:45:45,801 --> 00:45:49,310 ولكن عندما نصل الى الماوس، لقد حصلت على هذا غضب الإجمالي. 774 00:45:49,310 --> 00:45:50,320 ما الذي يحدث هناك؟ 775 00:45:50,320 --> 00:45:52,600 حسنا، في ناقلات دينا الرياضيات، وتذكر أننا كنا 776 00:45:52,600 --> 00:45:57,540 أخذ المسافة بين المؤشر ووسط الصورة؟ 777 00:45:57,540 --> 00:46:00,710 حسنا، كما أن النهج 0 فسيمكننا 778 00:46:00,710 --> 00:46:06,280 مثل هذا النوع من السلوك مجنون حيث الصورة هو نوع من 779 00:46:06,280 --> 00:46:08,910 مثل تتأرجح حول المؤشر. 780 00:46:08,910 --> 00:46:12,000 وهذا ما خلق هذا غضب. 781 00:46:12,000 --> 00:46:13,020 وهذا قبيح. 782 00:46:13,020 --> 00:46:15,103 وربما كنت لا نريد الألعاب يفعل ذلك، 783 00:46:15,103 --> 00:46:17,350 إلا إذا كان نوعا من تأثير خاص. 784 00:46:17,350 --> 00:46:21,960 >> ولهذا السبب لدينا فقط هذا تعسفيا 785 00:46:21,960 --> 00:46:27,150 قطع من خمسة بكسل، حيث نقول اذا كان في غضون خمس بكسل، نحن في حالة جيدة. 786 00:46:27,150 --> 00:46:29,560 نحن لسنا بحاجة لتحريك الصورة بعد الآن. 787 00:46:29,560 --> 00:46:32,260 وهذا ما يحدث هناك. 788 00:46:32,260 --> 00:46:37,390 789 00:46:37,390 --> 00:46:40,870 >> ولهذا الى حد كبير. 790 00:46:40,870 --> 00:46:44,390 أنت تعرف الآن كيفية إنشاء نافذة، تحميل صورة، 791 00:46:44,390 --> 00:46:49,330 رسم صورة للنافذة، والحصول على مدخلات لوحة المفاتيح، والحصول على مدخلات الماوس، 792 00:46:49,330 --> 00:46:52,190 هناك حفنة من الآخر الإدخال التي لن يحدث 793 00:46:52,190 --> 00:46:56,070 تعرف كيف تحصل على إذا كنت مجرد قضاء دقائق قليلة تبحث في الوثائق. 794 00:46:56,070 --> 00:46:59,670 ولذلك عليك أن الواقع تماما عدد قليل من الأدوات تحت تصرفكم الآن 795 00:46:59,670 --> 00:47:01,650 لإرسال لعبة كاملة. 796 00:47:01,650 --> 00:47:05,030 >> الآن، كل لعبة تحتاج بعض الصوت، لكن الوثائق السمعية 797 00:47:05,030 --> 00:47:06,460 هي أيضا جيدة جدا. 798 00:47:06,460 --> 00:47:09,200 وأنا على استعداد للمراهنة على أنه إذا كنت أفهم كل الأشياء 799 00:47:09,200 --> 00:47:14,560 تحدثنا عنه اليوم مع الصور، والسطوح، 800 00:47:14,560 --> 00:47:18,370 النوافذ، وكل شيء، ثم في معرفة API الصوت ليس 801 00:47:18,370 --> 00:47:21,170 سيكون سيئا. 802 00:47:21,170 --> 00:47:27,420 ولذا فإنني أتطلع إلى رؤية ما خلق لكم مع SDL. 803 00:47:27,420 --> 00:47:31,595