首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转换立场与关于anchorPoint?

转换立场与关于anchorPoint?
EN

Stack Overflow用户
提问于 2013-09-28 10:08:08
回答 1查看 313关注 0票数 0

我有一个雪碧,它被添加到CCSpriteBatchNode中。然后我确定了精灵的位置,改变锚点的方式,这样我就可以围绕着那个点旋转精灵。

层次结构是雪碧<- batchNode <-场景

基本上,雪碧正在移动,但它的.position属性并没有改变。我需要在转变后得到精灵的真正位置。所以我试着用

代码语言:javascript
复制
CGPoint p = sprite.position;
p = [sprite convertToWorldSpace:p];

但是,这个位置和我在现场看到的精灵的位置不匹配。

EN

回答 1

Stack Overflow用户

发布于 2013-09-28 12:25:19

Sprite位置是CCSprite中间的一个点(默认情况下)。改变锚点使精灵移动,使点相对于精灵移动,但对于世界空间则保持不变。例如,将sprite(例如正方形)的锚点更改为ccp(0,0)将移动该正方形,使其左下角顶点位于正方形中心点最初所在的位置。因此,虽然广场似乎是“重新定位”,但它的位置(属性)保持不变(不受锚点变化的影响),除非具体改变。

编辑

如果说精灵的实际位置,你指的是它的中点在它的锚点被改变之后,那么它可以考虑到应用到它上的两个变换,即平移和旋转。

首先,我们关注翻译

你的精灵移动了:

代码语言:javascript
复制
CGPoint translation;
translation.x =  sprite.contentSize.width x (0.5 - sprite.anchorPoint.x);
translation.y =  sprite.contentSize.height x (0.5 - sprite.anchorPoint.y);    

现在我们可以适应旋转的变化。

将“平移”点转换为极坐标

代码语言:javascript
复制
#define RADIANS_TO_DEGREES(radians) ((radians) * (180.0 / M_PI))
r = ccpDistance(translation,ccp(0,0));
ø = RADIANS_TO_DEGREES(atan2(translation.x,translation.y)); //i take x/y here as i want the CW angle from y axis.

如果你用"D“度旋转你的雪碧:

代码语言:javascript
复制
 ø = ø + D;
 CGPoint transPositionAfterRotation = ccp(r * cos(ø),r * sin(ø) );

CGPoint realPosition =  ccp(sprite.position.x + transPositionAfterRotation.x, sprite.position.y +transPositionAfterRotation.y)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19065724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档