تعرف على كيفية تصميم كاميرا يمكنها التنقل عبر عالم اللعبة لإضافة الواقعية والوظائف.

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

هناك العديد من الطرق المختلفة لتنفيذ كاميرا التمرير في PyGame ، لذا تأكد من فهم الاختلافات بينها.

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

قبل البدء ، قم بتثبيت النقطة على جهازك واستخدم الأمر أدناه لتثبيت وحدة PyGame:

نقطة تثبيت pygame

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

يمكنك العثور على الكود الكامل للمشروع في هذا جيثب ريبو.

ابدأ باستيراد وحدة pygame. بعد ذلك ، قم بتهيئته ، وأنشئ نافذة اللعبة باستخدام ملف pygame.display.set_mode () وظيفة. ثم ، قم بتعيين التسمية التوضيحية للنافذة وإنشاء ملف على مدار الساعة لإدارة معدل الإطارات.

يستورد القزم

pygame.init ()

WINDOW_WIDTH = 800
WINDOW_HEIGHT = 600

الشاشة = pygame.display.set_mode ((WINDOW_WIDTH ، WINDOW_HEIGHT))

pygame.display.set_caption ("لعبتي البسيطة")

الساعة = pygame.time. ساعة()

instagram viewer

BACKGROUND_COLOR = (255, 255, 255)

بعد ذلك ، قم بإعداد المشغل والمنصات الثابتة. حدد حجم اللاعب وموضعه الأولي.

PLAYER_WIDTH = 50
PLAYER_HEIGHT = 50

player_x = WINDOW_WIDTH // 2 - PLAYER_WIDTH // 2
player_y = WINDOW_HEIGHT - PLAYER_HEIGHT - 20

PLAYER_SPEED = 10

RECTANGLE_COLOR_1 = (255, 0, 0)
RECTANGLE_COLOR_2 = (0, 0, 255)

rectangle_1 = pygame. مستطيل (200, 200, 100, 100)
rectangle_2 = pygame. مستطيل (500, 300, 150, 50)

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

بينماحقيقي:
# التعامل مع الأحداث
ل حدث في pygame.event.get ():
لو event.type == pygame. يترك:
pygame.quit ()
يترك()

# ارسم الخلفية
screen.fill (BACKGROUND_COLOR)

# ارسم المستطيلات الثابتة
pygame.draw.rect (شاشة ، RECTANGLE_COLOR_1 ، مستطيل_1)
pygame.draw.rect (شاشة ، RECTANGLE_COLOR_2 ، مستطيل_2)

# ارسم اللاعب
player_rect = pygame. تصحيح (player_x ، player_y ، PLAYER_WIDTH ،
PLAYER_HEIGHT)

pygame.draw.rect (شاشة ، (0, 0, 0) ، player_rect)

# تحديث العرض
pygame.display.update ()

# الحد من معدل الإطارات
على مدار الساعة.30)

إعداد الكاميرا

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

لإعداد الكاميرا ، تحتاج أولاً إلى تحديد متغير لعقد الإزاحة X للكاميرا. نسمي هذا المتغير camera_offset_x وتهيئته إلى 0.

# ضبط إزاحة الكاميرا
camera_offset_x = 0

بعد ذلك ، قم بتحديث مواضع جميع الكائنات التي ترسمها على الشاشة ، لمراعاة إزاحة الكاميرا. يمكنك القيام بذلك عن طريق إضافة camera_offset_x القيمة إلى الموضع X لكل كائن. على سبيل المثال ، يمكنك تحديث موضع اللاعب كما يلي:

# ارسم اللاعب
player_rect = pygame. تصحيح (player_x + camera_offset_x ، player_y ، PLAYER_WIDTH ،
PLAYER_HEIGHT)

pygame.draw.rect (شاشة ، (0, 0, 0) ، player_rect)

وبالمثل ، يمكنك تحديث أوضاع المنصات الثابتة على النحو التالي:

# ارسم المستطيلات الثابتة
rectangle_1_draw_pos = rectangle_1.move (camera_offset_x، 0)
pygame.draw.rect (شاشة ، RECTANGLE_COLOR_1 ، مستطيل_1_draw_pos)

rectangle_2_draw_pos = rectangle_2.move (camera_offset_x، 0)
pygame.draw.rect (شاشة ، RECTANGLE_COLOR_2 ، مستطيل_2_draw_pos)

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

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

للقيام بذلك ، أضف الكود التالي داخل حلقة الحدث التي تعالج مدخلات لوحة المفاتيح:

