Python 屏幕滚动背景的精灵

Python 屏幕滚动背景的精灵,python,pygame,sprite,Python,Pygame,Sprite,我试图获得一个滚动的背景,当玩家离开屏幕时,背景会重新绘制,看起来像是一个持续的永久运动,但是我只能重新绘制背景 这是我的密码: 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 = pyga

我试图获得一个滚动的背景,当玩家离开屏幕时,背景会重新绘制,看起来像是一个持续的永久运动,但是我只能重新绘制背景

这是我的密码:

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)

有什么建议吗?

我发现您的代码中有一些错误

  • 有两个事件循环执行相同的操作
  • 屏幕宽度设置为600,而屏幕宽度设置为400
  • 如果要复制曲面,可以执行
    surface.copy()
    ,而不是再次加载图像
关于实际问题:

您现在所做的代码(在修复上述问题后):

背景会逐渐切换,但玩家不会移动

为了解决这个问题,你可以使用玩家的位置来决定在哪里画你的背景。因此,图形代码将更改为:

screen.blit(back, (spritex,0))
screen.blit(back2,(spritex-screenWidth,0))
screen.blit(image, (spritex,spritey))
您发布的链接没有移动的背景。它的工作原理是根据相机的放置位置在不同的位置绘制不同的精灵。 摄影机中心始终位于播放机的最后最远位置

编辑:

至于照相机,它有点复杂。关键在于将屏幕上显示的内容与实际的游戏逻辑分开。摄影机对象实际上只需要它所遇到的矩形,这样它就可以在其视图中绘制所有对象。就这么简单


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

你是否试图让玩家精灵在屏幕的中间移动,而你的背景移动?我不想移动玩家的背景。上面的代码有什么问题?背景不会移动吗?背景会移动,但当玩家离开屏幕时,不会绘制新的背景。我希望屏幕能像这样随着玩家移动:那么我该如何移动相机呢?