Python 在Pygame中,窗口滚动和关闭不起作用
我正在使用Pygame在Python中开发一个简单的基于2d瓷砖的游戏。我已经开始使用相机的基本原理,它是以偏移量闪烁瓷砖,但瓷砖的实际矩形不会随着闪烁而移动。以下是camera类,非常简单:Python 在Pygame中,窗口滚动和关闭不起作用,python,pygame,2d,Python,Pygame,2d,我正在使用Pygame在Python中开发一个简单的基于2d瓷砖的游戏。我已经开始使用相机的基本原理,它是以偏移量闪烁瓷砖,但瓷砖的实际矩形不会随着闪烁而移动。以下是camera类,非常简单: from Map import level import Globals as gb class Camera(object): def __init__(self, x, y, screen_width, screen_height): self.rect = gb.pygame
from Map import level
import Globals as gb
class Camera(object):
def __init__(self, x, y, screen_width, screen_height):
self.rect = gb.pygame.Rect(x, y, screen_width, screen_height)
def update(self):
self.rect.center = gb.player.rect.x, gb.player.rect.y
在这里进行布告也是这样的:
def render(fov, cam):
for block in new_blocks:
gb.window.screen.blit(block.image, (block.rect.x - cam.rect.x,
block.rect.y - cam.rect.y))
地图是一个简单的2d数组,我把所有的图块都放在“新块”列表中
像这样:
for row in level.current_map:
for block in row:
if block == '.':
block = Blocks()
block.pic = 'sand.png'
block.rect.x = x
block.rect.y = y
x += 50
new_blocks.append(block)
if block == '#':
block = Blocks()
block.ID = 1
block.is_wall = True
newImage(block, 'img', 'wall.png')
block.rect.x = x
block.rect.y = y
walls.append(block)
x += 50
new_blocks.append(block)
if x == len(level.current_map[0])*50:
y += 50
x = 0
很多事情都很混乱,我正计划清理它,使用更多的常量,并在工作完成后声明更好的变量。谢谢你的帮助 问题是:您不希望摄影机修改瓷砖本身的实际坐标值。答案其实很简单,当你对角色进行blit时,使用相机修改角色被blit的位置。然后,对于你在屏幕上绘制的所有东西,都会有两组不同的坐标。1) 对象的实际位置和2)相对于屏幕的坐标。您需要注意的一点是,每个对象都是相对于屏幕绘制的,因为如果其中只有一个对象不是,则会干扰碰撞检测。我不确定是否完全理解您的要求。你的意思是瓷砖被放在正确的位置,但是实际的瓷砖.x和瓷砖.y没有改变?是的!瓦片显示在正确的位置,但它会给出玩家正在碰撞的“幽灵”矩形。你确定你正在根据绝对位置移动和碰撞玩家吗。您不会影响块矩形的位置,因此如果您绝对移动角色,然后将其转换为摄影机,则一切都应该正常。如果这不起作用,请再加一点代码。