لقد قمت بتغطية مكتبة Python Arcade ، من أبسط الرسوم المتحركة المستندة إلى الألوان إلى نمذجة الجسيمات المعقدة.

تلعب الرسوم المتحركة دورًا حيويًا في تعزيز المظهر المرئي والمشاركة في ألعاب الفيديو. مكتبة Arcade هي إطار عمل Python لإنشاء ألعاب ثنائية الأبعاد. يوفر طريقة مباشرة وفعالة لدمج الرسوم المتحركة في مشاريع الألعاب الخاصة بك.

يمكنك استخدام مكتبة Arcade لإنشاء رسوم متحركة أساسية للحركة ورسوم متحركة متزامنة مع أحداث اللعبة.

قم بإنشاء لعبة بسيطة

قبل أن تبدأ ، تأكد من أن لديك نقطة مثبتة على جهازك. استخدم هذا الأمر لتثبيت مكتبة الآركيد:

نقطة تثبيت الممرات

بعد ذلك ، قم بإنشاء ملف Python باسم لعبة بسيطة وابدأ بإعداد لعبة يمكن للاعب أن يتحرك فيها يمينًا ويسارًا.

الكود المستخدم في هذه المقالة متوفر في هذا مستودع جيثب وهو مجاني لك لاستخدامه بموجب ترخيص MIT.

باستخدام مكتبة Arcade ، يمكنك إنشاء نافذة وإعداد بيئة اللعبة والتعامل مع مدخلات اللاعب. إليك مقتطف الشفرة للبدء:

يستورد ممر

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

فصللعبتي(ممر. نافذة او شباك):
def__فيه__(الذات):
سوبر () .__ init __ (SCREEN_WIDTH ، SCREEN_HEIGHT ، "لعبتي")
self.player_x = SCREEN_WIDTH // 2
self.player_y = SCREEN_HEIGHT // 2

instagram viewer

defon_draw(الذات):
arcade.start_render ()
col = arcade.color. أزرق
arcade.draw_circle_filled (self.player_x ، self.player_y ، 20، عمود)

defon_key_press(ذاتي ، مفتاح ، معدِّلات):
لو مفتاح == arcade.key. غادر:
self.player_x - = 10
أليف مفتاح == arcade.key. يمين:
self.player_x + = 10

defرئيسي():
اللعبة = MyGame ()
arcade.run ()

لو __name__ == "__رئيسي__":
رئيسي()

إضافة الرسوم المتحركة الأساسية للحركة

الآن ، خذ لعبتك خطوة إلى الأمام وأضف حركة أساسية متحركة إلى كائن اللاعب. لتحريك لاعب في الحركة، أنشئ 3 دوائر مختلفة وقم بالتكرار بينها بالتتابع عندما يبدأ اللاعب في التحرك. إليك مقتطف الشفرة المحدث لـ حركة الرسوم المتحركة ملف:

فصللعبتي(ممر. نافذة او شباك):
def__فيه__(الذات):
سوبر () .__ init __ (SCREEN_WIDTH ، SCREEN_HEIGHT ، "لعبتي")
self.player_x = SCREEN_WIDTH // 2
self.player_y = SCREEN_HEIGHT // 2
self.frame_counter = 0

defon_draw(الذات):
arcade.start_render ()
col1 = أركيد. أزرق
col2 = أركيد. أخضر
col3 = أركيد. أحمر

لو self.frame_counter < 10:
arcade.draw_circle_filled (self.player_x ، self.player_y ، 20، col1)
أليف self.frame_counter < 20:
arcade.draw_circle_filled (self.player_x ، self.player_y ، 20، col2)
آخر:
arcade.draw_circle_filled (self.player_x ، self.player_y ، 20، col3)

defon_key_press(ذاتي ، مفتاح ، معدِّلات):
لو مفتاح == arcade.key. غادر:
self.player_x - = 10
self.frame_counter = (self.frame_counter + 1) % 30
أليف مفتاح == arcade.key. يمين:
self.player_x + = 10
self.frame_counter = (self.frame_counter + 1) % 30

فيما يلي مثال لإطار الإخراج:

التحكم في سرعة الحركة واتجاهها

للتحكم في سرعة الرسوم المتحركة ، يمكنك إدخال نظام معدل الإطارات. يمكنك أيضًا تغيير ترتيب الإطارات حسب اتجاه حركة اللاعب. عندما يتحرك اللاعب من اليسار إلى اليمين ، ستعرض الإطارات بترتيب عكسي.

