我试图获得一个滚动的背景,当玩家进入屏幕后,背景重新绘制,看起来有一个连续的永久运动,但是我只能重新绘制背景。 / p>
继承我的代码:
import pygame, sys
from pygame.locals import *
pygame.init()
clock = pygame.time.Clock()
screen = pygame.display.set_mode((400,200),0,32)
b1 = "resources/images/bac.jpg"
back = pygame.image.load(b1).convert()
image = pygame.image.load("resources/images/badguy.png")
back2 = pygame.image.load(b1).convert()
x = 0
screenWidth = 600
spritex=0
spritey=0
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
screen.blit(back, (x,0))
screen.blit(back2,(x-screenWidth,0))
screen.blit(image, (spritex,spritey))
for event in pygame.event.get():
if event.type==QUIT:
pygame.quit()
sys.exit()
keys_pressed = pygame.key.get_pressed()
if keys_pressed[K_LEFT]:
spritex -= 5
if keys_pressed[K_RIGHT]:
spritex += 5
if keys_pressed[K_UP]:
spritey -= 5
if keys_pressed[K_DOWN]:
spritey += 5
x = x + 1
if x == screenWidth:
if spritex > screenWidth or spritey > 200:
x = 0
pygame.display.update()
clock.tick(30)
有什么建议吗?
答案 0 :(得分:0)
我在你的代码中发现了一些错误。
surface.copy()
而不是再次加载图像在实际问题上:
您现在编写的内容(修复上述内容后):
背景在没有玩家移动的情况下逐渐切换。
要解决此问题,您可以使用玩家位置来确定在哪里绘制背景。所以你的绘图代码会改为:
screen.blit(back, (spritex,0))
screen.blit(back2,(spritex-screenWidth,0))
screen.blit(image, (spritex,spritey))
您发布的链接没有移动背景。它的工作原理是根据相机放置的位置在不同的位置绘制不同的精灵。 相机中心始终位于播放器的最后一个位置。
编辑:
至于相机,它有点复杂。重点是将屏幕上显示的内容与实际游戏逻辑分开。相机对象实际上只需要它所包含的矩形,以便它可以在其视图中绘制所有对象。就这么简单。
您还需要一种方法将游戏坐标转换为屏幕坐标。这是相机的用武之地。