Math类之子弹跟随

import flash.ui.Mouse;
import flash.events.Event;
import flash.display.MovieClip;

var mouse:MOUSE = new MOUSE();
stage.addChild(mouse); ;
stage.addEventListener(Event.MOUSE_LEAVE, cursorHide);//MOUSE_LEAVE 事件来检测鼠标是否离开影片
stage.addEventListener(MouseEvent.MOUSE_MOVE, cursorFollow);//当鼠标进入影片时MOUSE_MOVE事件来检测,因为MOUSE_MOVE事件只有在鼠标存在于影片范围内时触发
Mouse.hide();

function cursorHide(evt:Event):void
{
mouse.visible = false;
}
function cursorFollow(evt:MouseEvent):void
{
if (!mouse.visible)
{
mouse.visible = true;

}
mouse.x = mouseX;
mouse.y = mouseY;
//evt.updateAfterEvent();
}

//子弹的初始位置
var bulletx:Number=275
var bullety:Number=400
//子弹运动速度,相当图8.37中的AB长度
var speed:Number=5

stage.addEventListener(MouseEvent.CLICK,shoot)
function shoot(e:MouseEvent):void
{
//根据鼠标坐标和初始位置计算弧度,相当图8.35中的角BAC
var radian:Number=getRadian(bulletx,bullety,this.mouseX,this.mouseY)
//从库中创建子弹
var bullet:Bullet=new Bullet()
//初始化子弹位置
bullet.x=bulletx
bullet.y=bullety
//根据余弦函数计算子弹的x速度,相当于计算图8.35中的AC
bullet.spdx=Math.cos(radian)*speed
//根据正弦函数计算子弹的y速度,相当于计算图8.35中的BC
bullet.spdy=Math.sin(radian)*speed
//注册enterFrame事件
bullet.addEventListener(Event.ENTER_FRAME,bulletMove)
e.target.addChild(bullet)
}

function bulletMove(e:Event):void
{
//获取子弹的引用
var obj:* = e.target;
//子弹的坐标加上速度,实现运动
obj.x+=obj.spdx
obj.y+=obj.spdy
//如果显示实例不在舞台内
if(obj.y<0||obj.x<0||obj.x>550||obj.y>400)
{
//移除enterFrame事件
obj.removeEventListener(Event.ENTER_FRAME,bulletMove)
//从显示列表删除
stage.removeChild(obj)
}
}

//计算弧度
function getRadian(x1:Number,y1:Number,x2:Number,y2:Number):Number
{
var tx:Number=x2-x1
var ty:Number=y2-y1
var radian:Number = Math.atan2(ty, tx)
return radian
}

posted @ 2012-11-06 21:54  流年亂了浮生  阅读(155)  评论(0编辑  收藏  举报