الفارس
الدرس 2 من 20 في دورة مشروع Pygame: الصمود في القلعة على Coddy.
الفارس كائن رسومي: فئة مبنية على pygame.sprite.Sprite تحتفظ بصورته في self.image وموقعه في self.rect.
class Knight(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = knight_img
self.rect = pygame.Rect(0, 0, 24, 24)
self.rect.center = courtyard.centerالصورة مربعة، طول ضلعها 48 بكسل، لكن أبعاد Rect هي 24 فقط. سيصطدم الوحوش بـ Rect، لذا يجب أن يصل الوحش إلى جسد الفارس، لا إلى زاوية من المساحة الفارغة المحيطة به. يمنح مربع التصادم الصغير اللاعب شعورًا بالإنصاف.
بما أن أبعاد الصورة وRect مختلفة، ارسم الصورة بحيث يكون مركزها مطابقًا لمركز Rect. تعطي image.get_rect(center=point) كائن Rect بأبعاد الصورة، متمركزًا عند نقطة، وتقبل blit هذا الكائن بوصفه موضع الرسم:
def draw(image, center):
screen.blit(image, image.get_rect(center=center))التحدي
سهل- حمّل صورة الفارس:
knight_img = load("knight.png"). - اكتب الصنف
Knightأعلاه: الصورةknight_img، ومستطيلrectأبعاده 24 في 24 ومتمركز عندcourtyard.center. - اكتب الدالة
draw(image, center). - قبل الحلقة، أنشئ
knight = Knight()، وبعد رسم الخلفية ارسمه باستخدامdraw(knight.image, knight.rect.center).
جرّب بنفسك
import pygame
WIDTH, HEIGHT = 720, 480
TILE = 48
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Hold the Keep")
clock = pygame.time.Clock()
def load(name):
return pygame.image.load("assets/images/" + name).convert_alpha()
floor_img = load("floor.png")
wall_img = load("wall.png")
courtyard = pygame.Rect(TILE, TILE, WIDTH - 2 * TILE, HEIGHT - 2 * TILE)
background = pygame.Surface((WIDTH, HEIGHT))
for row in range(HEIGHT // TILE):
for col in range(WIDTH // TILE):
x = col * TILE
y = row * TILE
if courtyard.collidepoint(x, y):
background.blit(floor_img, (x, y))
else:
background.blit(wall_img, (x, y))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.blit(background, (0, 0))
pygame.display.flip()
clock.tick(60)
pygame.quit()
جميع دروس مشروع Pygame: الصمود في القلعة
تدرّب بنفسك: Playground لـ Pygame