2015-03-29 4 views
0

Я делаю игру с помощью SpriteKit, а в главном меню этой игры находится SK3DNode, который содержит SCNScene, предназначенный для размещения вращающейся планеты. Я установил его таким образомSCNSphere не вращается правильно

//create scene 
SCNScene *planetScene = [[SCNScene alloc] init]; 
SCNSphere *planet = [SCNSphere sphereWithRadius:2.0]; 
planet.firstMaterial.diffuse.contents = [UIImage imageNamed:@"Planet_2_d.png"]; 
SCNNode *plNode = [SCNNode nodeWithGeometry:planet]; 
[planetScene.rootNode addChildNode:plNode]; 

//animate planet 
CABasicAnimation *rotationAnimation = [CABasicAnimation animationWithKeyPath:@"rotation"]; 
rotationAnimation.toValue = [NSValue valueWithSCNVector4:SCNVector4Make(0, 1, 0, M_PI * 2)]; 
rotationAnimation.duration = 6; // One revolution in ten seconds. 
rotationAnimation.repeatCount = FLT_MAX; // Repeat the animation forever. 
[plNode addAnimation:rotationAnimation forKey:nil]; // Attach the animation to the node to start it. 

//create and add sprite kit node 
SK3DNode *planetNode = [[SK3DNode alloc] initWithViewportSize:CGSizeMake(125, 125)]; 
planetNode.scnScene = planetScene; 
planetNode.position = CGPointMake(loadGameButton.position.x - 200, CGRectGetMidY(self.frame)); 
planetNode.autoenablesDefaultLighting = YES; 
planetNode.playing = YES; 

id s1 = [planetNode valueForKey:@"_scnRenderer"]; 
NSLog(@"%@", s1); 

[self addChild:planetNode]; 

Это работает, как и планировалось, за исключением того, что планета больше вращается. Помимо поворота, он также увеличивает и уменьшает масштаб. Я не вижу ничего в приведенном выше коде, который заставит его вести себя таким образом. Как я могу заставить планету просто вращаться, а не увеличивать масштаб?

+2

Вы пытались добавить камеру в 'SCNScene'? – rickster

ответ

1

Эта проблема была решена путем добавления камеры в сцене, как этот

SCNCamera *camera = [SCNCamera camera]; 
camera.xFov = 0; 
camera.yFov = 0; 
camera.zNear = 0.0; 
camera.zFar = 10.0; 
SCNNode *cameraNode = [SCNNode node]; 
cameraNode.camera = camera; 
cameraNode.position = SCNVector3Make(0, 0, 3); 
[planetScene.rootNode addChildNode:cameraNode]; 

planetNode.pointOfView = cameraNode; 
Смежные вопросы