Döşenmiş Bir Arka Plan
Coddy'nin Pygame Journey'sinin Dünyalar bölümünün bir parçası. Ders 9 / 35.
Seviyenin arkasındaki düz bir renk boş görünür. assets/backgrounds/clouds.png, tekrarlanacak şekilde hazırlanmış 72'ye 72 piksellik bir görseldir: sol kenarı sağ kenarıyla, üst kenarı da alt kenarıyla eşleşir. Pencereyi kaplayan bir ızgarada blit edin:
for y in range(0, 360, 72):
for x in range(0, 576, 72):
screen.blit(background, (x, y))range(0, 576, 72), 0, 72, 144 ve son görünen başlangıç noktası olan 504'e kadar devam eden değerleri verir. 576, 72'nin katı olduğundan son kopya pencerenin kenarında biter. Arka plan, screen.fill işlevinin yerini alır: her pikseli kaplar.
Sıralama önemlidir. Daha sonra blit ettiğiniz her şey mevcut olanın üstünü kaplar; bu yüzden önce arka planı, ardından döşemeleri üzerine çizin.
Görev
KolayBaşlangıç kodu, assets/backgrounds/clouds.png dosyasını background içine yükler.
- Oyun döngüsünde
screen.fillyerinebackgroundgörselini, 72'şer artışlarla 0'dan 576'ya kadar her x koordinatında ve 72'şer artışlarla 0'dan 360'a kadar her y koordinatında çiz. - Arka planın üzerine döşemeleri çiz.
Kendin dene
import pygame
TILE = 36
LEVEL = [
"###.............",
"###.............",
"..........C.....",
".........####...",
"..C.............",
".####......C....",
"..........###...",
"#....C.........#",
"###..##...###.##",
"######..########",
]
pygame.init()
screen = pygame.display.set_mode((576, 360))
pygame.display.set_caption("Tiles")
clock = pygame.time.Clock()
grass_img = pygame.image.load("assets/images/grass.png").convert_alpha()
grass_left_img = pygame.image.load("assets/images/grass_left.png").convert_alpha()
grass_right_img = pygame.image.load("assets/images/grass_right.png").convert_alpha()
dirt_img = pygame.image.load("assets/images/dirt.png").convert_alpha()
coin_img = pygame.image.load("assets/images/coin.png").convert_alpha()
background = pygame.image.load("assets/backgrounds/clouds.png").convert_alpha()
def solid(row, col):
if row < 0 or row >= len(LEVEL) or col < 0 or col >= len(LEVEL[0]):
return False
return LEVEL[row][col] == "#"
tiles = []
for row, line in enumerate(LEVEL):
for col, char in enumerate(line):
x, y = col * TILE, row * TILE
if char == "#":
if solid(row - 1, col):
image = dirt_img
elif not solid(row, col - 1) and solid(row, col + 1):
image = grass_left_img
elif solid(row, col - 1) and not solid(row, col + 1):
image = grass_right_img
else:
image = grass_img
tiles.append((image, pygame.Rect(x, y, TILE, TILE)))
elif char == "C":
tiles.append((coin_img, pygame.Rect(x, y, TILE, TILE)))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((140, 200, 240))
for image, rect in tiles:
screen.blit(image, rect)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Dünyalar bölümündeki tüm dersler
1Metinden Haritalar
Metinde Bir SeviyeSatırlar ve SütunlarAnlam Taşıyan HarflerOyuncunun Başladığı YerHer Seferinde Bir Ekran3Yerçekimi ve Zıplama
Yerçekimiyle DüşmeYerden ZıplamaKısa SıçrayışlarEn Yüksek Düşme HızıZıplama Tamponu6Devriye Gezen Düşmanlar
Devriye Gezen Bir BlobÜzerine Bas ya da Darbe AlYürüme DöngüsüHaritadaki DüşmanlarKendi başına pratik yap: Pygame playground