横向模式在spritekit游戏中无法正常工作

时间:2013-12-11 11:57:12

标签: ios xcode sprite-kit

我在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)];
}

}

保持这种速度。 我一直在纵向模式测试,一切都很好,但我的游戏是在横向模式,所以最后我已经将游戏阻挡到横向模式,现在我在横向模式下测试它,我遇到了麻烦,因为当我在跳跃中向前移动手指时,没有任何反应。而不是这个,我必须向上移动我的手指,以获得这种运动。我确定我错过了横向模式的一些基本配置。任何帮助将是apreciated

1 个答案:

答案 0 :(得分:8)

这实际上是SpriteKit游戏中的常见问题。发生这种情况是因为viewDidLoad实际上在应用检查设备方向之前运行。您可以将viewDidLoad替换为设备方向检测后运行的viewWillLayoutSubviews来解决问题。例如,您可以使用以下内容替换默认的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