4

トップダウン シューティング ゲームを作成していて、ゾンビをキャラクターに追従させたいのですが、プログラムでメイン ループを使用しています。私のキャラクターの位置は x と y で、矢印キーで操作します。現在のところ、撃たれたときに画面の左端にランダムに出現するゾンビがいます。ゾンビがスポーンした場所から自分の位置に追従させるにはどうすればよいですか?

これはゾンビ関数です:

def makezombie():
    global zom
    zom = Rect (0,randint(0, height-40), 49, 38)
    return zom

私はzombie=makezombie()を設定しました

私のメインループには次のものがあります。

for shot in shots:
    if zombie.collidepoint(shot[X],shot[Y]):
        zombie=makezombie()
        points+=1000
        impact.play()
        blood.play()
4

2 に答える 2

6

質問を完全に理解しているかどうかはわかりませんが、基本的にできることは、プレイヤー (x, y) 座標とゾンビ (x, y) 座標を取ることです。(xp, yp) がプレイヤーの座標で、(xz, yz) がゾンビであると仮定すると、次のアルゴリズムを使用して、ゾンビからプレイヤーへの方向を見つけることができます。

import math
(dx, dy) = ((xp - xz)/math.sqrt((xp - xz) ** 2 + (yp - yz) ** 2), 
            (yp - yz)/math.sqrt((xp - xz) ** 2 + (yp - yz) ** 2))

次に、メイン ループで、ゾンビの x と y の位置座標を newCoord = (xp + dx * sped, yp + dy * speed) を実行して更新します。ここで、speed は、ループごとにゾンビを移動させたいピクセル数です。次に、この新しい位置でゾンビを再描画します。

それが役立つことを願っています! そうでない場合は、質問を明確にしてください。

于 2012-06-10T19:33:34.853 に答える
1

ベクトル計算 (つまりeuclid ) について知っている場合は、ベクトル減算を使用できます。

zombie_speed = 50 # pixels / an update
player = Vector2(player.rect.x, player.rect.y)
zombie = Vector2(zombie.rect.x, zombie.rect.y)
movement = player - zombie
movement.normalize()
movement *= zombie_speed

次に、動きの x、y 値をゾンビの Rect() に追加します

于 2012-06-10T23:23:37.753 に答える