快速业务通道

游戏开发:Rectangle应用实战+Array中被你忽略的方法

作者 佚名技术 来源 服务器技术 浏览 发布时间 2012-07-08
显示列表
addChild(shape);//选择框

//产生20辆坦克
for(vari=0;i<20;i++)
{
vartank=newTank();
map.addChild(tank);
tankList.push(tank);//把坦克的引用记录下来
}

addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler)
addEventListener(MouseEvent.MOUSE_UP,mouseUpHandler)

functionmouseDownHandler(evt:MouseEvent)
{
targetPoint=newPoint(evt.currentTarget.mouseX,evt.currentTarget.mouseY);
//如果点击在坦克上,则此坦克被选中。否则注册一个鼠标移动事件
if((evt.targetisTank)==true)
{
selectList.forEach(unSelect);//将已选择链表中所有坦克变为非选择状态
clearArray(selectList);//清空selectList数组
evt.target.select=true
selectList.push(evt.target)
isMove=false;
}
else
{
addEventListener(MouseEvent.MOUSE_MOVE,mouseMoveHandler)
isMove=true;
}
}
functionmouseMoveHandler(evt:MouseEvent)
{
varrecWidth=evt.currentTarget.mouseX-targetPoint.x;
varrecHeight=evt.currentTarget.mouseY-targetPoint.y;
shape.graphics.clear();
shape.graphics.beginFill(0x99ccff,0.2);
shape.graphics.lineStyle(2,0x000000,0.8);
shape.graphics.drawRect(targetPoint.x,targetPoint.y,recWidth,recHeight)
shape.graphics.endFill();
}
functionmouseUpHandler(evt:MouseEvent)
{
removeEventListener(MouseEvent.MOUSE_MOVE,mouseMoveHandler)
rec=shape.getBounds(this);
shape.graphics.clear();
if(rec.width>0&&rec.height>0)//重新框选
{
selectList.forEach(unSelect);
clearArray(selectList);
selectList=tankList.filter(selectTank);
rec.width=rec.height=0;
}
elseif(selectList.length>0&&isMove==true)
{
selectList.forEach(moveTank)
clearArray(selectList);
}
}
//用来筛选哪些坦克被选中的过滤方法
functionselectTank(element:*,index:int,arr:Array)
{
if(element.getBounds(this).intersects(rec)==true)
{
element.select=true;
returntrue;
}
returnfalse;
}
//取消坦克的选择状态的方法
functionunSelect(element:*,index:int,arr:Array)
{
element.select=false;
}
//移动坦克的方法
functionmoveTank(element:*,index:int,arr:Array)
{
element.select=false;
varrandomX=targetPoint.x+Math.random()*150-75;
varrandomY=targetPoint.y+Math.random()*150-75;
element.moveTo(randomX,randomY);
}
functionclearArray(arr:Array)
{
while(arr.length>0)
{
arr.shift();
}
} 坦克类: package
{
/**
*一个简单的坦克类的模型
*作者:闪刀浪子
*blog:http://hi.baidu.com/mr_ziqiang
*/
importFlash.display.MovieClip
importflash.geom.Point
importflash.events.Event;

publicclassTankextendsMovieClip
{
privatevarspeed:int;//坦克的速度
privatevartargetPoint:Point;//目标点
privatevar_select:Boolean;//此坦克是否被选中,选中则显示被选中状态
/**
*Tank类构造函数
*初始化的时候随机产生一个坐标
*/
publicfunctionTank()
{
this.mouseChildren=false;//这里记得禁用子对象的鼠标点击
this.x=300*Math.random()+10;//设置坦克出现的时候在左上角100*100大小范围类随机
this.y=300*Math.random()+10;
this.scaleX=this.scaleY=1+Math.random();//体积大的就是红警中最牛的猛犸坦克了
speed=(3-scaleX)*4;//呵呵,体积越大速度当然要越慢了
}
publicfunctionmoveTo(tx:Number,ty:Number)
{
this.removeEventListener(Event.ENTER_FRAME,onMove);
targetPoint=newPoint(tx,ty);
this.addEventListener(Event.ENTER_FRAME,

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号