初学者真心求教, 我写了一个简单的射箭游戏,箭靶是在旋转的,我在检测到箭碰撞到箭靶后,停止箭的运动,并把箭设为箭靶的子节点,但是这个时候箭就跑到箭靶的锚点去了,我该怎么让箭停在接触箭靶的位置呢,并让箭跟随箭靶旋转,还有就是箭显示在了箭靶的前面,怎么让箭靶遮挡住箭的一部分呢?
1坐标转换。当箭头碰到箭靶的时候,把箭头坐标a转换为世界坐标b,再把世界坐标b转换到箭靶坐标c。
2算完坐标后,移除这支箭,贴上一张插入的不带箭头图片,把图片坐标设为c,把图片加入到箭靶节点中
1.转换坐标我
var newWorldVec2AR = this.node.convertToWorldSpaceAR(cc.v2(this.node.x, this.node.y));
this.node.parent = other.node;
var newArrowVec2 = other.node.convertToNodeSpaceAR(newWorldVec2AR);
this.node.setPosition(newArrowVec2);
这样转换出来,感觉不对。
是不是像飞刀这样的游戏? 你可以根据击中靶子的时刻,根据靶子的旋转角度,计算出此刻箭在靶子上固定后应该具有的旋转和应该所在的位置,将箭add到靶子的子节点上,设置成你刚刚计算出来的角度和位置
加一个随靶运动的集合。。。。
是啊,是啊,就是这个意思。
不是太懂,能详细说说吗?
//命中靶子
HitTarget(target:Target)
{
this.isFly=false;
//变更父节点
this.node.parent=target.node;
//计算位置和角度
this.node.rotation=-target.node.rotation;
let pos:cc.Vec2=cc.Vec2.UP.rotate(SelfUtility.DegRoRad(180-this.node.rotation));
pos.mulSelf(GameData.instance.targetRadius-75);
this.node.setPosition(pos);
//设置层级
this.node.setSiblingIndex(0);
let index=GameManager.instance.flyingKnife.indexOf(this);
if (index!=-1)
{
GameManager.instance.flyingKnife.splice(index,1);
}
target.BeHit(this);
}
这个是箭命中靶子的时候的代码
我发现在unity里面 把箭直接设置成靶子的子节点,箭的位置和角度,就保持在设置节点的那一刻,但是在creator里面好像就不行,不知道我自己写错了,还是不支持,反正没有深究。
我的做法就是当命中靶子的那一刻,根据靶子的旋转角度,计算出箭此刻如果作为靶子的子节点,应该具有的旋转和角度,直接计算出来,赋值上去就OK
你用的ts写的吗?我是js的。
//计算位置和角度
this.node.rotation=-target.node.rotation; 这句话为什么要加一个‘-’号呢?
SelfUtility.DegRoRad的具体动作是什么呢?
有没有负号主要是因为我原图朝向问题,这个不用在意,思路就是根据靶子的旋转角 计算箭头的位置和角度
下面那个是角度转弧度,我刚刚开始用creator 写的时候没有发现原来cc. 里面有这个功能。。。。。
非常感谢,cc.里面的这个功能的API是什么啊?我查了半天没有查到。
能发一下demo看一下吗