【发布时间】:2013-03-09 19:34:23
【问题描述】:
所以,我正在尝试使用变量创建一个无限循环,例如在某种程度上乒乓球,你击球,它会一次又一次地向后,向左,向右,向左,向右。它有效,但每次它越来越快,我也知道为什么了想要每次都是相同的速度,而不是越来越快,有没有办法解决这个问题,或者如果可以,你能建议一个替代方案吗?谢谢!
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);
}
}
【问题讨论】:
-
虽然使用多个 setIntervals 和多个 enterFrame 处理程序是个好主意,但它在计算上是多余的。一般来说,在进行程序动画时,您会希望使用单个 as3 Timer 对象来创建绘图循环,并在那里执行所有逻辑。 100 毫秒是一个不错的开始时间间隔。与其将每个动画主体的绘制逻辑封装在侦听器函数中,不如将逻辑封装在一个类中并在绘制循环中更新该类(或多个类)的实例,从而获得更大的吸引力。