我試圖做一個與多個平臺的格鬥遊戲。我已經成功地製作了控制,運動,(雙)跳,以及遊戲的重力部分。AS3着陸平穩下重力
問題是,當一個玩家跳到地面時,他們似乎比他們應該在平臺上深一點(他們應該着陸並停留在平臺表面上)。當玩家雙跳時這更明顯。
我知道爲什麼會發生這種情況;這是因爲有時hitTestObject
需要一段時間來反應,當對象進入太快。
所以,我想到的第一件事就是讓玩家的腳y axis
等於他登陸平臺頂部的y axis
。
雖然,該解決方案導致了一個相當生澀的着陸。
我的問題是:是否有辦法讓玩家在平臺的頂部表面平穩着陸?
有些事情我已經試過:
-Raising FPS,它只是取得了同樣的效果發生,但更迅速。
- 降低玩家掉落的速度,但這會讓遊戲變得不那麼有趣,所以我把它劃掉了。
這是我的相關代碼:
stage.addEventListener(Event.ENTER_FRAME, loop);
var jumpConstant:Number = 30;
var gravityConstant:Number = 1.8;
function loop(e:Event):void //happens
{
if(player.leg1.foreleg1.foot1.hitTestObject(platforms.ground)||player.leg2.foreleg2.foot2.hitTestObject(platforms.ground)) //if either of the player's legs are colliding with the platform [ps: nested movieclips]
{
player.ySpeed = 0; //the player stops going downwards
player.y = platforms.y; //the player's y becomes the platform's y. don't worry, it puts the player in the right place, just not smoothly.
if (player.b_up) //if Up control button (W or Up Arrow) is being pressed
{
player.ySpeed = -player.jumpConstant; //make the player jump
}
else //if the player isn't colliding with the platform
{
player.ySpeed += player.gravityConstant; //the player is affected by gravity and is pulled downwards
}
鏈接到遊戲中,如果你想嘗試一下,看看生澀的效果:
http://www.fastswf.com/-64Ux3I
'hitTestObject'根據圖像的速度確實沒有任何形式的延遲 - 這是您的錯誤理解(或錯誤陳述)。它只是檢查兩個顯示對象是否重疊。 – xxbbcc
是否在ySpeed增加之前或之後重置player.y的代碼?從瑞士法郎看來,這隻腳暫時低於平臺,導致它反彈回來。如果正確實施,它不應該得到那麼低 – VBCPP
@xxbbcc顯然,我誤解了爲什麼hitTestObject會這樣做。我認爲這是hitTestObject中的一個bug ... Aaron的回答正確地解釋了爲什麼hitTestObject會這樣做。顯然,玩家只能在遠處碰撞平臺,感謝ySpeed中的增量。那麼,這是很好的知道。 –