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(@"spawned");
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(@"Pausing...");
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(@"Game Over");
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:@"applicationWillResignActive" object:self];
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
[postNotificationName:@"applicationDidBecomeActive" 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:@"applicationWillResignActive"
object:nil];
[ addObserver:self
selector:@selector(resumeGame)
name:@"applicationDidBecomeActive"
object:nil];
}
return self;
}
-(void)spawningEnemy {
NSLog(@"spawningEnemy");
}
-(void)pauseGame {
NSLog(@"applicationWillResignActive...");
self.paused = YES;
}
-(void)resumeGame {
NSLog(@"applicationDidBecomeActive...");
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]