Pygame 滚动背景错误
Pygame scrolling background bug
我正在尝试在按下按键时在 pygame 中制作背景滚动效果。
import pygame
from pygame import *
import os
pygame.init()
WIDTH, HEIGHT = 472, 708
WIN = pygame.display.set_mode((WIDTH, HEIGHT))
FPS = 60
BG = pygame.image.load(os.path.join('images', 'BG.jpg'))
BG = pygame.transform.scale(BG, (WIDTH, HEIGHT))
class Background(object):
def __init__(self, win, image):
self.win = win
self.image = image
self.bgY = 0
self.bgY2 = BG.get_height()
self.bgY3 = BG.get_height() * -1
def draw(self):
self.win.blit(self.image, (0, self.bgY))
self.win.blit(self.image, (0, self.bgY2))
self.win.blit(self.image, (0, self.bgY3))
pygame.display.update()
def bg_movement(self):
keys = pygame.key.get_pressed()
if keys[K_w]:
self.bgY += 2
self.bgY2 += 2
self.bgY3 += 2
if keys[K_s]:
self.bgY -= 2
self.bgY2 -= 2
self.bgY3 -= 2
if self.bgY < self.image.get_height() * -1:
self.bgY = self.image.get_height()
if self.bgY2 < self.image.get_height() * -1:
self.bgY2 = self.image.get_height()
if self.bgY3 < self.image.get_height() * -1:
self.bgY3 = (self.image.get_height() * -1)
player = Background(WIN, BG)
def main():
clock = pygame.time.Clock()
running = True
while running:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
player.draw()
player.bg_movement()
pygame.quit()
if __name__ == '__main__':
main()
当我按下 S 键时,背景正常滚动。但是当我按下W键一段时间后,背景开始留下痕迹
This is the actual image used in the game.
This is the screenshot showing the bug in the game. The image leaves a trail.
使用取模 (%
) 运算符计算背景的位置。 %
运算符计算除法的提示:
class Background(object):
def __init__(self, win, image):
self.win = win
self.image = image
self.bgY = 0
def draw(self):
self.win.blit(self.image, (0, self.bgY - self.image.get_height()))
self.win.blit(self.image, (0, self.bgY))
self.win.blit(self.image, (0, self.bgY + self.image.get_height()))
pygame.display.update()
def bg_movement(self):
keys = pygame.key.get_pressed()
if keys[K_w]:
self.bgY = (self.bgY + 2) % self.image.get_height()
if keys[K_s]:
self.bgY = (self.bgY - 2) % self.image.get_height()
我正在尝试在按下按键时在 pygame 中制作背景滚动效果。
import pygame
from pygame import *
import os
pygame.init()
WIDTH, HEIGHT = 472, 708
WIN = pygame.display.set_mode((WIDTH, HEIGHT))
FPS = 60
BG = pygame.image.load(os.path.join('images', 'BG.jpg'))
BG = pygame.transform.scale(BG, (WIDTH, HEIGHT))
class Background(object):
def __init__(self, win, image):
self.win = win
self.image = image
self.bgY = 0
self.bgY2 = BG.get_height()
self.bgY3 = BG.get_height() * -1
def draw(self):
self.win.blit(self.image, (0, self.bgY))
self.win.blit(self.image, (0, self.bgY2))
self.win.blit(self.image, (0, self.bgY3))
pygame.display.update()
def bg_movement(self):
keys = pygame.key.get_pressed()
if keys[K_w]:
self.bgY += 2
self.bgY2 += 2
self.bgY3 += 2
if keys[K_s]:
self.bgY -= 2
self.bgY2 -= 2
self.bgY3 -= 2
if self.bgY < self.image.get_height() * -1:
self.bgY = self.image.get_height()
if self.bgY2 < self.image.get_height() * -1:
self.bgY2 = self.image.get_height()
if self.bgY3 < self.image.get_height() * -1:
self.bgY3 = (self.image.get_height() * -1)
player = Background(WIN, BG)
def main():
clock = pygame.time.Clock()
running = True
while running:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
player.draw()
player.bg_movement()
pygame.quit()
if __name__ == '__main__':
main()
当我按下 S 键时,背景正常滚动。但是当我按下W键一段时间后,背景开始留下痕迹
This is the actual image used in the game.
This is the screenshot showing the bug in the game. The image leaves a trail.
使用取模 (%
) 运算符计算背景的位置。 %
运算符计算除法的提示:
class Background(object):
def __init__(self, win, image):
self.win = win
self.image = image
self.bgY = 0
def draw(self):
self.win.blit(self.image, (0, self.bgY - self.image.get_height()))
self.win.blit(self.image, (0, self.bgY))
self.win.blit(self.image, (0, self.bgY + self.image.get_height()))
pygame.display.update()
def bg_movement(self):
keys = pygame.key.get_pressed()
if keys[K_w]:
self.bgY = (self.bgY + 2) % self.image.get_height()
if keys[K_s]:
self.bgY = (self.bgY - 2) % self.image.get_height()