我在spriteKit中开始了一个平台游戏,我对横向模式有一点问题.
当我和我的英雄一起跳跃时,我会使用
当我和我的英雄一起跳跃时,我会使用
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
而当英雄它在空中并与墙壁或任何物体相撞并错过他的速度时,我就使用了
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; CGPoint positionInScene = [touch locationInNode:self]; SKSpriteNode *touchedNode = (SKSpriteNode *)[self nodeAtPoint:positionInScene]; CGPoint posicionHero = [self.world childNodeWithName:@"hero"].position; SKSpriteNode *touchHero = (SKSpriteNode *)[self nodeAtPoint:posicionhero]; //pragma mark -hero movement in the air if ((touchedNode != touchHero) && (positionInScene.x > [self.world childNodeWithName:@"hero"].position.x)) { [[self.world childNodeWithName:@"hero"].physicsBody applyImpulse:CGVectorMake(5,0)]; } if ((touchedNode != touchHero) && (positionInScene.x < [self.world childNodeWithName:@"hero"].position.x)) { [[self.world childNodeWithName:@"hero"].physicsBody applyImpulse:CGVectorMake(-5,0)]; } }
保持这种速度.
我一直在纵向模式测试,一切都很好,但我的游戏是在横向模式,所以最后我已经将游戏阻挡到横向模式,现在我在横向模式下测试它,我遇到了麻烦,因为当我在跳跃中向前移动手指时,没有任何反应.而不是这个,我必须向上移动我的手指,以获得这种运动.我确定我错过了横向模式的一些基本配置.任何帮助都会被贬低
解决方法
这实际上是SpriteKit游戏中的常见问题.发生这种情况是因为viewDidLoad实际上在应用程序检查设备方向之前运行.您可以通过使用viewWillLayoutSubviews替换viewDidLoad来修复它,该视图将在检测到设备方向后运行.例如,您可以使用以下命令替换默认的SpriteKit viewDidLoad:
- (void)viewWillLayoutSubviews { [super viewWillLayoutSubviews]; // Configure the view. SKView * skView = (SKView *)self.view; if (!skView.scene) { skView.showsFPS = YES; skView.showsNodeCount = YES; // Create and configure the scene. SKScene * scene = [MyScene sceneWithSize:skView.bounds.size]; scene.scaleMode = SKSceneScaleModeAspectFill; // Present the scene. [skView presentScene:scene]; } }
有关更多信息,请查看以下来源:
UIViewController returns invalid frame?
http://www.raywenderlich.com/42699/spritekit-tutorial-for-beginners