flash as3.0关于碰撞的检测
我写了两个类文件一个是飞机的类文件一个是子弹的类文件,子弹要调用好多,怎么检测他们之间的碰撞,是在飞机类里写还是在主舞台写?还请高手指点详细方法...
我写了两个类文件 一个是飞机的类文件 一个是子弹的类文件,子弹要调用好多,怎么检测他们之间的碰撞,是在飞机类里写还是在主舞台写?还请高手指点详细方法
展开
3个回答
展开全部
我觉得应该在主舞台写,毕竟这涉及到两个类
一楼的思路是对的,就是语法有点问题,而且碰撞检测可以考虑用hitTestObject或hitTestPoint
我之前给同学写过一个游戏,大量饼干人从右到左飞,玩家要碰到所有饼干人,不然就会减生命值,你可以参考一下这段代码(主要是懒得重新写了,以前写的这个注释很好)
这里面碰撞和删除的代码都有了
要注意if(bmList.length>0)这句,如果忘了这个条件,屏幕上没有子弹(数组为空)的时候就会出问题
addEventListener(Event.ENTER_FRAME,always);
function always(e:Event):void{
//当屏幕上有饼干人的时候
if(bmList.length>0){
//控制所有的饼干人
for(i=0;i<bmList.length;i++){
//饼干人向左飞
bmList[i].x -= 5;
//当饼干人飞出屏幕的时候
if(bmList[i].x<-100)
{
//把饼干人删掉
bg.removeChild(bmList.splice(i,1)[0]);
//生命值减一
life--;
//更新显示生命值的text box
ts.life.text = "Life: "+life;
}
//如果玩家碰到饼干人
if(player.hitTestObject(bmList[i])){
//把饼干人删掉
bg.removeChild(bmList.splice(i,1)[0]);
//分数加一
mark++;
//更新显示分数的text box
ts.mark.text = "Mark: "+mark;
}
}
}
}
以上是我程序的一部分,原代码太长,这里就不贴声明变量和创建mc的部分了
如果有什么不懂的可以再问
一楼的思路是对的,就是语法有点问题,而且碰撞检测可以考虑用hitTestObject或hitTestPoint
我之前给同学写过一个游戏,大量饼干人从右到左飞,玩家要碰到所有饼干人,不然就会减生命值,你可以参考一下这段代码(主要是懒得重新写了,以前写的这个注释很好)
这里面碰撞和删除的代码都有了
要注意if(bmList.length>0)这句,如果忘了这个条件,屏幕上没有子弹(数组为空)的时候就会出问题
addEventListener(Event.ENTER_FRAME,always);
function always(e:Event):void{
//当屏幕上有饼干人的时候
if(bmList.length>0){
//控制所有的饼干人
for(i=0;i<bmList.length;i++){
//饼干人向左飞
bmList[i].x -= 5;
//当饼干人飞出屏幕的时候
if(bmList[i].x<-100)
{
//把饼干人删掉
bg.removeChild(bmList.splice(i,1)[0]);
//生命值减一
life--;
//更新显示生命值的text box
ts.life.text = "Life: "+life;
}
//如果玩家碰到饼干人
if(player.hitTestObject(bmList[i])){
//把饼干人删掉
bg.removeChild(bmList.splice(i,1)[0]);
//分数加一
mark++;
//更新显示分数的text box
ts.mark.text = "Mark: "+mark;
}
}
}
}
以上是我程序的一部分,原代码太长,这里就不贴声明变量和创建mc的部分了
如果有什么不懂的可以再问
善思光电科技
2023-08-29 广告
2023-08-29 广告
X-ray无损检测是一种利用X射线源发射X射线,通过X射线探测器检测物体的内部结构,以检测物体的外部形状和内部结构。它可以在医学、工业和其他领域应用,用于检测物体的形状,内部构造,或者检测物体内部的缺陷。X-ray无损检测不仅可以对不可见焊...
点击进入详情页
本回答由善思光电科技提供
展开全部
我的解决办法是:
先定义一个数组:var aaa:array
然后在你把子弹复制到舞台上的时候:
aaa.push(你复制出来的mc) 意思就是一个mc被数组里面的一个元素装起来了
那么你控制数组里面的一个元素 就等于控制了一个mc
比如说:aaa[0].x=500 就是你第一个复制出来的 mc的x坐标 等于 500
如果你是在进入帧的时候判断的话,那么就是:
this.addEventListener(Event.ENTER_FRAME, fun);
function fun(event:Event):void{
for(var i:string in aaa){//这里的意思是aaa数组每个元素都经历一遍
var n=Math.abs(飞机.x-aaa[i].x)//绝对值
var m=Math.abs(飞机.y-aaa[i].y)
if(n<10&&m<10){//飞机和子弹的距离同时小于10,就算它们碰撞吧
//这里面就是 碰撞之后你想做的事情了,我猜你要做的事情是把复制出来的子弹移除,呵呵
}
}
}
先定义一个数组:var aaa:array
然后在你把子弹复制到舞台上的时候:
aaa.push(你复制出来的mc) 意思就是一个mc被数组里面的一个元素装起来了
那么你控制数组里面的一个元素 就等于控制了一个mc
比如说:aaa[0].x=500 就是你第一个复制出来的 mc的x坐标 等于 500
如果你是在进入帧的时候判断的话,那么就是:
this.addEventListener(Event.ENTER_FRAME, fun);
function fun(event:Event):void{
for(var i:string in aaa){//这里的意思是aaa数组每个元素都经历一遍
var n=Math.abs(飞机.x-aaa[i].x)//绝对值
var m=Math.abs(飞机.y-aaa[i].y)
if(n<10&&m<10){//飞机和子弹的距离同时小于10,就算它们碰撞吧
//这里面就是 碰撞之后你想做的事情了,我猜你要做的事情是把复制出来的子弹移除,呵呵
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Animate如何实现元件间碰撞检测(AS3)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询