微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用pygame进行蛇墙的隐形传送

如何解决如何使用pygame进行蛇墙的隐形传送

我正在做蛇游戏,我想传送我的蛇,当它在特定的墙壁上移动时,它会传送到另一侧的另一只墙上,但是当我尝试这样做时,我遇到了很多“虫子”,但是我的主要问题是,当蛇多次穿过墙壁越过栅栏时,所有碰撞都被弄乱了,这是蛇代码

size = 15
    s_posx = 60
    s_posy = 60
    snake = [(s_posx + size * 2,s_posy),(s_posx + size,(s_posx,s_posy)]
    s_skin = pygame.Surface((size,size))
    s_skin.fill((82,128,208))

这是蛇的移动代码

new_pos = None
        if direction == 'DOWN':
            new_pos = (snake[0][0],snake[0][1] + size)
        if direction == 'UP':
            new_pos = (snake[0][0],snake[0][1] - size)
        if direction == 'LEFT':
            new_pos = (snake[0][0] - size,snake[0][1])
        if direction == 'RIGHT':
            new_pos = (snake[0][0] + size,snake[0][1])
        if new_pos:
            snake = [new_pos] + snake
            del snake[-1]

这是墙上的传送代码

if snake[0][0] == 0:
            _pos = (1020,(snake[0][1]/15) * 15)
            if _pos:
                snake = [_pos] + snake
                del snake[-1]
        elif snake[0][1] == 0:
            _pos = ((snake[0][0]/ 15) * 15,580)
            if _pos:
                snake = [_pos] + snake
                del snake[-1]
        elif snake[0][0] == 1020:
            _pos = (0,(snake[0][1]/ 15) * 15)
            if _pos:
                snake = [_pos] + snake
                del snake[-1]
        elif snake[0][1] == 580:
            _pos = ((snake[0][0] / 15) * 15,0)
            if _pos:
                snake = [_pos] + snake
                del snake[-1]

解决方法

580不能被15整除。这可能是错误的。将其更改为585。根据上一个问题(why collision between two moving objects on pygame dont work?),碰撞测试仅在蛇的坐标可以被15整除的情况下才有效。但是我建议简化一下:

_pos = None
if snake[0][0] == 0:
    _pos = (1020,snake[0][1])
elif snake[0][1] == 0:
    _pos = (snake[0][0],585)
elif snake[0][0] == 1020:
    _pos = (0,snake[0][1]/ 15)
elif snake[0][1] == 585:
    _pos = (snake[0][0],0)
if _pos:
    snake = [_pos] + snake
    del snake[-1]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。