בלוק נופל
חלק מהיחידה לולאת המשחק במסלול ה-Pygame של Coddy. שיעור 24 מתוך 32.
עצם שנופל הוא עצם שערך ה־y שלו גדל בכל פריים. הפכו גם את הבלוק ל־Rect והוסיפו לערך ה־y שלו בכל איטרציה של הלולאה:
block = pygame.Rect(220, 0, 20, 20)
while running:
# אירועים ומקשים
block.y += 3
# מילוי, ציורבקצב של 60 פריימים בשנייה, 3 פיקסלים לפריים הם 180 פיקסלים בשנייה. גובה החלון הוא 360, ולכן לבלוק יידרשו שתי שניות להגיע לתחתית.
המשחק הזה נע לפי פריימים, כמו Move a Square, ולא לפי dt. Rect שומר רק מספרים שלמים, ולכן צעד של 0.6 פיקסלים, למשל, יעוגל ל־0, וה־Rect לא יזוז לעולם. משחקים שמזיזים Rects לפי זמן שומרים את המיקום ב־Vector2 ומעתיקים אותו אל ה־Rect.
הבלוק ממשיך ליפול גם אחרי שהוא יוצא מהחלון. שום דבר עדיין לא עוצר אותו; השיעור הבא יחזיר אותו.
אתגר
קל- מתחת לסל, צור את
block = pygame.Rect(220, 0, 20, 20). - בלולאה, אחרי שהסל זז, הוסף 3 ל־
block.y. - צייר את הבלוק באדום
(235, 80, 80)אחרי הסל.
נסו בעצמכם
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Catch the Blocks")
clock = pygame.time.Clock()
basket = pygame.Rect(200, 330, 80, 16)
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]:
basket.x -= 8
if keys[pygame.K_RIGHT]:
basket.x += 8
basket.clamp_ip(screen.get_rect())
screen.fill((30, 30, 46))
pygame.draw.rect(screen, (80, 160, 255), basket)
pygame.display.flip()
clock.tick(60)
pygame.quit()
כל השיעורים ביחידה לולאת המשחק
5תפוס את הבלוקים
הסלבלוק נופלתרגלו בעצמכם: Pygame אונליין