لو event.type == pygame. زر أسفل:
لو event.key == pygame. K_LEFT:
camera_offset_x - = PLAYER_SPEED
أليف event.key == pygame. K_RIGHT:
camera_offset_x + = PLAYER_SPEED

هناك طريقة أخرى وهي تغيير إحداثيات x الخاصة بالمشغل بالضغط على لوحة المفاتيح ثم تحديث إزاحة الكاميرا. يمكنك تنفيذ هذا على النحو التالي:

# التعامل مع الأحداث
ل حدث في pygame.event.get ():
لو event.type == pygame. يترك:
pygame.quit ()
يترك()

لو event.type == pygame. زر أسفل:
لو event.key == pygame. K_LEFT:
player_x - = PLAYER_SPEED
أليف event.key == pygame. K_RIGHT:
player_x + = PLAYER_SPEED

بعد ذلك ، يمكنك تحديث إزاحة الكاميرا فيما يتعلق بالإحداثيات x الخاصة بالمشغل على النحو التالي:

camera_offset_x = WINDOW_WIDTH // 2 - player_x - PLAYER_WIDTH // 2

تحريك الكاميرا باستخدام مدخلات الماوس

هناك طريقة أخرى لتحريك الكاميرا وهي استخدام الماوس. يمكنك السماح للاعب بسحب الشاشة من خلال النقر بالماوس وسحبها.

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

# التعامل مع الأحداث
ل حدث في pygame.event.get ():
لو event.type == pygame. يترك:
pygame.quit ()
يترك()

لو event.type == pygame. زر الماوس:
لو event.button == 1:
mouse_start_pos = pygame.mouse.get_pos ()

لو event.type == pygame. حركة الماوس:
لو pygame.mouse.get_pressed () [0]:
mouse_current_pos = pygame.mouse.get_pos ()
mouse_offset_x = mouse_current_pos [0] - mouse_start_pos [0]
player_x - = mouse_offset_x
mouse_start_pos = mouse_current_pos

إضافة المزيد من ميزات الكاميرا

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

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

تكبير = 1.0

defget_scaled_size(مقاس):
يعود int (الحجم * تكبير)

بعد ذلك ، قم بتحديث مواضع وأحجام الكائنات المرسومة على الشاشة باستخدام ملف get_scaled_size وظيفة. على سبيل المثال ، يمكنك تحديث موضع اللاعب وحجمه على النحو التالي:

player_rect = pygame. مستطيل (
get_scaled_size (player_x + camera_offset_x) ،
get_scaled_size (player_y) ،
get_scaled_size (PLAYER_WIDTH) ،
get_scaled_size (PLAYER_HEIGHT)
)

وبالمثل ، قم بتحديث مواضع وأحجام المنصات الثابتة على النحو التالي:

rectangle_1_draw_pos = pygame. مستطيل (
get_scaled_size (rectangle_1.x + camera_offset_x) ،
get_scaled_size (rectangle_1.y) ،
get_scaled_size (rectangle_1.width) ،
get_scaled_size (rectangle_1.height)
)

pygame.draw.rect (شاشة ، RECTANGLE_COLOR_1 ، مستطيل_1_draw_pos)

rectangle_2_draw_pos = pygame. مستطيل (
get_scaled_size (rectangle_2.x + camera_offset_x) ،
get_scaled_size (rectangle_2.y) ،
get_scaled_size (rectangle_2.width) ،
get_scaled_size (rectangle_2.height)
)

pygame.draw.rect (شاشة ، RECTANGLE_COLOR_2 ، مستطيل_2_draw_pos)

قم بزيادة أو تقليل مستوى التكبير بمقدار 0.1 عندما يضغط اللاعب على = أو - مفتاح ، على التوالي. اضبط الحجم الجديد لنافذة اللعبة بناءً على مستوى التكبير الحالي. للقيام بذلك ، أضف الكود التالي داخل حلقة الحدث التي تعالج مدخلات لوحة المفاتيح:

لو event.type == pygame. زر أسفل:
لو event.key == pygame. K_EQUALS:
تكبير + = 0.1

الشاشة = pygame.display.set_mode ((
int (WINDOW_WIDTH * تكبير) ،
int (WINDOW_HEIGHT * تكبير)
))
أليف event.key == pygame. K_MINUS:
تكبير - = 0.1

لو تكبير < 0.1:
تكبير = 0.1

الشاشة = pygame.display.set_mode ((
int (WINDOW_WIDTH * تكبير) ،
int (WINDOW_HEIGHT * تكبير)
))

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

تحسين اللعب مع حركات الكاميرا

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

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