繁体   English   中英

如何使用pyglet创建免费游戏冲突?

[英]How to create free game collision with pyglet?

就我正在处理的东西而言,我已经开始研究与Terraria相当的2d游戏。 我的问题如下:世界由瓷砖/砖块组成,然后有玩家。 我似乎找不到找到使玩家与瓷砖碰撞的方法,为什么不设置地面水平? 因为如果玩家下方没有瓷砖,他应该掉下来,而如果玩家在山上怎么办? 长话短说,我需要一种使玩家与他们下面的瓷砖碰撞的方法。

所以,这就是我尝试的方法:制作一个简化的网格以验证the是否是下面的图块,一个for循环,在该循环中,我将所有图块与玩家的脚进行了比较,但该数据太多,无法提供数据,我找不到办法也就是说要检查玩家下方,上方,左侧和右侧的磁贴,以及仅查看那些位置。 我将尝试显示有用的代码,但由于无法粘贴所有文件,因此会有些混乱。


class Physics:
    @classmethod
    def fall(cls, dt, o, world, mod):
        if world.grid_fill[(o.grid_pos[0], o.grid_pos[1]-1)] == "Filled":
            o.falling = False
        else:
            o.y -= o.height//8*dt
            o.update_pos(o.x, o.y)

    @classmethod
    def run_physics(cls, dt, o, world):
        for obj in o:
            Physics.fall(dt, obj, world, None)

# player and Physics are in 2 different files as is world and the main loop

class Player:
    def __init__(self, sprite, x, y, world):
        self.img = sprite
        self.img.set_position(x, y)
        self.key_handler = key.KeyStateHandler()
        self.type = "Player"
        self.x = x
        self.y = y
        self.pos = (self.x, self.y)
        self.grid_pos = world.pix_cords[self.pos]
        self.width = self.img.width
        self.height = self.img.height
        self.speed = self.width//4
        self.falling = False

    def update_pos(self, x, y):
        self.img.set_position(x, y)

    def draw(self):
        self.img.draw()

    def check_fall(self, tile):
        if self.y - self.height//2 == tile.y + tile.height:
            return False
        else:
            return True

    def update(self):
        if self.key_handler[key.A]:
            self.x -= self.speed
        if self.key_handler[key.D]:
            self.x += self.speed
        if self.key_handler[key.W]:
            self.y += self.speed
        self.update_pos(self.x, self.y)

在您说之前,我没有显示地面是如何形成的,这是因为我可以通过仅说说它是使用批处理绘制并且所有子画面小锥角都位于该子画面居中来解释这一点。 好的,当我运行这段代码时,播放器会无限期掉落,但是当它下面有一块瓷砖时,我希望它停止。

如果您需要查看磁贴的批处理,但我不知道是否需要,并且如果您看到关于此如何写的任何非专业知识,我总是乐于学习如何更专业地编写。

这是一个愚蠢的问题。 只需要基于块而不是精灵创建一个简化的定位系统。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM