首先是对响应KEYDOWN的几方种方式做一个检测,看看哪个效率比较好。
Key.addListener(c);
c.onKeyDown=function(){
if(Key.isDown(KEY.UP)){
c._y-=1;
}
if(Key.isDown(KEY.DOWN)){
c._y+=1;
}
if(Key.isDown(KEY.LEFT)){
c._x-=1;
}
if(Key.isDown(KEY.RIGHT)){
c._x+=1;
}
}
function control(mc){
if(Key.isDown(KEY.UP)){
mc._y-=1;
}
if(Key.isDown(KEY.DOWN)){
mc._y+=1;
}
if(Key.isDown(KEY.LEFT)){
mc._x-=1;
}
if(Key.isDown(KEY.RIGHT)){
mc._x+=1;
}
}
_root.onEnterFrame=function(){
control(b);
}
setInterval(control,40,d);
点击浏览该文件可以看到,在一直按住某个键时,用监听器的开始时反应比较慢,但是其对连续响应某个键还是比放在onEnterFrame要好(条件是帧频为25FPS)。所以我把侦听连续按某个键的工作交给Listener的onKeyDown和onKeyUp,上下左右的移动工作交给root.onEnterFrame. 我把最主要的框架讲一下,其实很简单的,当然,由于是偶自己想出来的,不足之处,还请指点。
_global.toggal=0;//用来标识一直按个某个键的持续次数。
_global.n=0;//用来标识子弹的数量
把我们的对象PLANE作为键盘的监听对象。
Key.addListener(plane);
测定连发的要害,用把toggal的值在KeyDown中进行判定。
plane.onKeyDown=function(){
if(Key.isDown(96)){//计算器键盘的0,我喜欢用这个发子弹
toggal++;
n++;//迭代过程
if(toggal<10){//正常的子弹
if(n<50){//内嵌的一个发射子弹的过程
bullet.duplicateMovieClip("bullet"+n,n+100);
eval("_root.bullet"+n)._x=plane._x;
eval("_root.bullet"+n)._y=plane.getBounds(_root).yMin
}
else {n=0;}
}
else if(toggal>10&&toggal<35){//表示正在蓄力,进行蓄前渲染
smallplane.onEnterFrame=function(){//这种写法成功啦
smallplane._x=plane._x;
smallplane._y=plane.getBounds(_root).yMin+5;
smallplane._visible=true
}
else if(toggal>35){//蓄力已毕,进行预备发射的渲染,看你的喜好自由发挥。
smallplane._visible=false;
delete smallplane.onEnterFrame;
dot.onEnterFrame=function(){
dot._x=plane._x;
dot._y=plane.getBounds(_root).yMin+5;
dot._visible=true;
dot.play();
}
}
}
然后,只要在onKeyUp中根据toggal的值决定是否调用就行了
plane.onKeyUp=function(){
if(toggal>35){
superbullet();//蓄力子弹如何作完全看你的个人发挥了,最好是用AS写,没发子的话放一段预设的MC也行啊
}
toggal=0;//别忘了归0,进入下次的迭代过程
}
好了,我理解中的主框架就是蓄力的主框架就是这样,不过要完美的实现,还行花些力气,这是我做的效果,不过还有两个问题,问在下面的回复里。 注重,子弹是用计算器键盘上的0来发射。
点击浏览该文件