仍在学习AS3。我想更多地了解这两个简单的陈述。 我受过教育的猜测是x / y合作的运动或重力?
var dx:Number = x;
var dy:Number = x;
非常感谢!
答案 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)
一方面,您不需要使用这两个变量dx
和dy
。相反,您忘记声明代码中使用的变量:gravity
,jumpPower
,isJumping
和ground
。
另一方面,最好仅在必要时使用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);
}
}