إليك مقتطف الشفرة المعدل لـ معدل الإطار ملف:

فصللعبتي(ممر. نافذة او شباك):
def__فيه__(الذات):
سوبر () .__ init __ (SCREEN_WIDTH ، SCREEN_HEIGHT ، "لعبتي")
self.player_x = SCREEN_WIDTH // 2
self.player_y = SCREEN_HEIGHT // 2
self.frame_counter = 0
col1 = أركيد. أزرق
col2 = أركيد. أخضر
col3 = أركيد. أحمر
إطارات ذاتية = [col1، col2، col3]
self.frame_rate = 10

defon_draw(الذات):
arcade.start_render ()
frame_index = self.frame_counter // self.frame_rate٪ len (إطارات ذاتية)

لو self.player_x 2:
frame_index = len (إطارات ذاتية) - 1 - الإطار_الفهرس

الفهرس = إطارات ذاتية [frame_index]
arcade.draw_circle_filled (self.player_x ، self.player_y ، 20، فِهرِس)

defon_key_press(ذاتي ، مفتاح ، معدِّلات):
لو مفتاح == arcade.key. غادر:
self.player_x - = 10
self.frame_counter + = 1
أليف مفتاح == arcade.key. يمين:
self.player_x + = 10
self.frame_counter + = 1

استخدم عامل المعامل % مع لين (إطارات ذاتية) للتأكد من أن الإطار_الفهرس يظل دائمًا ضمن نطاق الإطارات المتاحة. هذا يمنع IndexError. خطأ في الفهرس من الحدوث عند تكرار الرسم المتحرك عبر الإطارات.

أضبط ال معدل الإطار قيمة للتحكم في سرعة الرسوم المتحركة ، والاستمتاع بالحركة المتحركة لأشياء اللعبة.

بما في ذلك الميزات الإضافية

توفر مكتبة Arcade ميزات متنوعة لتحسين الرسوم المتحركة الخاصة بك.

تأثيرات الجسيمات

يمكنك إنشاء تأثيرات جسيمات ، مثل الانفجارات أو الدخان ، لإضافة الواقعية إلى لعبتك. قم بإنشاء ملف باسم الجسيمات وأضف الكود أدناه لتطبيق بسيط لنظام الجسيمات باستخدام Python ومكتبة Arcade:

يستورد ممر
يستورد عشوائي

# أبعاد الشاشة
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

# ألوان
أبيض = (255, 255, 255)

# فئة الجسيمات
فصلجسيم:
def__فيه__(self، x، y، dx، dy، radius، color، lifespan):
self.x = x
self.y = ذ
self.dx = dx
self.dy = دي
نصف القطر الذاتي = نصف القطر
self.color = color
self.lifespan = عمر

defتحديث(الذات):
self.x + = self.dx
self.y + = self.dy
العمر الذاتي - = 1

defيرسم(الذات):
arcade.draw_circle_filled (self.x، self.y، self.radius، self.color)

# لعبة الطبقة
فصللعبتي(ممر. نافذة او شباك):
def__فيه__(ذاتي ، عرض ، ارتفاع):
سوبر () .__ الحرف الأول __ (العرض ، الارتفاع ، "مثال الجسيمات")
الجسيمات الذاتية = []

defيثبت(الذات):
# إنشاء الجسيمات
ل _ في يتراوح(100):
x = random.randrange (SCREEN_WIDTH)
y = random.randrange (SCREEN_HEIGHT)
dx = عشوائي. موحد (-1, 1)
dy = عشوائي.-1, 1)
نصف القطر = عشوائي.2, 5)
اللون = الممرات. أبيض
lifespan = random.randint (60, 120)
جسيم = جسيم (x ، y ، dx ، dy ، نصف القطر ، اللون ، العمر الافتراضي)
self.particles.append (جسيم)

defon_draw(الذات):
arcade.start_render ()
ل الجسيم في الجسيمات الذاتية:
الجسيمات. الرسم ()

defتحديث(ذاتي ، delta_time):
ل الجسيم في الجسيمات الذاتية:
تحديث الجسيمات ()

لو الجسيمات عمر <= 0:
إزالة الجسيمات الذاتية (الجسيمات)

defرئيسي():
اللعبة = MyGame (SCREEN_WIDTH ، SCREEN_HEIGHT)
نمط اللعبة()
arcade.run ()

لو __name__ == "__رئيسي__":
رئيسي()

يجب أن تشاهد رسمًا متحركًا يتضمن العديد من الجسيمات المتحركة:

الرسوم المتحركة التفاعلية

