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

Posted

技术标签:

【中文标题】横向模式在 spritekit 游戏中无法正常工作【英文标题】:landscape mode don't work properly in spritekit game 【发布时间】:2013-12-11 11:57:11 【问题描述】:

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



保持这个速度。 我一直在纵向模式下测试,一切正常,但我的游戏是横向模式,所以最后我把游戏阻止到横向模式,现在我在横向模式下测试它,我遇到了麻烦,因为当我在跳跃中向前移动手指时,什么也没有发生。而不是这个,我必须向上移动我的手指,才能得到那个动作。我确定我的横向模式缺少一些基本配置。任何帮助将不胜感激

【问题讨论】:

您是否尝试将 X 坐标更改为 Y 坐标?还要记住 locationInNode 使用坐标系,原点位于左下角,而不是 UIViews 中的左上角。 【参考方案1】:

这实际上是 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

【讨论】:

以上是关于横向模式在 spritekit 游戏中无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

SpriteKit 默认横向

Spritekit 碰撞检测无法正常工作

SpriteKit碰撞检测无法正常工作

SpriteKit横向不起作用

SpriteKit/Obj-C - 以nodesatPoint开始触摸重启游戏

Sprite Kit 游戏:纵向模式下的世界,横向模式下的战斗?