מצלמה חלקה
חלק מהיחידה צליל ותחושת משחק במסלול ה-Pygame של Coddy. שיעור 17 מתוך 23.
המצלמה במשחק הכביש הזה צמודה לשחקן: לא משנה מה השחקן עושה, הוא נשאר במרכז המסך והעולם נע מתחתיו. זה עובד, אבל כל התחלה ועצירה מטלטלות את כל התצוגה.
תן למצלמה לעקוב באותה החלקה כמו העיגול. היעד שלה הוא המיקום שהיה ממקם את השחקן במרכז:
camera_x += (player.centerx - 240 - camera_x) * 0.1
camera_x = max(0, min(camera_x, WORLD_WIDTH - 480))השחקן נע כמו קודם; רק התצוגה נעה בהדרגה. כשהשחקן מתחיל לרוץ, המצלמה משתרכת מעט מאחור, כך שהשחקן רץ לפני המרכז. כשהוא עוצר, המצלמה מחליקה כדי להדביק את הפער ומתייצבת כך שהשחקן שוב באמצע. השורה השנייה עדיין משאירה את המצלמה בתוך העולם.
העולם מצויר ב--int(camera_x) כמו קודם. עכשיו camera_x הוא מספר עשרוני; int() משאיר את הציור על פיקסלים שלמים, בעוד המשתנה שומר את הערך המדויק שלו לפריים הבא.
לוח תפריט שמחליק פנימה, מד חיים שמתרוקן, ניקוד שעולה: כל דבר שמשתנה לערך חדש יכול לנוע בהדרגה באותה הדרך.
אתגר
בינוניגרום למצלמה לעקוב בצורה חלקה: החלף את camera_x = player.centerx - 240 בשורה שמזיזה את camera_x עשירית מהדרך לכיוון player.centerx - 240 בכל פריים. השאר את השורה שמגבילה אותו.
נסו בעצמכם
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Long Road")
clock = pygame.time.Clock()
WORLD_WIDTH = 1440
player = pygame.Rect(220, 240, 40, 40)
camera_x = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player.x -= 6
if keys[pygame.K_RIGHT]:
player.x += 6
player.left = max(player.left, 0)
player.right = min(player.right, WORLD_WIDTH)
camera_x = player.centerx - 240
camera_x = max(0, min(camera_x, WORLD_WIDTH - 480))
screen.fill((30, 30, 46))
pygame.draw.rect(screen, (80, 80, 100), (0, 280, 480, 80))
for post_x in range(0, WORLD_WIDTH, 120):
pygame.draw.rect(screen, (80, 160, 255), (post_x - int(camera_x), 220, 20, 60))
pygame.draw.rect(screen, (90, 200, 120), player.move(-int(camera_x), 0))
pygame.display.flip()
clock.tick(60)
pygame.quit()
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה צליל ותחושת משחק
תרגלו בעצמכם: Pygame אונליין