0

所以,我试图用变量创建一个无限循环,就像在某种程度上乒乓球一样,你击球,它会一次又一次地向后,向左,向右,向左,向右。它有效,但每次它都变得越来越快而且速度更快,我也知道为什么了每次都以相同的速度,而不是越来越快,有没有办法解决这个问题,或者如果有的话,你能建议一个替代方案吗?谢谢!

import flash.events.Event;

var badbee1right:uint = setInterval (beebad1right, 100);
function beebad1right():void {
    beebad1.x+=15;
}

var badbee1left:uint = setInterval (beebad1left, 100);
clearInterval(badbee1left);
function beebad1left():void {
    beebad1.x-=15;
}

leftbadbeewall.addEventListener(Event.ENTER_FRAME, leftbadbeewallhit);
function leftbadbeewallhit(e:Event) {
    if(beebad1.hitTestObject(leftbadbeewall)) {
        beebad1.x+=7;
        clearInterval(badbee1left);
        clearInterval(badbee1right);

    }
}

rightbadbeewall.addEventListener(Event.ENTER_FRAME, rightbadbeewallhit);
function rightbadbeewallhit(e:Event) {
    if(beebad1.hitTestObject(rightbadbeewall)) {
        clearInterval(badbee1right);
        bee.x-=7;
        clearInterval(badbee1left);
    }
}
4

2 回答 2

0

该代码没有多大意义!2 frameHandlers 也总是一个坏主意。为什么不用布尔值检查并设置方向!?
像这样:(不是 testet)这个片段假设你在舞台上有实例 badbee1、leftbadbeewall 和 rightbadbeewall

var goingRight:Boolean = true;
var speed:uint = 15;
addEventListener(Event.ENTER_FRAME, enterFrame);

function enterFrame(e:Event):void{

    if(goingRight)
        badbee1.x += speed;
    else
        badbee1.x -= speed;

    if(beebad1.hitTestObject(leftbadbeewall))
        goingRight = true;

    if(beebad1.hitTestObject(rightbadbeewall))
        goingRight = false;

}
于 2013-03-09T19:48:36.943 回答
0

提前计划 y 轴运动和 x 轴运动并不是一个坏主意。通过从您的 enterframe 方法调用 moveBee() 来尝试下面的代码。您必须为 _beeBounds 使用自己的值。玩弄 _beeDelta,这是 badbee 每帧移动的量。如果您达到左/右限制,代码将执行相同的操作 - 它将 x 增量乘以 -1 并将蜜蜂发送到相反的方向。这同样适用于 y 值。如果您不希望 y 轴运动,可以将 _beeDelta.y 设置为零。

private var _beeBounds:Rectangle = new Rectangle(0,0,100,100);
private var _beeDelta:Point = new Point(15,5);

private function moveBee():void{
  badbee.x += _beeDelta.x;
  badbee.y += _beeDelta.y;

  if(badBee.x > _beeBounds.right || badbee.x < _beeBounds.left){
    _beeDelta.x *= -1;
    badbee.x += _beeDelta.x; //optional correction. prevents badbee from being out of bounds for a frame.
  }
  if(badBee.y > _beeBounds.top || badbee.y < _beeBounds.bottom){
    _beeDelta.y *= -1;
    badbee.y += _beeDelta.y;
  }
}
于 2013-03-09T20:35:45.763 回答