菜鸟教程小白 发表于 2022-12-13 05:07:36

ios - 是什么导致我的 SKAction 计时器行为异常?


                                            <p><p>好的,我有一个场景,其中我有这个方法,<em>createSceneContents</em>,当 <em>didMoveToView</em> 被调用时会被调用。在这种方法中,我有几件事可以创建场景,包括一个生成这样的节点的计时器:</p>

<pre><code>self.spawningSpeed = 1.5;
self.enemyData = [init];
SKAction *wait = ;
SKAction *run = ;
self.spawnAction = ]];
;
</code></pre>

<p><em>enemyData</em> 是我的敌人类的一个对象,它基本上只是在场景中添加了一个 SKSpriteNode。 <em>world</em> 节点只是我添加所有游戏元素的节点。</p>

<p>这是 <em>spawningEnemy</em> 方法中发生的情况:</p>

<pre><code>-(void)spawningEnemy {

NSLog(@&#34;spawned&#34;);
SKSpriteNode *aNewEnemy = ;
aNewEnemy.physicsBody.allowsRotation = NO;
aNewEnemy.physicsBody.categoryBitMask = self.enemyCategory;
aNewEnemy.physicsBody.collisionBitMask = self.enemyCategory | self.playerCategory | self.edgeCategory | self.bottomCategory;
aNewEnemy.physicsBody.contactTestBitMask = self.enemyCategory | self.playerCategory | self.edgeCategory | self.bottomCategory;
;

}
</code></pre>

<p>这只是从敌人类中获取一个 SKSpriteNode 并设置一些属性。它还将它添加到世界中。</p>

<p>我还有 4 种方法可以暂停、恢复、重新开始和结束游戏:</p>

<pre><code>-(void)pauseGame {
;
NSLog(@&#34;Pausing...&#34;);
self.world.paused = YES;
self.isPaused = YES;

}
-(void)restartGame {
;
;
self.enemyData = nil;
self.isPaused = NO;
;
}

-(void)resumeGame {
self.isPaused = NO;
self.world.paused = NO;
}

-(void)gameOver {
NSLog(@&#34;Game Over&#34;);
self.world.paused = YES;

self.isPaused = YES;

}
</code></pre>

<p>这些方法还有很多,但这才是真正重要的。</p>

<p><strong>现在问题来了:</strong>这一切正常,直到我退出应用程序。返回应用程序时,游戏会自动调用 pause 方法,但当我点击重新启动或恢复时,<em>spawningEnemy</em> 方法没有被调用。 (如您所见,我检查了 NSLog 消息)</p>

<p>这可能是什么原因造成的?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我已经尝试了下面的代码并且它有效。当应用退出事件时,生成停止,并在应用再次变为事件时重新启动。</p>

<p>您不需要手动包含暂停代码,因为 SpriteKit 在退出事件时会自行暂停,但我包含它是为了展示如何在 AppDelegate 和 SKScene 之间进行通信。</p>

<p><strong>AppDelegate.m</strong></p>

<pre><code>- (void)applicationWillResignActive:(UIApplication *)application {
[postNotificationName:@&#34;applicationWillResignActive&#34; object:self];
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
[postNotificationName:@&#34;applicationDidBecomeActive&#34; object:self];
}
</code></pre>

<p>GameScene.m</p>

<pre><code>-(id)initWithSize:(CGSize)size {
if (self = ) {
    SKAction *wait = ;
    SKAction *run = ;
    SKAction *spawnAction = ]];
    ;

    [ addObserver:self
                                             selector:@selector(pauseGame)
                                                 name:@&#34;applicationWillResignActive&#34;
                                             object:nil];

    [ addObserver:self
                                             selector:@selector(resumeGame)
                                                 name:@&#34;applicationDidBecomeActive&#34;
                                             object:nil];
    }
return self;
}

-(void)spawningEnemy {
    NSLog(@&#34;spawningEnemy&#34;);
}

-(void)pauseGame {
    NSLog(@&#34;applicationWillResignActive...&#34;);
    self.paused = YES;
}

-(void)resumeGame {
    NSLog(@&#34;applicationDidBecomeActive...&#34;);
    self.paused = NO;
}

-(void)willMoveFromView:(SKView *)view {
// good housekeeping
    [ removeObserver:self];
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 是什么导致我的 SKAction 计时器行为异常?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/28253349/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/28253349/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 是什么导致我的 SKAction 计时器行为异常?