Tip:
Highlight text to annotate it
X
>> DAVID مالان: دعونا كتابة برنامج تنطوي على النافذة ودائرة مع
دائرة كذاب ذهابا وإيابا من اليسار واليمين
حواف تلك النافذة.
للقيام بذلك، دعونا استخدام ستانفورد المكتبة المحمولة، ودعونا أولا
وتشمل gevents.h ذلك ما في وسعنا الاستماع لحركات الماوس.
ثم دعونا تشمل gobjects.h بحيث يمكن أن نعلن أشياء مثل الأشكال البيضاوية أو
الدوائر، حقا.
ثم دعونا تشمل gwindow.h بحيث لدينا نافذة رسومية ل
كل شيء.
>> دعونا نعلن الرئيسي بالطريقة المعتادة.
ودعونا الآن تعلن ومثيل أو إنشاء تلك النافذة، GWindow -
وسنقوم استدعاء نافذة متغير -
يحصل newGWindow.
واننا سنحقق ذلك بصورة تعسفية 320 بكسل في 240 بكسل.
>> دعونا مثيل المقبل دائرة.
ولكن لمثيل هذه الدائرة، نحن بحاجة إلى بذل المزيد من العمل قليلا.
على وجه الخصوص، دعونا ملء هذه الدائرة حتى أن الأمر برمته هو
الأسود وليس فقط الخطوط العريضة منه.
GOval -
سنقوم نسميها دائرة -
يحصل newGOval.
سنضع هذه البيضاوي في 0، 110، وسنقوم جعل البيضاوي 20 بكسل واسعة من قبل
20 بكسل عالية - بعبارة أخرى، قطر 20 أو دائرة نصف قطرها 10.
>> دعونا الآن تعيين لون من هذه الدائرة أن يكون الاقتباس، نهاية الاقتباس، "السوداء". دعونا
الآن تعيين أن ملأها عن طريق تحديد صحيح.
والآن أخيرا، دعونا نضيف الدائرة ل نافذة على النحو التالي، حيث و
وأضاف هذا الأخير إلى السابق.
>> دعونا الآن يعلن مزدوجة.
سنقوم نسميها السرعة.
وبشكل تعسفي إلى حد ما، دعنا نقول ل وسرعة هذه الدائرة يكون
2.0، وبعبارة أخرى، 2 بكسل لكل وحدة من الزمن.
والآن دعونا عمدا حمل حلقة لا نهائية.
>> فكيف لجعل هذه الدائرة ترتد ذهابا وإيابا؟
حسنا دعونا نفترض داخل هذه الحلقة التي لكل وحدة من الوقت، ونحن
الذهاب لتحريك الدائرة قليلا بت يعتمد على سرعته من 2 بكسل
لكل وحدة من الزمن.
ولكن باستمرار، ونحن في طريقنا لدينا ل معرفة ما اذا كان دائرة لمس
الحافة اليمنى من الشاشة أو اليسار حافة الشاشة، لأنه إذا كان الأمر كذلك، فإننا
في حاجة إليها لترتد، إذا جاز التعبير.
>> كيفية تنفيذ فكرة كذاب؟
كذلك إذا نحن ذاهبون في 2 بكسل لل الحق لكل وحدة من الوقت، لترتد
الحافة اليمنى، ونحن يمكن عكس ببساطة أن تكون سلبية إلى 2 بكسل لكل وحدة
من الزمن، مما يلغي سرعة.
ذلك في الواقع، هو كذاب نسبيا مباشرة.
>> دعونا أولا تحريك الدائرة من خلال هذا العدد الكبير من بكسل على طول محور س، من خلال هذا
العديد من بكسل على طول المحور الصادي.
وبعبارة أخرى، نحن لا نريد ل تتحرك على طول المحور الصادي على الإطلاق.
نحن نريد فقط أن ترتد وغادر اليها والحق.
>> ودعونا الآن تحقق في هذه الحلقة إذا الإحداثي س من الدائرة زائد
العرض من دائرة أكبر من أو يساوي
عرض النافذة -
وبعبارة أخرى، إذا كان الموقع الدائرة ل بالإضافة إلى عرض من دائرة
نفسها الآن على حافة الماضي من النافذة، كنا
عكس أفضل سرعة لدينا -
سرعة يحصل سرعة السلبية، وبالتالي التقليب إيجابية ل
سلبية أو سلبية إلى إيجابية.
ولكن ماذا لو كان يتحرك من دائرة من اليمين إلى اليسار، وبالتالي فإنه يضرب
الحافة اليسرى؟
وبعبارة أخرى، إذا كان الإحداثي س من الدائرة هو الآن أقل من أو يساوي
0، دعونا نمضي قدما ومرة أخرى عكس سرعة لدينا.
>> فلماذا أنا لم المضافة في عرض من دائرة هذا
الوقت، كما فعلت من قبل؟
كذلك، أن نضع في اعتبارنا أن الإحداثيات كائن تم تعريفها
من قبل أعلى الزاوية اليسرى ل، ليس من منتصفه.
وذلك عندما يتحرك من دائرة من اليسار إلى اليمين، نحن بحاجة إلى التحقق
إذا كانت الحافة اليمنى لل اجتاز دائرة
الحافة اليمنى من النافذة.
وذلك لمعرفة ما هو ذلك، لدينا للحصول على الإحداثي س من الدائرة
بالإضافة إلى عرض من دائرة التحرك أنفسنا من أعلى الأيسر
الزاوية، على نحو فعال، ل أعلى الزاوية اليمنى.
عندما الدائرة تتحرك من اليمين إلى اليسار، وفي الوقت نفسه، نحن لسنا بحاجة ل
عناء مع هذا بالإضافة إلى ذلك، لأن أعلى الزاوية اليسرى من الدائرة
بالفعل قيمة وسوف نقوم الحصول من الحصول على خ.
>> دعونا الآن تحريك الكرة.
دعونا الآن حفظ وتجميع وتشغيل هذا البرنامج، وجعل ترتد،. / ترتد.
ويوجد لدينا برنامج.
>> ولكن دائرة يتحرك حتى الرتق سريع، انه من المستحيل تقريبا لمعرفة ما هو
يحدث فعلا.
لذلك دعونا جدا البرنامج بالقوة النقر على X في أعلى الجانب الأيمن
الزاوية هنا.
دعونا الآن نعود إلى رمز مصدر والابطاء قليلا.
>> وبعبارة أخرى، في هذا لانهائي حلقة، بدلا من مجرد والتحرك و
تحرك ومرة أخرى، nauseum الإعلانية، دعونا نطيل لمجرد أجزاء قليلة من الثانية
قبل الشروع في التحرك مرة أخرى.
على وجه الخصوص، دعونا نذهب إلى أسفل من حلقة لا نهائية هنا وببساطة
وقفة ل، مثلا، 10 ميلي ثانية على كل تكرار.
دعونا الآن إعادة ترجمة وإعادة تشغيل ترتد.
والآن نرى معقولة أكثر من ذلك بكثير التنفيذ، حيث يمكننا أن نرى
دائرة كذاب حقا على اليسار والحافة اليمنى.