私はFlashゲームの作成を進めており、現在、衝突検出のコーディングを行っています。衝突検出は、プレイヤーが障害物にぶつかったかどうかを検出するためのものであり、プレイヤーが障害物にぶつかった場合、それは彼が障害物を通り抜けるのを防ぎます。
衝突検出に使用しているコードは次のとおりです。
createLevel関数
private function createLevel():void
{
for (var i:int; i < numChildren; i++)
{
if (getChildAt(i) is Trees)
{
var j = getChildAt(i);
treesArray.push(j);
trace(treesArray.length);
}
}
}
そして、衝突検出機能。
private function checkCollisions():void
{
for each (var trees:Trees in treesArray)
{
if (player.hitTestObject(trees))
{
switch (true)
{
case (player.x <= trees.x) :
player.setRightSpeed(0);
break;
case (player.x >= trees.x) :
player.setLeftSpeed(0);
break;
}
switch (true)
{
case (player.y <= trees.y) :
player.setDownSpeed(0);
break;
case (player.y >= trees.y) :
player.setUpSpeed(0);
break;
}
}
else
{
player.resetSpeeds();
}
}
FlashステージにドラッグしたすべてのTreesオブジェクトを配列に入れています。次に、ゲームループで、関数との衝突をチェックするようにしcheckCollision()
ます。
プレイヤーがいずれかの樹木に当たった場合、どちらの側に当たったかを確認し、プレイヤーがその方向に移動するのを防ぐために、私はそれを持っています。また、プレーヤーが何もヒットしていない場合は、速度を通常にリセットして、任意の方向に移動できるようにします。
ただし、このコードは、treesArrayにある最初のTreeオブジェクトに対してのみ機能します。つまり、プレーヤーが停止するのは、アレイ内の他のツリーではなく、最初のツリーに移動している場合のみです。すべての木で機能するようにするにはどうすればよいですか?
また、自分の職務の位置が原因かもしれないと思っていplayer.resetSpeeds()
ますが、正確にはわかりません。