Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Pygame中,窗口滚动和关闭不起作用_Python_Pygame_2d - Fatal编程技术网

Python 在Pygame中,窗口滚动和关闭不起作用

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

我正在使用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.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没有改变?是的!瓦片显示在正确的位置,但它会给出玩家正在碰撞的“幽灵”矩形。你确定你正在根据绝对位置移动和碰撞玩家吗。您不会影响块矩形的位置,因此如果您绝对移动角色,然后将其转换为摄影机,则一切都应该正常。如果这不起作用,请再加一点代码。