1

少し長いですが、コピーと貼り付けの答えを探しているわけではありません。これにアプローチする方法について良い方法を知りたいだけです。視覚的な好みのために貼り付けられたコード。

より良い言葉で。画像が別の画像と衝突しています。このオブジェクトはタイル (床/屋根/壁/その他) を表しています。

これらのタイルを画面全体のさまざまな場所に配置します。rect オブジェクトを使用してこれらの位置を保存し、 として知られるリストに保存しますterrain。そのため、リストを反復処理し、ヒーローと地形オブジェクトとの衝突に遭遇したら、動きを止めます。

これが問題だと今になって気づきました。これが発生して衝突すると、オブジェクトを動かすことができなくなり、動かなくなります。

では、オブジェクトが何らかのオブジェクトと衝突したときに、どうすればオブジェクトを動き回らせることができますか。同じ方向にさらに移動し続けることは許可されていません。

動きを制御するための主要な部分は次のとおりです。

ステートメントは、私がそれmoveDownを実装しようとする部分です。
floorCollusion5 つの False ブール値のリストです。

#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
4

0 に答える 0