CODE:import index.base.game.Direction;
另外注意源代码,有个地方多次对tank的tower属性就行引用,并且返回他的x,y或者旋转值,有人就会问了,as3不是不支持类似mc那样的直接访问显示对象,为什么我这儿却可以?
import index.base.events.DirectionEvent;
import index.base.geom.Dot;
//舞台属性设置
stage.showDefaultContextMenu = false;
stage.align = "TL";
stage.scaleMode = "noScale";
//创建坦克
var tank:Tank = new Tank;
tank.x = tank.y = 250;
addChild(tank);
//创建绑定坦克的点
var dot:Dot = new Dot;
dot.bind(tank);
//坦克移动
var dirTank:Direction = new Direction(stage);
//炮台转动
var dirTower:Direction = new Direction(stage,true,87,83,65,68);
//坦克炮台事件
dirTank.addEventListener(DirectionEvent.DO,doTankFun);
dirTower.addEventListener(DirectionEvent.DO,doTowerFun);
//坦克移动
function doTankFun(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;
}
//是否可以发射炮台,子弹
var isBullet:Boolean = true;
var isShell:Boolean = true;
//炮台发射转动
function doTowerFun(e:DirectionEvent):void{
if(e.up && isBullet){
var bullet:Bullet = new Bullet;
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){
var shell:Shell = new Shell;
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;
}
}
//炮台
function shellFun(e:Event):void{
var tmp:Shell = e.currentTarget as Shell;
var d:Dot = new Dot(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;
}
//子弹
function bulletFun(e:Event):void{
var tmp:Bullet = e.currentTarget as Bullet;
var d:Dot = new Dot(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类上,并且对Tank类做了以下编写:
CODE:package{
光看这个类,也许你还是不明白,是什么原因,为什么会多出来一个towerMc出来,详细的原因,请自己下载提供的源文件,下载下来看看吧。。不懂跟帖问!
import flash.display.Sprite;
public class Tank extends Sprite{
public function Tank(){
}
public function get tower():Sprite{
return towerMc;
}
}
}
点击下载源文件
IT时代网(关注微信公众号ITtime2000,定时推送,互动有福利惊喜)所有原创文章版权所有,未经授权,转载必究。
创客100创投基金成立于2015年,直通硅谷,专注于TMT领域早期项目投资。LP均来自政府、互联网IT、传媒知名企业和个人。创客100创投基金对IT、通信、互联网、IP等有着自己独特眼光和丰富的资源。决策快、投资快是创客100基金最显著的特点。
小何
小何
小何
小何