Menu
CoddyTech

מצלמה חלקה

חלק מהיחידה צליל ותחושת משחק במסלול ה-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() משאיר את הציור על פיקסלים שלמים, בעוד המשתנה שומר את הערך המדויק שלו לפריים הבא.

לוח תפריט שמחליק פנימה, מד חיים שמתרוקן, ניקוד שעולה: כל דבר שמשתנה לערך חדש יכול לנוע בהדרגה באותה הדרך.

challenge icon

אתגר

בינוני

גרום למצלמה לעקוב בצורה חלקה: החלף את 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()
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה צליל ותחושת משחק

תרגלו בעצמכם: Pygame אונליין