如题,我查找了cocos2d-js相关文档,没有找到可以让精灵做圆周运动的方法,不知道各位有人遇到这样的问题没有?怎么解决的呢?
是不是需要自己编写圆周运动的方法?
如果是的话,该怎么样做呢?烦请指点一二。
如题,我查找了cocos2d-js相关文档,没有找到可以让精灵做圆周运动的方法,不知道各位有人遇到这样的问题没有?怎么解决的呢?
是不是需要自己编写圆周运动的方法?
如果是的话,该怎么样做呢?烦请指点一二。
两种方法
根据圆的方程x=rcos(a) , y=rsin(a) 改变精灵的坐标就行,角度a用定时器改变
将精灵放在一个Node中,位置设成(r,0),然后再用Rotate动作旋转Node。这种方式就像月亮绕着地球转一样,始终是同一面朝着圆心
谢谢你的回答,第二个方法似乎更适合我这个游戏,
将精灵放在一个Node中,位置设成(r,0)
如果我把原Sprite的锚点设置成(r,0),是不是会实现跟你说的一样的效果?
公司这边没有测试环境,不然我会自己试一遍
锚点范围只有0.0~1.0
搜噶,忘记了,哈哈,回去试试
简化,只要你的圆的position绕着某一个点定时旋转即可。
请问 第二个怎么设置Node围绕旋转的点?
我发现旋转始终是绕着(0,0),即使修改Node的位置和锚点也没用
node的坐标位置就是旋转的圆心。
var node1 = cc.Node.create();
node1.attr({
x: size.width *0.5,
y: size.height *0.5
});
this.addChild(node1, 1);
cc.log("node1:%f, %f", node1.x, node1.y);
var sprite1 = new cc.Sprite(res.CloseNormal_png);
sprite1.attr({
x: 200,
y: 0
});
node1.addChild(sprite1, 0);
node1.runAction(
cc.RepeatForever(cc.RotateBy(4, 360))
);
/**
* 圆运动
* @param {Number} duration
* @param {cc.Node|cc.p} dot 圆心点坐标或者node
* @param {Number} 半径 如果为负数, 反时钟方向
* @param {Number} 旋转角度
* @returns {cc.CardinalSplineTo}
*/
cc.circleBy = function(duration, dot, r, angle){
var dp = angle || 20, dpr = 360 / dp, ary = ];
r = r || 20;
if(r < 0) dpr = -dpr;
r = Math.abs(r) * dg.scale;
for(var i = 0; i < dp; i ++){
ary.push(cc.p(Math.sin(dpr * i * cc.RAD) * r + dot.x, Math.cos(dpr * i * cc.RAD) * r + dot.y));
}
ary.push(ary);
return cc.cardinalSplineTo(duration, ary, 0);
};
var spr = new cc.Sprite("xxx.png");
spr.setPosition(100, 100);
spr.runAction(cc.circleBy(1, spr, -20).repeatForever());
提示1.node自刷新
提示2.不要使用动画,而要不断的修改node的坐标
提示3.圆周运动,一周的时间、速度、半径之间的公式
提示4.封装
秒啊,加载到node上然后旋转,可怜我当时还自己重载ActionInterval