تنفيذ الرسوم المتحركة التفاعلية التي تستجيب لإدخال المستخدم أو أحداث اللعبة. على سبيل المثال ، عندما يتفاعل اللاعب مع كائن ما ، يمكن أن يتحرك أو يغير لونه أو يتحول بطريقة ما. توفر هذه الرسوم المتحركة التفاعلية ملاحظات وتعزز تفاعل اللاعب مع اللعبة. إليك رمز ملف التفاعلية الرسوم المتحركة. py ملف:

يستورد ممر

# أبعاد الشاشة
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

# ألوان
أبيض = (255, 255, 255)
أحمر = (255, 0, 0)

فصللعبتي(ممر. نافذة او شباك):
def__فيه__(ذاتي ، عرض ، ارتفاع):
سوبر () .__ الحرف الأول __ (العرض ، الارتفاع ، "الرسوم المتحركة التفاعلية")
self.player_x = 400
self.player_y = 300
self.player_radius = 30
self.player_color = أحمر
self.animation_radius = 60
self.animation_color = أبيض
self.animation_active = خطأ شنيع

defon_draw(الذات):
arcade.start_render ()

arcade.draw_circle_filled (self.player_x ،
self.player_y ،
self.player_radius ،
self.player_color)

لو الرسوم المتحركة الذاتية:
arcade.draw_circle_filled (self.player_x ،
self.player_y ،
self.animation_radius ،
النفس.

defon_mouse_press(ذاتي ، x ، y ، زر ، معدِّلات):
لو (self.player_x - self.player_radius <=
س <= self.player_x + self.player_radius و
self.player_y - self.player_radius <=
y <= self.player_y + self.player_radius
):
self.animation_active = حقيقي

defتحديث(ذاتي ، delta_time):
لو الرسوم المتحركة الذاتية:
self.animation_radius + = 1

لو self.animation_radius> 100:
self.animation_active = خطأ شنيع
self.animation_radius = 0

defرئيسي():
اللعبة = MyGame (SCREEN_WIDTH ، SCREEN_HEIGHT)
arcade.run ()

لو __name__ == "__رئيسي__":
رئيسي()

تجاوز الطرق الضرورية ، مثل on_draw, on_mouse_press، و تحديث، للتعامل مع رسم المشغل والرسوم المتحركة ، والتعامل مع نقرات الماوس ، وتحديث الرسوم المتحركة.

لرسم المشغل ، استخدم arcade.draw_circle_filled وظيفة ، والتي تأخذ (س ، ص) إحداثيات المركز ونصف القطر واللون كوسيطات. تعد وظيفة draw_circle_filled واحدة من أدوات Arcade التي يمكنك استخدامها لرسم أصول اللعبة. في هذه الحالة ، يمكنك رسم دائرة متزايدة بتغيير نصف القطر بمرور الوقت.

ال on_mouse_press تعمل الطريقة عندما ينقر المستخدم على الماوس. يتحقق مما إذا كانت إحداثيات الماوس داخل حدود كائن المشغل وينشط الرسوم المتحركة إذا كانت موجودة.

أفضل الممارسات لإضافة الرسوم المتحركة

عند إضافة رسوم متحركة إلى ألعابك ، ضع في اعتبارك أفضل الممارسات التالية:

الحد من عدد الرسوم المتحركة

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

تقدم دفعة كائنات مماثلة

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

استخدم الاستيفاء للرسوم المتحركة السلس

قم بتطبيق تقنيات الاستيفاء ، مثل الاستيفاء الخطي (lerping) ، لتحقيق انتقالات سلسة للرسوم المتحركة. يحسب الاستيفاء القيم المتوسطة بين الإطارات الرئيسية للرسوم المتحركة لإنشاء حركات مرنة. يمنع هذا الأسلوب القفزات المفاجئة أو الحركات المتقطعة بين الإطارات ، مما ينتج عنه رسوم متحركة أكثر جاذبية من الناحية المرئية.

ضع في اعتبارك سرعة الرسوم المتحركة وتوقيتها

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

الاختبار والتحسين

اختبر الرسوم المتحركة بانتظام على أجهزة مختلفة وراقب الأداء. ابحث عن الاختناقات أو حالات التباطؤ المحتملة وقم بالتحسين وفقًا لذلك. تساعد هذه العملية في ضمان تجارب رسوم متحركة سلسة ومتسقة عبر مجموعة واسعة من الأجهزة.

اجعل الألعاب أكثر تفاعلاً مع الرسوم المتحركة

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

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