|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
FlashScreensaversMaker能够迅速的将您的Flash作品转化为屏保程序。
后面解说了FlashAS3教程:Direction类和Dot类,后面都是实际的解说,这篇来一个实战,做一个相似坦克游戏的程序。
http://www.webjx.com/files/media/dirtanke.swf
这几天也写了一些类了,是驴子仍是骡子,拿出来遛一遛就晓得了,先看这个下面这个flash动画!
一个相似坦克游戏的demo程序
利用Direction类来举行偏向把持
利用Dot类来盘算间隔
用上Direction类和Dot类以后,这个demo程序变得非常复杂额。。
也没甚么好说,次要透过这个例子,让人人类熟习Direction类和Dot类的利用办法
不懂的能够在前面跟帖发问,妙手假如看到甚么有毛病的中央,请斧正出来,多谢指教
上面是fla的源代码:
CODE:
importindex.base.game.Direction;
importindex.base.events.DirectionEvent;
importindex.base.geom.Dot;
//舞台属性设置
stage.showDefaultContextMenu=false;
stage.align="TL";
stage.scaleMode="noScale";
//创立坦克
vartank:Tank=newTank;
tank.x=tank.y=250;
addChild(tank);
//创立绑定坦克的点
vardot:Dot=newDot;
dot.bind(tank);
//坦克挪动
vardirTank:Direction=newDirection(stage);
//炮台动弹
vardirTower:Direction=newDirection(stage,true,87,83,65,68);
//坦克炮台事务
dirTank.addEventListener(DirectionEvent.DO,doTankFun);
dirTower.addEventListener(DirectionEvent.DO,doTowerFun);
//坦克挪动
functiondoTankFun(e:DirectionEvent):void{
if(e.up){
dot.go(2,true);
}
if(e.down){
dot.go(-2,true);
}
if(e.left){
tank.rotation-=2;
}
if(e.right){
tank.rotation+=2;
}
if(tank.x<0)tank.x=0;
if(tank.y<0)tank.y=0;
if(tank.x>stage.stageWidth)tank.x=stage.stageWidth;
if(tank.y>stage.stageHeight)tank.y=stage.stageHeight;
}
//是不是能够发射炮台,枪弹
varisBullet:Boolean=true;
varisShell:Boolean=true;
//炮台发射动弹
functiondoTowerFun(e:DirectionEvent):void{
if(e.up&&isBullet){
varbullet:Bullet=newBullet;
bullet.x=tank.x;
bullet.y=tank.y;
bullet.rotation=tank.rotation+tank.tower.rotation;
bullet.addEventListener(Event.ENTER_FRAME,bulletFun);
addChild(bullet);
isBullet=false;
setTimeout(function(){isBullet=true},200);
}
if(e.down&&isShell){
varshell:Shell=newShell;
shell.x=tank.x;
shell.y=tank.y;
shell.rotation=tank.rotation;
shell.addEventListener(Event.ENTER_FRAME,shellFun);
addChild(shell);
isShell=false;
setTimeout(function(){isShell=true},500);
}
if(e.left){
tank.tower.rotation-=5;
}
if(e.right){
tank.tower.rotation+=5;
}
}
//炮台
functionshellFun(e:Event):void{
vartmp:Shell=e.currentTargetasShell;
vard:Dot=newDot(tmp.x,tmp.y,tmp.rotation);
d.bind(tmp);
d.go(4,true);
if(tmp.x<0||tmp.x>stage.stageWidth||tmp.y<0||tmp.y>stage.stageHeight){
removeChild(tmp);
tmp.removeEventListener(Event.ENTER_FRAME,shellFun);
}
tmp=null;
d=null;
}
//枪弹
functionbulletFun(e:Event):void{
vartmp:Bullet=e.currentTargetasBullet;
vard:Dot=newDot(tmp.x,tmp.y,tmp.rotation);
d.bind(tmp);
d.go(5,true);
if(tmp.x<0||tmp.x>stage.stageWidth||tmp.y<0||tmp.y>stage.stageHeight){
removeChild(tmp);
tmp.removeEventListener(Event.ENTER_FRAME,bulletFun);
}
tmp=null;
d=null;
}别的注重源代码,有个中央屡次对tank的tower属性就行援用,而且前往他的x,y大概扭转值,有人就会问了,as3不是不撑持相似mc那样的间接会见显现工具,为何我这儿却能够?
乐意是我把素材绑定在Tank类上,而且对Tank类做了以下编写:
CODE:
package{
importflash.display.Sprite;
publicclassTankextendsSprite{
publicfunctionTank(){
}
publicfunctiongettower():Sprite{
returntowerMc;
}
}
}光看这个类,大概你仍是不分明,是甚么缘故原由,为何会多出来一个towerMc出来,具体的缘故原由,请本人下载供应的源文件,下载上去看看吧。。不懂跟帖问!
点击下载源文件
AdobeFlashPlayerforIE是IE浏览器专用的flash播放器插件,可以播放AdobeFlash制作的flash文件。 |
|