子弹射程

我的子弹是这么写的(这个脚本作用在子弹上),我想让这个子弹飞一段距离就让对象池回收,怎么算出来这个子弹飞的距离。
image
往后应该怎么写,

写一个回收条件,比如飞出屏幕

这个子弹飞的距离怎么算,,,

子弹生成的时候调用一个init 子弹脚本有一个属性startPos 然后你在go里面把当前的位置减去startPos并且得到这个距离(不仅仅是生成的时候,每次从对象池中取出来也要初始化startPos)
@@V$S_~BBY4%WN0NSRIV{1

1.首先这个子弹是匀速移动的,在go()里边弄个累加器,每一帧累计一下距离,如果大于你给的固定回收距离,就回收了,放对象池里边。
2.要不就移动出屏幕给回收了,这个就不用判断子弹移动距离,只用判断子弹位置跟屏幕四边的位置做判断,出屏幕回收就行了。

对,我也是这个思路,然后不知道怎么下手,帧数这很迷,我是个小白。。。。

这个方式太多了,除了判断距离,你还可以判断飞行时间,距离除以速度,这个判断比向量运算简单点。

dt就是每帧执行的时间,累加起来就是运行到当前帧的总时间。

姐,我是个小白,你说的很多我都不是很明白 :sob:

思路是这么个思路,操作无从下手,我现在是这么个情况 :pleading_face:

啊这 这不明白 可以先找点简单的做做再回来做这个呗 慢慢来 我这已经把代码帖到你只要做超过距离以后的对象池操作了

dt就是时间,你给的1000就是速度,速度*时间就是距离

这个点不吃透了,以后类似的也不会啊,不懂就问 :eyes:

实在想不通,可以直接判断坐标来回收,当飞出屏幕外就进行回收

这个我也知道,代码不会写。。。。

怎么判断坐标,通过世界坐标算吗?除了屏幕四角坐标知道之外,其余的坐标。。。。。感觉还是算距离更稳一点、

let w = (this.canvas.width / 2 + this.node.width / 2)
let h = (this.canvas.height / 2 + this.node.height / 2)
this.node.x > w || this.node.x < -w || this.node.y > h || this.node.y < -h
可以精确到完全飞出屏幕外的一帧就回收
不过根据不同的适配方案,可能会有所不同,具体就看你怎么适配了

可行,但是我还是想知道距离怎么算,老哥能帮帮吗。。。

坐标判断:只要坐标系原点在同一位置的,都可以直接进行运算。

看不懂啥意思。。。老哥能举个例子说一下吗,刚入门,很多地方理解方式不一样,我的逻辑思维能力还没转过来

那就创建个记录上一次坐标的参数
private last_pos: cc.vec2 = null
private dis: number = 0;

go里面写
if(this.last_pos){
let now_dis = this.node.getposition().sub(this.node.getposition()).mag();
this.dis = this.dis + now_dis;
}
this.last_pos = this.node.getposition()

now_dis就是每帧移动的距离
没测试过,你试试