私はアイソメトリック ゲーム (ダイヤモンド グリッド) に取り組んでおり、キャラクターの動きに関する小さな問題に遭遇しました。
A* を使用して 2 点間のパスを見つけてから、パスを形成するすべてのタイルを通過してポイント A からポイント B にキャラクターを移動したいのですが、これを行う方法が見つかりません。より簡単で正確な方法。
これまでのところ、このコードを破棄しましたが、ちょっと「さびた」です
public void Destination(tile destination)
{
for (int i = 0; i < 8; i++)
{
if (AdjacentTile[i] == destination)
{
characterDirection = i;
}
}
animation.changeSpriteDirection(characterDirection); //After I found which adjacent tile is the next destination I change the character direction based on it's position (1 = North , 2 = Nort Est etc) .. so the Y of the Animation_sourceRectangle it's changed//
Vector2 Position;
Position.X = current_characterTile.X - destination.X;
Position.Y = current_characterTile.Y - destination.Y;
rotation = (float)Math.Atan2(-Position.X, Position.Y);
moveVector = (Vector2.Transform(new Vector2(0, -1), Matrix.CreateRotationZ(rotation))) * characterSpeed;
movingCommand = 1; // the character is supposed to be moving..
Move(); //this function moves the sprite until the *tile.i and tile.j* of the character is the same as tile.j and tile.i of the destination
//something like this
if ( characterTile.i == destination.i && characterTile.j == destination.j)
movingCommand = 0 //stop
else
character_Position += moveVector;
}
誰かが私に何をすべきか、または私を助けるためのヒントを与えることができれば、私はとても感謝しています.
ありがとうございました。