求助:如何让一颗子弹追踪一个移动的敌人
flash吧
全部回复
仅看楼主
level 1
天堂水水 楼主
现有一个敌人叫mcA吧,它是不断移动的,有一颗子弹叫mcB吧,子弹的目标就是敌人mcA,要一直跟踪着敌人,直到击中mcA为止,代码要如何写?
2011年06月13日 14点06分 1
level 1
天堂水水 楼主
没人啊~~搞了几天了,还是搞不出来,求助啊
2011年06月13日 14点06分 2
level 1
天堂水水 楼主
有没人啊,给个思路也行啊
2011年06月13日 15点06分 3
level 5
不知这个是否符合你的要求.
onEnterFrame = function () {
     mcB_mc._x = mcB_mc._x+(mcA_mc._x-mcB_mc._x)/2;
     mcB_mc._y = mcB_mc._y+(mcA_mc._y-mcB_mc._y)/2;
};
2011年06月13日 16点06分 4
level 4
可以用if语句判断出子弹的位置 然后“跟进”敌人
子弹_speed 是子弹的速度 可以自己设置 如果需要子弹越来越快 加个 子弹_speed++
onEnterFrame = function () {
if(子弹._x<敌人._x){子弹._x+=子弹_speed}
else if(子弹._x>敌人._x){子弹._x-=子弹_speed}
if(子弹._y<敌人._y){子弹._y+=子弹_speed}
else if(子弹._y>敌人._y){子弹._y-=子弹_speed}
};
2011年06月14日 04点06分 5
level 8
记得很多网站开场有个SKIP跟随鼠标,思路差不多。
2011年06月14日 06点06分 6
level 1
子弹—》楼主
2011年06月14日 06点06分 7
level 5
“子弹._x+=子弹_speed,子弹._y+=子弹_speed”使子弹位置向右下移动,而不会跟进敌人。
用“子弹与敌人之间的距离缩短”这样的思路才能使子弹跟进敌人。
2011年06月14日 07点06分 8
level 1
听不懂什么事什么 - -
2011年06月29日 07点06分 11
level 4
这个好像叫撞击事件吧,最简单的就是 MCA与MCB的坐标(不是点,是范围)重合即可判定。
2011年07月14日 06点07分 12
level 7
四楼和六楼 我觉得这样的方法不妥。
鼠标跟随的核心思想是距离远速度快 距离近 速度慢。一直往目标前进 但永远到达不了目标。
2011年07月24日 10点07分 13
level 7
不应该通过判断方向进行跟进,这样子弹最对只能往四个方向运动。
假设子弹是匀速,那么他应该有个标量速度。假设是10
var speed:Number = 10;
然后是获取子弹指向目标的方向向量,而不是五楼所说的判断目标在子弹的上下左右。
var vectorX:Number = 敌人._x - 子弹._x;
var vectorY:Number = 敌人._y - 子弹._y;
然后 通过速度乘上方向来获取子弹应该运动的速度
var speedX:Number = speed * vectorX;
var speedY:Number = speed * vectorY;
之后将速度累计到移位上就ok了
子弹._x += speedX;
子弹._y += speedY;

2011年07月24日 10点07分 14
level 7
如果要进一步提高游戏性,可以采用变速跟踪,子弹受到一个指向目标的不变力
var speedX:Number = 0;
var speedY:Number = 0;
onEnterFrame = function () {
var force:Number = 10;
var vectorX:Number = 敌人._x - 子弹._x;
var vectorY:Number = 敌人._y - 子弹._y;
var forceX:Number = force * vectorX;
var forceY:Number = force * vectorY;
speedX += forceX;
speedY += forceY;
子弹._x += speedX;
子弹._y += speedY;
}

2011年07月24日 11点07分 15
level 1
这属于什么领域的啊 我看不懂
2011年08月26日 05点08分 17
level 4
哎,不知道
2011年08月28日 07点08分 19
level 1
[拍砖]
2011年09月08日 14点09分 20
level 5
。[瀑布汗~]我什么都不懂,只是路过、
2011年09月09日 06点09分 22
level 4
不应该通过判断方向进行跟进,这样子弹最对只能往四个方向运动。
你自己试下是不是只能往四个方向运动
你后面那一大堆东西都是变速而已 人家问的只是要如何让子弹跟踪并追上敌人 扯那一大堆 拐弯抹角 最后还是一样的道理 我把你的变动下:
子弹._x += speedX;
speedX ==speed * vectorX;
vectorX==敌人._x - 子弹._x;
==>
子弹._x += speed *(敌人._x - 子弹._x)
这样的等式应该是谁都看得懂吧
而SPEED是常量 所以你还不是和我的一模一样? 说什么向量 物体运动难不成还有标量不成?...糊弄谁呢...

2011年09月10日 09点09分 23
level 2
把mcA mcB的代码封成一个包 做一个类 使用构造函数 构造一个关于A-B的框架 在用类创建的对象回调类里面的public类函数 具体的实现部分就略了
2011年09月10日 12点09分 24
level 1
AS3.0的话,可以用Timer侦听器来延迟子弹的追踪速度,也就是Timer每跳一次,子弹就改变一下坐标,关键在于子弹如何改变坐标,那就是一定要在Timer事件中检测敌人的坐标了嘛,你可以敌人的中心点为追踪坐标,让子弹就每次在x 和 y的方向上 加一个值,这个值可以是 : (敌人x-子弹x)/100同时 (敌人y-子弹y)/100 有个难点是怎么知道敌人在子弹的左 还是右 或是 上还是下? 那就用 敌人x<子弹x 判定敌人在左 类推。。。有了方位,你就知道应该把子弹的X坐标是加上一个值呢还是减去一个值了。最后timer事件中 写上“碰撞”检测,一但“碰撞”就OVER了。如果不是 AS3.0 , 你可以用另一个MovieClip里面有3帧 在某一帧上 写 那些循环检测的代码,这个影片剪辑就是专门来代替Timer事件的. flash 早期版本中这种方法非常重要且有效
2011年09月10日 15点09分 25
1 2 3 4 5 尾页