这个论坛上的一个人告诉我要用这个:
Frame skipping on Flash
而不是像thing.x -= 4;
所以我做到了:
package {
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.utils.getTimer;
public class Seamine extends MovieClip {
private var core:Object;
private var lastFrame:int = 0;
private var thisFrame:int;
private var pixelsPerSecond:Number = 100;
private var percentToMove:Number;
public function Seamine():void{
addEventListener(Event.ADDED_TO_STAGE, onadd);
}
private function onadd(e:Event){
stage.addChild(this);
addEventListener(Event.ENTER_FRAME, loop);
}
private function loop(e:Event):void{
// Get the miliseconds since the last frame
thisFrame = getTimer();
percentToMove = (thisFrame - lastFrame) / 1000;
// Save the value for next frame.
lastFrame = thisFrame;
// Update your system based on time, not frames.
this.x -= pixelsPerSecond * percentToMove;
if(this.x < 0 - this.width/2)
{
stage.removeChild(this);
removeEventListener(Event.ENTER_FRAME, loop);
removeEventListener(Event.ADDED_TO_STAGE, onadd);
}
if(GlobalVariables.GameOver == 1)
{
this.alpha -= .03;
}
if(this.alpha == 0)
{
this.alpha = 0;
stage.removeChild(this);
removeEventListener(Event.ENTER_FRAME, loop);
removeEventListener(Event.ADDED_TO_STAGE, onadd);
}
}
}
}
但出于某种原因,我的“Seamine”确实采取了其他的x posistion?所以它不是从一开始就开始的。实施例。
1开始,它有正确的速度。 Next Seamine spawn,但这一次,它不是从“起始x值”开始,因为它从Seamine 1开始。
我像这样生产Seamines:
var tm_Seamine:Timer = new Timer (2000);
tm_Seamine.addEventListener(TimerEvent.TIMER, Spawn_Seamine);
tm_Seamine.start();
function Spawn_Seamine(e:Event){
var SM:Seamine = new Seamine();
var RandomYValue_1_Box:Number = Math.ceil(Math.random()*500);
addChild(SM);
SM.y = RandomYValue_1_Box;
SM.x = 1000;
addEventListener(Event.ENTER_FRAME, Hit_SM)
function Hit_SM (e:Event){
if(SM.hitTestPoint(Player.x,Player.y, true))
{
GlobalVariables.GameOver = 1;
}
}
}
答案 0 :(得分:0)
getTimer()
获取自 SWF 开始运行以来的毫秒数,而非对象。因此,如果您使用这段时间来计算移动对象的距离,那么对于所有对象,它将是相同的。因此,无论对象何时被创建,所有对象都将移动到相同的位置。
一个简单的解决方法是使用getTimer()
而不是0
初始化lastFrame。