ということで、現在ゲームを作成中です。メニュー、設定、gameScene、GameOverScene など、いくつかのシーンがあります。
ほぼすべてのシーン間の移行は問題なく、移行に使用しているコードは次のとおりです: (例: メニューから GameScene へ)
let secondScene = GameScene(size: self.size)
let transition = SKTransition.pushWithDirection(.Up, duration: 0.7)
secondScene.scaleMode = SKSceneScaleMode.AspectFill
self.scene!.view?.presentScene(secondScene, transition: transition)
ただし、GameScene から GameOverScene への私の GameScene は非常にグリッチです。通常、長い一時停止があります。
GameOverScene の内容全体は次のとおりです。
import Foundation
import SpriteKit
class GameOverScene: SKScene {
override func didMoveToView(view: SKView) {
let myLabel = SKLabelNode(fontNamed:"American Typrewriter")
myLabel.text = "Game Over!";
myLabel.fontSize = 45;
myLabel.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame));
self.addChild(myLabel)
}
}
したがって、これが移行の遅れの原因である可能性は低いと思います。
「ゲームオーバー」を呼び出すために使用しているコードは次のとおりです。
override func update(currentTime: CFTimeInterval) {
if sprite.position.y < 100 {gameOver()}
}
func gameOver() {
// Loads GameOver Scene //
let secondScene = GameOverScene(size: self.size)
// Creates vibration //
AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))
func boatSink() {
sprite.physicsBody = nil
sprite.physicsBody?.affectedByGravity = false
sprite.physicsBody?.dynamic = false
let spritefly = SKAction.moveTo(CGPointMake(400,20), duration:2.0)
car.runAction(spritefly) }
let transition = SKTransition.pushWithDirection(.Up, duration: 3.0)
let nextScene = GameOverScene(size: scene!.size)
nextScene.scaleMode = .AspectFill
scene?.view?.presentScene(nextScene, transition: transition)
}
以下を使用するなど、遅延の使用を実験しました。
let skView = self.view! as SKView
let scene = GameOverScene(size: self.scene!.size)
scene.size = skView.bounds.size
scene.scaleMode = .AspectFill
let time = dispatch_time(dispatch_time_t(DISPATCH_TIME_NOW), 1 * Int64(NSEC_PER_SEC))
dispatch_after(time, dispatch_get_main_queue()) {
let sceneTransition = SKTransition.doorsCloseHorizontalWithDuration(2.0)
sceneTransition.pausesOutgoingScene = true;
skView.presentScene(scene, transition: sceneTransition)}
ロードする時間を与えますが、これは機能しません。
また、「pausesOutgoingScene」と「pausesIncomingScene」を使用してみましたが、役に立ちませんでした。
最後に、現在のシーンを 0.0 まで遅くしてみました:
func pauseGameScene() {
self.physicsWorld.speed = 0.0
self.speed = 0.0
}
これにより、コードがそれ以上進行しなくなりました。
私の質問は次のとおりです。2. 事前にすべてのシーンをロードする方法はありますか? これはおそらくマイナーな改善にすぎないと確信していますが、これは私がまだ見ていない領域であることは間違いありません.