屏幕滚动背景的精灵

2024-07-05 10:56:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图得到一个滚动的背景,当玩家走到屏幕的背景重新绘制,它看起来有一个连续的永远的运动,但我只能得到一个背景重新绘制。你知道吗

这是我的密码:

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)

有什么建议吗?你知道吗


Tags: imageeventgetifsysloadkeysscreen
1条回答
网友
1楼 · 发布于 2024-07-05 10:56:42

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

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

关于实际问题:

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

背景逐渐切换,没有玩家移动。你知道吗

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

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

您发布的链接没有移动的背景。它的工作原理是根据相机放置的位置在不同的位置绘制不同的精灵。 摄像机中心始终位于球员的最后一个最远位置。你知道吗

编辑:

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

你还需要一种方法来将游戏坐标转换成屏幕坐标。这就是摄像机的作用。你知道吗

相关问题 更多 >