我有一个圆盘精灵,它总是绕着它的中心旋转,像一个轮子一样旋转。我想在3d空间中重新定位它并保持其旋转。我曾尝试弄乱网格属性,skewX / Y,相机,我能找到的一切,但我无法弄清楚如何通过旋转来产生这种效果。
答案 0 :(得分:2)
几条路线:
计算出数学以获得旋转值的正确偏斜值。 (我不知道我的头脑,对不起,虽然你可以从选项-2反向工程)
您可以对CCSprite
进行子类化,覆盖CCNode
的{{1}}方法,并且必须首先应用倾斜,然后旋转,以获得所需的效果。这使您无法计算出适当的偏斜计算,而代价是一个相当笨重的精灵子类。
从- (CGAffineTransform)nodeToParentTransform
,您可以了解其当前的运营顺序:
CCNode.h
以下是该方法的黑客攻击版本,首先是偏斜:(缺少 /* Order in transformations with grid disabled
-# The node will be translated (position)
-# The node will be rotated (rotation)
-# The node will be skewed (skewX, skewY)
-# The node will be scaled (scale, scaleX, scaleY)
-# The node will be moved according to the camera values (camera)
... etc. */
中原始方法中的优化
CCNode.m
答案 1 :(得分:2)
HachiEthan的答案很好,并允许您在保持旋转的同时使用skewX / skewY设置透视。但是,我认为使用相机设置透视图更容易。在这种情况下,您可以通过将旋转精灵包装在父节点中来实现效果。
例如:
CCNode *node3D;
CCSprite *sprite;
node3D = [CCNode node];
sprite = [CCSprite spriteWithFile:@"HugeDisc_Red.png"];
//[[node3D camera] setCenterX:15 centerY:45 centerZ:40]; // You can use the camera
[node3D setSkewX:25]; // Skew also works if you prefer it
[node3D setRotation:145]; // Skew + rotation looks pretty convincing
[node3D setPosition:ccp(middleX+105, middleY-110)];
[node3D setIgnoreAnchorPointForPosition:NO];
[node3D setAnchorPoint:ccp(0.5f,0.5f)];
[sprite setPosition:ccp(node3D.contentSize.width/2, node3D.contentSize.height/2)];
[sprite runAction:rotate];
[node3D addChild:sprite];
归根结底,这取决于偏好。你想为此制作一个自定义的精灵对象吗?你喜欢相机还是歪斜?根据您的需求,其中一个应该符合您的需求。