子弹按照角度飞行 出了问题

红色子弹 是预制体 点击一下、 生成一个 ,并且起始位置就是点击这里发射按钮的位置。 本来子弹是横着放的 现在让他已-20度角的角度斜着直线飞,

但是这个明显不是-20度 而且 飞行的轨迹y也不对 。我是创建了子弹预制体,然后每个子弹 都执行updat方法 方法如下:

我现在有x轴 让他匀速行驶 还有角度 根据 正切公式得到y轴 哪里不对了 为啥子弹飞行的轨迹 感觉根本不是-20度 像是-45度 而且发射的时候 子弹本身也没连成一条直线

我写的demo 请大家帮我看看NewProject_14.zip (2.3 MB)

我才接触cocos 半个月 被老板 零时抓来的 其他问题都解决了 就剩这一个了 如果解决不了 老板就要开了我了

*****

试试这个
getAngle(fmPos, toPos) {
var vec = cc.v2(fmPos).sub(toPos);
var angle = -Math.atan2(vec.y, vec.x) * 180 / Math.PI - 90;
return angle;
}

  1. 这个明显就是-20度呀 你可以放到场景编辑器里自己试着看看
    2.y的轨迹不对说明你的算法有点问题呀

let pos:cc.Vec2 = this.node.position;
let rad:number =Math.PI * (90 - this.node.rotation) / 180;
let insX:number = Math.cos(rad)*this.speed;//x增量
let insY:number = Math.sin(rad)*this.speed;//y增量
pos.addSelf(cc.v2(insX, insY));
this.node.position = pos;

你们老板抓你来为什么又要开你?

2赞

var radian = drgee*Math.PI/180;
var vy = Math.tan(-radian)*vx;
1 角度转弧度写反了
2 数学上的角度逆时针增加 rotation 是顺时针增加

我算的好像没错啊 大哥能帮我改改吗

角度转弧度你写错了啊, degree*PI/180才对

搞不定 就要拿我开刀 还是我太菜了

我试了你的方法 ok的 ,我知道是degree*PI/180 , 但是 我一直在想 都是乘除 谁先谁后 应该都一样把 ,比如 6乘5除以3 和6除以3乘以5 值都是一样的 但是按照你的方式做确实没问题 这是为什么

我试了 可以的 第一次知道 这个 牛逼

但是角度越大 速度怎么变得越快了

但是角度越大 速度怎么变得越快了啊

let dist = speeddt;
node.x += dist
cos(radius);
node.y += dist *sin(radius);

var radian = drgee*Math.PI/180;

这样就没问题了 我不明白的是 为什么 要dist sin(radius); distcos(radius); 我知道
难道dist 等于图中的斜边c 是这样的吗 这个我就不太理解了

第一,var radian = drgee*Math.PI/180;
第二,this.node.rotation表示与y正半轴的夹角,你试试看this.node.rotation = 90 - drgee;
第三,var vy = vx / Math.tan(radian);(这条有可能不对,你尝试一下)
第四,子弹速度应该用线速度,即合速度,update移动的时候再把速度拆分成x和y方向的使用。