flash AS3.0关于setinterval和Timer的问题
最近在做一个格斗游戏,遇到一个问题。由于使用setinterval的方法,可以方便的传参数进入我的ControlClass,这个参数也许就是我定义的人物类的实例。这样我可...
最近在做一个格斗游戏,遇到一个问题。
由于使用setinterval的方法,可以方便的传参数进入我的ControlClass,这个参数也许就是我定义的人物类的实例。这样我可以在我的ControlClass里方便的对舞台上的实例进行操作。
但是用Timer类,由于使用了AS3.0的侦听机制,传出的参数,只能是Event,无法传递在舞台上的人物类实例,就没办法在ControlClass里对人物类实例进行操作。要实现操作只能在时间轴上列出操作方法,再用帧事件侦听该方法。
我不想用setinterval来实现,不知道高手有什么方法解决这个问题。不知道说清除没。有问题我再补充。(分不多拉,能帮助解答的还是会追加分数)
部分代码:
时间轴上:
mport Classes.Act.*;
import Classes.Util.*;
var Han:actor=new actor;//人物类
var HanJ:JudgeA=new JudgeA;//判断状态类
var HanTime:TimeCT=new TimeCT;//时间类
var bb:Controller=new Controller(Han,HanJ,HanTime);
stage.addChild(Han);
stage.addEventListener(KeyboardEvent.KEY_DOWN,Keys.KeyDown);
stage.addEventListener(KeyboardEvent.KEY_UP,Keys.KeyUp);
控制类:
public function Controller(A:actor,J:JudgeA,TC:TimeCT)
{
this.beginInterval(A,J,TC);
}
public function whichKeyDown(A:actor,J:JudgeA,TC:TimeCT):void
{..........}//一些 控制方法
private function beginInterval(A:actor,J:JudgeA,TC:TimeCT):void
{
this.intervalId=setInterval(whichKeyDown,30,A,J,TC);
} 展开
由于使用setinterval的方法,可以方便的传参数进入我的ControlClass,这个参数也许就是我定义的人物类的实例。这样我可以在我的ControlClass里方便的对舞台上的实例进行操作。
但是用Timer类,由于使用了AS3.0的侦听机制,传出的参数,只能是Event,无法传递在舞台上的人物类实例,就没办法在ControlClass里对人物类实例进行操作。要实现操作只能在时间轴上列出操作方法,再用帧事件侦听该方法。
我不想用setinterval来实现,不知道高手有什么方法解决这个问题。不知道说清除没。有问题我再补充。(分不多拉,能帮助解答的还是会追加分数)
部分代码:
时间轴上:
mport Classes.Act.*;
import Classes.Util.*;
var Han:actor=new actor;//人物类
var HanJ:JudgeA=new JudgeA;//判断状态类
var HanTime:TimeCT=new TimeCT;//时间类
var bb:Controller=new Controller(Han,HanJ,HanTime);
stage.addChild(Han);
stage.addEventListener(KeyboardEvent.KEY_DOWN,Keys.KeyDown);
stage.addEventListener(KeyboardEvent.KEY_UP,Keys.KeyUp);
控制类:
public function Controller(A:actor,J:JudgeA,TC:TimeCT)
{
this.beginInterval(A,J,TC);
}
public function whichKeyDown(A:actor,J:JudgeA,TC:TimeCT):void
{..........}//一些 控制方法
private function beginInterval(A:actor,J:JudgeA,TC:TimeCT):void
{
this.intervalId=setInterval(whichKeyDown,30,A,J,TC);
} 展开
展开全部
既然你把要操作的对象写在了构造函数里,那么可见每一个Controller类用来控制唯一的对象,那么用公共变量就可以实现了啊。
package {
import flash.display.Sprite;
import flash.utils.Timer;
import flash.events.TimerEvent;
import Classes.Act.*;
import Classes.Util.*;
public class Controller{
private var timer:Timer;
private var dely:Number;
private var act:actor;
private var jud:JudgeA;
private var tc:TimeCT;
public function Controller(A:actor,J:JudgeA,TC:TimeCT) {
this.act = A;
this.jud = J;
this.tc = TC;
this.dely = 30;
timer = new Timer(dely * 1000);
timer.addEventListener(TimerEvent.TIMER,timerHandle);
timer.start();
}
private function timerHandle(e:TimerEvent):void{
whichKeyDown(act,jud,tc);
}
public function whichKeyDown(A:actor,J:JudgeA,TC:TimeCT):void {
}
}
}
建议你注意一下命名规范,能增加代码可读性。包名小写,类名第一个字母大写,变量第一个字母小写。
package {
import flash.display.Sprite;
import flash.utils.Timer;
import flash.events.TimerEvent;
import Classes.Act.*;
import Classes.Util.*;
public class Controller{
private var timer:Timer;
private var dely:Number;
private var act:actor;
private var jud:JudgeA;
private var tc:TimeCT;
public function Controller(A:actor,J:JudgeA,TC:TimeCT) {
this.act = A;
this.jud = J;
this.tc = TC;
this.dely = 30;
timer = new Timer(dely * 1000);
timer.addEventListener(TimerEvent.TIMER,timerHandle);
timer.start();
}
private function timerHandle(e:TimerEvent):void{
whichKeyDown(act,jud,tc);
}
public function whichKeyDown(A:actor,J:JudgeA,TC:TimeCT):void {
}
}
}
建议你注意一下命名规范,能增加代码可读性。包名小写,类名第一个字母大写,变量第一个字母小写。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询