0

私が取り組んでいるこのプロジェクトについて以前に投稿しました (そしてあなたの回答が役に立ちました!) が、衝突検出が正しく報告されない理由についてはまだ少し曖昧です。プレイヤー キャラクターを衝突可能なタイルに移動するときなど、プレイが進むすべてのタイルで true が返されます。衝突検出アルゴリズムに問題があるかどうか、または他の場所に問題があるかどうかを知りたいだけです。

def checkPlayerEnvCollision(self,player):
    rowCount = 0
    for row in self.cLayer:
        colCount = 0
        for col in row:
            print("col: " + str(col))
            #print(str(self.Level.tileLayer[row][col]) + ": " + str(c[row][col]))
            if col:
                grid_position = (colCount*32, rowCount*32)
                collide_x = False
                collide_y = False

                print(str(grid_position))
                # check x axis for collision
                if player.x + 32 > grid_position[0]:
                    collide_x = True
                elif player.x < grid_position[0] + 32:
                    collide_x = True

                print("Player x: " + str(player.x) + " Player y : " + str(player.y))


                # check y axis for collision
                if player.y < grid_position[1] + 32:
                    collide_y = True
                elif player.y + 32 > grid_position[1]:
                    collide_y = True

                print("collide_x: " + str(collide_x) + " " + "collide_y: "+ str(collide_y))

                # act on a collision on both axis
                if collide_x and collide_y:
                    print("COLLISION DETECTED")
                else:
                    print("NOCOLLISION___")
            colCount += 1
        rowCount += 1

助けてくれてありがとう!

4

1 に答える 1

0

私は次のようなコードだと思います:

            if player.x + 32 > grid_position[0]:
                collide_x = True
            elif player.x < grid_position[0] + 32:
                collide_x = True

これに変更する必要があります:

            if grid_position[0] + 32 > player.x > grid_position[0]:
                collide_x = True

(はい、そのような比較演算子を連鎖できるのは Python の機能です)

于 2013-04-12T00:59:39.967 に答える