2014-01-06 33 views
0

我有CCNode *parentNode,它有CCNode *childNode1CCNode *childNode2。我试图用CCMoveTo动作移动parentNode,但是请留下childNode2哦同样的位置。cocos2d:在父节点和子节点上运行不同的操作

下面的代码

[parentNode runAction:[CCMoveTo actionWithDuration:0.5f position:ccp(x, y)]]; 
[childNode2 runAction:[CCMoveTo actionWithDuration:0.5f position:ccp(-x, -y]]; 

并不能帮助我实现我的目标。

它甚至可以解决我的问题吗?

回答

1

当然这是可能的。你的问题是父母和孩子有不同的坐标系,因此他们的变量xy不一样。我确定父母移动到正确的位置,而孩子不移动。所以你需要的是为孩子计算正确的xy值。

或者您可以使用CCMoveBy。它看起来像这样:

float x_diff = x - parentNode.position.x; 
float y_diff = y - parentNode.position.y; 

[parentNode runAction:[CCMoveTo actionWithDuration:0.5f position:ccp(x, y)]]; 
[childNode2 runAction:[CCMoveBy actionWithDuration:0.5f position:ccp(-x_diff, -y_diff)]]; 
+0

哦,我用坐标转换。错误我没有帮助。其实,'''[childNode2 runAction:[CCMoveTo actionWithDuration:0.5f position:[parent convertToNodeSpace:CGPointZero]];'''不移动孩子到{0; 0}。无法弄清楚,为什么如此。 – d12frosted

+1

你的意思是它不会将孩子移动到父母坐标系中的{0,0}? –

+0

是的,父母的{0,0}。哦,我想我看到了这个问题。它计算新位置,但不计算偏移量。所以在时间= 0时,PointZero是一个,在动画结束时,PointZero实际上并不是父代的{0,0}。 – d12frosted

相关问题