ירי בלייזרים
חלק מהיחידה ספרייטים ותמונות במסלול ה-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. לחיצה על מקש הרווח מוסיפה לייזר לקבוצה בתוך לולאת האירועים, כך שכל לחיצה יורה פעם אחת. הקבוצה מעדכנת ומציירת את כולם; ציירו אותם לפני החללית, כדי שייראו כאילו הם יוצאים מתחת לקצה הקדמי שלה.
אתגר
בינוני- טען את
assets/images/laser.pngלתוךlaser_imageוכתוב את המחלקהLaserלמעלה. - צור את
lasers = pygame.sprite.Group(). - באירוע
KEYDOWNעבור מקש הרווח, הוסף אתLaser(player.rect.centerx, player.rect.top)אלlasers. - בכל פריים, קרא ל־
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()
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה ספרייטים ותמונות
7סיור כוכבים
ספינת הסיורירי בלייזרים5התנגשויות מדויקות ברמת הפיקסל
מלבנים מרגישים לא הוגניםמסכותספרייטים מדויקים ברמת הפיקסלתיבות פגיעה מעגליות3מחלקות לאובייקטים במשחק
המחלקה הראשונה שלךמתודותself הוא האובייקטרשימה של אובייקטיםאובייקטים עם תמונותתת־מחלקהתרגלו בעצמכם: Pygame אונליין