精灵去屏幕 - 滚动背景

时间:2014-01-04 19:45:20

标签: python pygame sprite

我试图获得一个滚动的背景,当玩家进入屏幕后,背景重新绘制,看起来有一个连续的永久运动,但是我只能重新绘制背景。 / 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)

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我在你的代码中发现了一些错误。

  • 你有2个事件循环做同样的事情。
  • screenWidth设置为600,而屏幕宽度为400。
  • 如果您要复制曲面,则可以执行surface.copy()而不是再次加载图像

在实际问题上:

您现在编写的内容(修复上述内容后):

背景在没有玩家移动的情况下逐渐切换。

要解决此问题,您可以使用玩家位置来确定在哪里绘制背景。所以你的绘图代码会改为:

screen.blit(back, (spritex,0))
screen.blit(back2,(spritex-screenWidth,0))
screen.blit(image, (spritex,spritey))

您发布的链接没有移动背景。它的工作原理是根据相机放置的位置在不同的位置绘制不同的精灵。 相机中心始终位于播放器的最后一个位置。

编辑:

至于相机,它有点复杂。重点是将屏幕上显示的内容与实际游戏逻辑分开。相机对象实际上只需要它所包含的矩形,以便它可以在其视图中绘制所有对象。就这么简单。

您还需要一种方法将游戏坐标转换为屏幕坐标。这是相机的用武之地。