בלוק נופל
שיעור 10 מתוך 41 בקורס צרו משחקים עם Pygame של Coddy.
משהו נופל אם ערך ה־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()
כל השיעורים ביחידה צרו משחקים עם Pygame
2אירועים והתנגשויות
הסלבלוק נופלתרגלו בעצמכם: Pygame אונליין