Di chuyển vòng quanh màn hình
Thuộc phần Vòng lặp trò chơi trong hành trình Pygame của Coddy. Bài học 25 trên 35.
Trong nhiều trò chơi không gian, tàu hoặc tảng đá rời khỏi một mép màn hình sẽ xuất hiện lại ở mép đối diện. Đây là hiện tượng cuộn vòng. Tảng đá ở đây trôi lên trên và sang phải, rồi biến mất hẳn sau vài giây.
Kiểm tra từng mép sau khi di chuyển. Bán kính của tảng đá là 20, vì vậy hãy để nó khuất hẳn khỏi màn hình rồi mới cho nó nhảy: khi vượt quá 480 + 20 ở bên phải, nó xuất hiện lại tại -20, khuất khỏi tầm nhìn ở phía bên kia mép trái, rồi trượt vào màn hình.
if pos.x > 500:
pos.x = -20
if pos.x < -20:
pos.x = 500Chiều y cũng hoạt động tương tự, dựa trên chiều cao: khi vượt quá 380 ở phía dưới, nó xuất hiện lại tại -20, còn khi vượt lên trên -20, nó xuất hiện lại tại 380.
Chỉ vị trí nhảy sang chỗ khác. Vận tốc vẫn giữ nguyên, nên tảng đá tiếp tục trôi theo hướng cũ sau khi cuộn vòng.
Thử thách
DễCho hòn đá vòng lại ở mép cửa sổ, sau pos += vel * dt.
- Khi vượt quá 500,
pos.xtrở thành -20; khi nhỏ hơn -20, nó trở thành 500. - Khi vượt quá 380,
pos.ytrở thành -20; khi nhỏ hơn -20, nó trở thành 380.
Nhấn “Chơi”: hòn đá rời khỏi một cạnh rồi quay lại ở cạnh đối diện. Sau đó nhấn “Kiểm tra”.
Tự làm thử
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Drifting Rock")
clock = pygame.time.Clock()
pos = pygame.Vector2(240, 180)
vel = pygame.Vector2(120, -70)
dt = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pos += vel * dt
screen.fill((20, 20, 34))
pygame.draw.circle(screen, (150, 150, 160), pos, 20)
pygame.display.flip()
dt = clock.tick(60) / 1000
pygame.quit()
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Vòng lặp trò chơi
1Di chuyển hình vuông
Mở cửa sổTô nền4Di chuyển theo thời gian
Thời gian deltaPixel mỗi giâyVector2Gia tốc và ma sátDi chuyển vòng quanh màn hìnhTự luyện tập: Playground Pygame