我有兩個碰撞問題,玩家可以在多次按下移動鍵時發生故障,並且玩家的x
和y
移動一旦接觸到物體的任何一側都會停止。它應該只停止x
或y
,這取決於它觸摸哪一面。AS3 - 如何使用hitTestObject正確地停止玩家並根據碰撞區域限制玩家的移動?
雖然它接觸到邊界框的左側/右側,但仍應能夠上下移動。它接觸邊界框的頂部/底部時,它應該能夠左右移動。
球員ENTER_FRAME
類中我的移動代碼:
private function onEnterFrame(event:Event):void
{
_vx = 0;
_vy = 0;
if (isRight)
{
_vx = 5;
}
if (isLeft)
{
_vx = -5;
}
if (isUp)
{
_vy = -5;
}
if (isDown)
{
_vy = 5;
}
x += _vx;
y += _vy;
}
在CollisionBase類我hitTestObject代碼ENTER_FRAME
(基類MovieClips
):
private function onEnterFrame(event:Event):void
{
if (MovieClip(parent).player.collisionArea.hitTestObject(this))
{
if (MovieClip(parent).player.isLeft)
{
MovieClip(parent).player.x -= MovieClip(parent).player._vx;
}
if (MovieClip(parent).player.isRight)
{
MovieClip(parent).player.x -= MovieClip(parent).player._vx;
}
if (MovieClip(parent).player.isUp)
{
MovieClip(parent).player.y -= MovieClip(parent).player._vy;
}
if (MovieClip(parent).player.isDown)
{
MovieClip(parent).player.y -= MovieClip(parent).player._vy;
}
}
}
FLA
文件:https://www.dropbox.com/s/k5dlxrsnvbrmtke/Subject.zip?dl=0
的FLA
文件包括一名玩家和一張牀與。。相撞。
碰撞似乎對示例文件運作良好。然而,它不使用基類作爲障礙,而是使用mainclass。你能否更新一下這個例子,以便運動和碰撞代碼在玩家類和障礙物基類中起作用,而不是使用主類?我很抱歉,但我很困惑,無法使用它,謝謝! – Crook
如果你想要,你可以爲障礙物設置一個'class',但是如果你看看這個例子,我試圖解釋的是:在Main Class中有所有的遊戲邏輯代碼'(主要ENTER_FRAME)更好。如果你有很多'ENTER_FRAMES',你會遇到很多麻煩。但是,如果您想這樣做,請按照我在帖子中提到的步驟使用您當前的遊戲邏輯修復您的遊戲。 – ElChiniNet
我試過你的代碼,但我猜它是非常糟糕的?出於某種原因,我的播放器在接觸物體時停下來,不能移動。我用if(_collision){}。即使我沒有在代碼中加入任何東西,它也會讓我的角色停下來。 – Crook