Menu
CoddyTech

ירי בלייזרים

חלק מהיחידה ספרייטים ותמונות במסלול ה-Pygame של Coddy. שיעור 30 מתוך 36.

החללית יורה לייזרים ישר למעלה. לייזר הוא ספרייט שמתחיל בקצה הקדמי של החללית, עף 10 פיקסלים בכל פריים ומסיר את עצמו ברגע שהוא יוצא מהחלון:

class Laser(pygame.sprite.Sprite):
    def __init__(self, x, y):
        super().__init__()
        self.image = laser_image
        self.rect = self.image.get_rect(midbottom=(x, y))

    def update(self):
        self.rect.y -= 10
        if self.rect.bottom < 0:
            self.kill()

הקצה הקדמי של החללית הוא אמצע הקצה העליון שלה, לכן לייזר חדש נוצר כך: Laser(player.rect.centerx, player.rect.top) — האמצע התחתון שלו נמצא בנקודה הזו.

כל הלייזרים נמצאים בקבוצה אחת, lasers. לחיצה על מקש הרווח מוסיפה לייזר לקבוצה בתוך לולאת האירועים, כך שכל לחיצה יורה פעם אחת. הקבוצה מעדכנת ומציירת את כולם; ציירו אותם לפני החללית, כדי שייראו כאילו הם יוצאים מתחת לקצה הקדמי שלה.

challenge icon

אתגר

בינוני
  1. טען את assets/images/laser.png לתוך laser_image וכתוב את המחלקה Laser למעלה.
  2. צור את lasers = pygame.sprite.Group().
  3. באירוע KEYDOWN עבור מקש הרווח, הוסף את Laser(player.rect.centerx, player.rect.top) אל lasers.
  4. בכל פריים, קרא ל־lasers.update(), וצייר את lasers לפני החללית.

נסו בעצמכם

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Star Patrol")
clock = pygame.time.Clock()

ship_image = pygame.image.load("assets/images/ship.png").convert_alpha()


class Player(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = ship_image
        self.rect = self.image.get_rect(midbottom=(320, 470))

    def update(self):
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            self.rect.x -= 6
        if keys[pygame.K_RIGHT]:
            self.rect.x += 6
        self.rect.clamp_ip(screen.get_rect())


player = Player()

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    player.update()

    screen.fill((12, 14, 30))
    screen.blit(player.image, player.rect)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה ספרייטים ותמונות

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