【问题标题】:how to make snake wall teleportation with pygame [duplicate]如何用pygame制作蛇墙传送[重复]
【发布时间】:2020-10-31 03:30:29
【问题描述】:

我正在制作一个蛇游戏,我想传送我的蛇,当它进入某堵墙时,它会传送到另一侧的另一个,但是当我尝试这样做时,我遇到了很多“错误”,但是我的主要问题是当蛇多次穿过墙壁时它会脱离网格,并且所有碰撞都会搞砸,这是蛇代码:

size = 15
    s_posx = 60
    s_posy = 60
    snake = [(s_posx + size * 2, s_posy),(s_posx + size, s_posy),(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]

【问题讨论】:

  • 抱歉,我没明白窗外那部分蛇的意思。
  • 我不怪你,我的英语沟通能力还不是很好
  • 你的英语很好。甚至比我的还要好。外语交流会导致误解。这就是生活。无论如何,我看到了我的错误。

标签: python pygame collision-detection


【解决方案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]

【讨论】:

    猜你喜欢
    • 2022-09-25
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多