试图找出一种方法,让我的图像在与物体相撞时向相反的方向移动

2024-09-27 04:21:42 发布

您现在位置:Python中文网/ 问答频道 /正文

有点长,但我不想找一个复制粘贴的答案。我只是想知道一个很好的方法。为视觉首选项粘贴的代码。你知道吗

以更好的方式。我的图像与另一个图像冲突,该对象表示瓷砖(地板/屋顶/墙等)。你知道吗

我把这些瓷砖放在屏幕的不同位置。我使用rect对象存储这些位置,并将它们存储到名为terrain的列表中。 所以我遍历我的列表,当我遇到我的英雄和某个地形物体的碰撞时,停止移动。你知道吗

我现在意识到这是个问题。当这种情况发生,我确实碰撞,我不能再移动我的对象,它被卡住了。你知道吗

所以当我的物体与某个物体相撞时,我怎样才能让它继续运动呢。不允许它继续朝着同一方向前进。你知道吗

以下是运动控制的主要部分:

moveDown语句是我尝试实现它的部分。
floorCollusion是5个假布尔的列表。你知道吗

#0 represents - no collision
#1 "       "  - top face has collided
#2 "       "  - right face has collided
#3 "       "  - bottom face has collided
#4 "       "  - left face has collided

我知道我有二进制运算。要么我搬家,要么我不搬家。我就是想不出别的办法来实现这个。你知道吗

你不需要添加代码。一个如何看到这一点的基本想法将不胜感激。你知道吗

moveDown  = False
moveUp    = False
moveLeft  = False
moveRight = False
#when key down either move the hero or quit game
        elif event.type == KEYDOWN:
            if event.key in (K_UP, K_w):
                moveDown = False
                moveUp = True
        playerObj['jumping'] = True #@@@@@@

    elif event.key in (K_DOWN,K_s):
       moveUp = False
       moveDown = True

            elif event.key in (K_LEFT, K_a):
                moveRight = False
                moveLeft = True

        #if the image is not facing left, display the left img
        if (playerObj['facing']) != LEFT:
        playerObj['surface'] = L_HERO_IMG
        playerObj['facing'] = LEFT

    elif event.key in (K_RIGHT, K_d):
        moveLeft = False
        moveRight = True

        #if the image is not facing right, display the right img
        if (playerObj['facing']) != RIGHT:
        playerObj['surface'] = R_HERO_IMG
        playerObj['facing'] = RIGHT

            elif event.key == K_ESCAPE:
                terminate()

    #testing hit point system
    elif event.key == K_SPACE:
        playerObj['health'] -= 3

        if playerObj['health'] <= 0:
        gameOver = True

    #when key is lifted stop movement
    elif event.type == KEYUP:
    if event.key in (K_UP, K_w):
       moveUp = False

    elif event.key in (K_DOWN, K_s):
       moveDown = False

    elif event.key in (K_LEFT,K_a):
       moveLeft = False

    elif event.key in (K_RIGHT,K_d):
       moveRight = False

#moving the hero
if not gameOver:

        if moveLeft:
    playerObj['x'] -= MOVERATE

        if moveRight:
    playerObj['x'] += MOVERATE

    #if the player pressed key up or 'w' and hero isn't jump
    #the hero will seems to have a jumping affect
        if moveUp:
    playerObj['y'] -= MOVERATE
        if moveDown:
    playerObj['y'] += MOVERATE
    for i in range(len(terrain)):
        tile = terrain[i]
        if playerObj['rect'].colliderect(tile):
           floorCollusion[2] = True
           break
        else:
           floorCollusion[2] = False
    if floorCollusion[2]:
        playerObj['x'] -= MOVERATE

Tags: thekeyineventfalsetrueifelif

热门问题