这些陈述意味着什么以及当我改变它们的价值时会发生什么

时间:2015-01-08 02:37:03

标签: actionscript-3

仍在学习AS3。我想更多地了解这两个简单的陈述。 我受过教育的猜测是x / y合作的运动或重力?

var dx:Number = x;
var dy:Number = x;

非常感谢!

2 个答案:

答案 0 :(得分:0)

所以代码会让角色跳跃,以逐渐慢的速度向上移动直到它再次撞到地面,其中isJumping再次变为假。每次字符跳转时,isJumping再次变为true并且循环重复(jumpPower控制有多高)。还有重力,它也控制着跳跃的速度。但是!我想指出这段代码中的一个主要缺陷..

jumpPower不应该控制它下降的速度,重力应该。当jumpPower达到零时,它开始落入负数,直到角色到达地面。这意味着引力+ jumpPower都会将角色加速到地面。

我不知道你是否打算这样做,但我建议只有引力才能把你的角色送到地上。一种更好的编码方法是给角色一个速度,你应用它的x和y线每个进入帧。

像这样......

velocityY += gravity;
MainChar.y += velocityY;

这样,当角色跳跃时,你只需要调用一次:

velocityY += jumpPower; 

...

你的代码有速度......

var dx:Number = x; // Not sure what these are
var dy:Number = x; // Not sure what these are

var velocityX:Number = 0;
var velocityY:Number = 0;

function doJump(evt:MouseEvent):void {
    if(!isJumping) {
         jumpPower = -30;
         velocityY += jumpPower;
         isJumping = true;
     }
}

function update(evt:Event):void {
   if(MainChar.y + gravity < ground) {
       velocityY += gravity
       MainChar.y += velocityY;
   } else {
       velocityY = 0;
       MainChar.y = ground;
       isJumping = false;
   }
}

...

最后的说明。为什么你的MainChar是一个静态类?

我想重点是,关于这个问题的解答不多,因为我不希望我们在这里有所有的代码。

答案 1 :(得分:0)

一方面,您不需要使用这两个变量dxdy。相反,您忘记声明代码中使用的变量:gravityjumpPowerisJumpingground

另一方面,最好仅在必要时使用enterFrame event,并在移动结束时(在功能更新中)删除它。

最后,您不需要使用布尔变量isJumping(通过在函数更新结束时实现变量jumpPower = 30的值)。

所以你的代码应该更简单:

stage.addEventListener(MouseEvent.MOUSE_DOWN, doJump);

const GRAVITY:int = 3;
var jumpPower:int = 0;
var ground:int = stage.stageHeight - MainChar.height;

function doJump(evt:MouseEvent):void {
    addEventListener(Event.ENTER_FRAME, update);
}

function update(evt:Event):void {
    MainChar.y -= jumpPower;
    jumpPower -= 2;
    MainChar.y += GRAVITY;
    if(MainChar.y + GRAVITY > ground) {
       MainChar.y = ground;
       jumpPower = 30;
       removeEventListener(Event.ENTER_FRAME, update);
    }
}