SpriteKit如何创建和过渡到不同场景(Swift语言)

酸味

我已经创建了一个带有精灵工具包的游戏,但是当游戏启动时,它直接进入了游戏。如何在屏幕上按标签或在游戏过程中通过联系人实现不同的场景,例如主菜单和游戏,以及如何在场景之间进行过渡。

本杰明

您似乎没有研究过Apple的文档。他们为SpriteKit提供了出色的指南。此外,RayWenderlich.com上spriteKit类别内的教程也非常出色。我还没有对Swift进行过多的阅读,但是据我了解,Swift可以与Objective-C一起编写。话虽如此,我将为您提供一个起点(在Objective-C中)。

1)调用初始场景:

在主视图控制器中,您将需要将VC的view属性强制转换为一个SKView内部viewDidLoad变量,如下所示:

SKView *spriteKitView = (SKView *)self.view;

一些有用的调试属性SKView

spriteKitView.showsFPS = YES;
spriteKitView.showsNodeCount = YES;
spriteKitView.showsPhysics = YES;

您将必须分别配置每个场景(子类SKScene)。完成此操作后,将主场景导入到主VC的类实现中。呈现主要场景(仍在中viewDidLoad):

MyScene *mainScene = [MyScene new];
[spriteKitView presentScene: mainScene];

2)通过标签(或任何其他SKNode在场景之间转换:将相关节点设置为属性,并通过以下方式呈现新场景:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    CGPoint touchLocation = [touch locationInNode:self];

    if ([self.playAgainButton containsPoint:touchLocation]) {
        [self presentGamePlayScene];
    } else if([self.mainMenuButton containsPoint:touchLocation]) {
        [self presentMainMenu];
    }
}


- (void)presentGamePlayScene {
    gamePlayScene *newGamePlay = [[gamePlayScene alloc]init];
    newGamePlay.scaleMode = SKSceneScaleModeAspectFill;
    SKTransition *arbitraryTransition = [SKTransition crossFadeWithDuration:2.0]; //look into SKTransition for a plethora of different options.
    [self.view presentScene:newGamePlay transition:arbitraryTransition];
}

3)要通过接触更改场景,请遵守SKPhysicsContactDelegate任何给定协议SKScene在该场景的实现中:

- (void)didBeginContact:(SKPhysicsContact *)contact {
    if(contact.bodyA.categoryBitMask == enemyCategory && contact.bodyB.categoryBitMask == arbitraryNodeCategory) {
        [self presentGameOverScene];
    }
}

一个SKPhysicsContact有2碰撞SKPhysicsBodys可通过属性附加到它。这些冲突节点必须对其进行SKPhysicsBody初始化。此外,他们必须像下面这样contactBitMask设置属性SKPhysicsBody

@implementation SomeNode 

- (instanceType)initCollidingNode {
     if(self = [super init]) {
         self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.someSize];
         self.physicsBody.contactBitMask = enemyCategory | powerUpCategory;
         self.physicsBody.categoryBitMask = arbitraryNodeCategory;
         self.physicsBody.dynamic = YES 
     }
     return self;
}
  • SKSpriteNode和SKPhysicsBody具有您可能需要的其他相关属性

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

过渡到场景时如何设置场景的缩放模式?

Swift:过渡到新场景后取消分配GameScene吗?

在Swift Spritekit中,每当我从一个场景过渡到另一个场景时,我的sks文件都不会传输吗?

SpriteKit在过渡到新场景时遇到有关UIElement的错误

Swift - 过渡到 SceneDelegate

如何在Swift中过渡场景

如何以编程方式使用Swift过渡到不同情节提要中存在的其他视图控制器?

如何选择首先显示spritekit / swift的场景?

如何从孢子过渡到春季?

如何从Java过渡到Clojure?

Spritekit-从.sks文件中创建的场景从另一个场景过渡时为空白

SpriteKit场景过渡的良好做法

如何在不同的SpriteKit场景中显示iAd横幅

从cocoapods过渡到Swift Package Manager

如何创建覆盖整个可见垂直空间的线性渐变(或过渡到实体?)

如何为我的场景添加背景?SpriteKit Swift 4

在Swift 3中过渡到另一个SKView时如何传递变量?

如何仅使用Swift使用代码过渡到新的视图控制器

如何从managedQuery过渡到LoaderManager / CursorLoader?

如何使 ViewController 从底部过渡到顶部?

Yii2在创建和更新场景中的不同表单字段

Android Activity 场景过渡不同的动画目标

SpriteKit场景之间的过渡而无需重置游戏

在Swift 2.0中过渡到新的View Controller

过渡到特定场景时,Unity应用在iOS14上崩溃

使用 p5.js 从一个场景过渡到另一个场景

iOS故事板:5秒后自动从一个场景过渡到另一个场景

Xcode 6 / SpriteKit / Swift中的场景大小

如何在XCode和Swift中创建和重用模块?