嘿,所有人都已经这样做了一段时间现在似乎无法修复这个错误我知道我看起来很简单或者说我错了。我使用Flash Animate和Flash Develop作为我的IDE。
我正在将我的角色player
和它与舞台碰撞的平台platforms
添加到舞台上。一切似乎工作正常,除非我继续跳跃角色一次几个像素落在地板上,当我再次跳跃它纠正自己但只是一遍又一遍地重复这个场景。更多信息角色是静止的,平台正在向他移动。所有玩家要做的就是点击跳跃。
以下是Gravity和添加到舞台的其他对象的变量:
//Movie clips
private var player:mcPlayer;
private var platforms:mcPlatforms;
//Jumping Variables
private var nGravity:Number = -1.8;// Gravity
private var nJumpPow:Number = 0; //Y velocity
//Booleans
private var bJumping:Boolean = false;
//Arrays
private var aPlatformArray:Array;
//Add Character
player = new mcPlayer();
player.x = (stage.stageWidth / 2) - 80;
player.y = (stage.stageHeight / 2) + 78;
addChild(player);
private function addPlatForms():void
{
//Add Obstacle Platforms
platforms = new mcPlatforms();
platforms.x = (stage.stageWidth / 2) - 80;
platforms.y = (stage.stageHeight / 2) + 165;
addChild(platforms);
aPlatformArray.push(platforms);
trace(aPlatformArray.length + " NPLATFORMS");
}
这是我的Jump Handler,这些是我的ENTER FRAME Listener:
private function jumpHandler():void
{
//When User taps screen player jumps
if (bJumping) //Jump Up
{
player.y += nJumpPow;
nJumpPow -= nGravity;
}
}
最后这是我如何处理碰撞:
private function playerPlatformHandler():void
{
for (var i:int = 0; i < aPlatformArray.length; i++)
{
var currentPlatform:mcPlatforms = aPlatformArray[i];
//If user is not touching platform have character fall down
if (!currentPlatform.hitTestPoint(player.x, player.y, true) && !bJumping)
{
trace("PLAYER NOT TOUCHING PLATFORM");
nJumpPow = -15;
player.y -= nJumpPow;
nJumpPow -= nGravity;
}
// Have character stand on top of platform when lands
if (currentPlatform.hitTestPoint(player.x, player.y, true) && bJumping)
{
bJumping = false; //Jumping is false
}
}
trace("JUMPPOWER " + nJumpPow);
trace("GRAVITY " + nGravity);
}
所以当我跟踪变量时,我看到nJumpPow
每次跳跃都在增加和减少,我认为可能是罪魁祸首但是尝试使用if语句修复它并将其值设置为0什么都没有,人物的脚仍在通过平台坠落。
如有任何帮助或建议如何解决这个问题将不胜感激!先感谢您。
答案 0 :(得分:0)
我有一些提示给你。我希望他们中的一个可以解决你的主要问题。
1-当您确定没有击中任何一个楼层时,您必须摔倒。但是在你的密码中,我可以看到你控制着所有的楼层,当你发现玩家没有击中其中任何一个时你正在改变玩家。 在许多情况下,玩家可以站在地板上,但是有很多楼层,玩家无法触摸它们。
您必须更正以下功能:
private function playerPlatformHandler():void
{
var isPlayerOnAFloor:Boolean = false ;
for (var i:int = 0; i < aPlatformArray.length; i++)
{
var currentPlatform:mcPlatforms = aPlatformArray[i];
// Have character stand on top of platform when lands
if (currentPlatform.hitTestPoint(player.x, player.y, true) && bJumping)
{
isPlayerOnAFloor = true ;
}
}
if(!isPlayerOnAFloor)
{
//Fall him down now!
}
}
2-为了获得更好的性能,Allays将标志变量带到if(标记和计算)条件位置的复杂计算的左侧。如果标志为false,则代码将不会继续进行计算。 hitTest不是一个简单的计算,特别是当你有大楼层时!
让我知道您的问题是否通过第1个解决方案解决了。