Objective-Cでは、Sprite-Kitを使用してsuccessfully Objective-Cで次のようなコードを使用して新しいシーンを起動します
if ([touchedNode.name isEqual: @"Game Button"]) {
SKTransition *reveal = [SKTransition revealWithDirection:SKTransitionDirectionDown duration:1.0];
GameScene *newGameScene = [[GameScene alloc] initWithSize: self.size];
// Optionally, insert code to configure the new scene.
newGameScene.scaleMode = SKSceneScaleModeAspectFill;
[self.scene.view presentScene: newGameScene transition: reveal];
}
私の単純なゲームをSwiftに移植しようとして、これまでのところこれでうまくいきます...
for touch: AnyObject in touches {
let touchedNode = nodeAtPoint(touch.locationInNode(self))
println("Node touched: " + touchedNode.name);
let touchedNodeName:String = touchedNode.name
switch touchedNodeName {
case "Game Button":
println("Put code here to launch the game scene")
default:
println("No routine established for this")
}
しかし、実際に別のシーンに移行するためにどのコードを書くかわかりません。質問:
ありがとうございました
2番目の質問から始めると、それはあなた次第です。これは必須ではなく、Objective-Cにもなかったものですが、必要に応じて、ファイルごとに1つのクラスを持つというObjective-Cの規則に従うこともできます。そうは言っても、密接に関連しているが、多くのコードで構成されていないクラスがいくつかある場合、それらを1つのファイルにグループ化することは不合理ではありません。正しいと思われることを行ってください。単一のファイルに大量のコードを作成しないでください。
それからあなたの最初の質問のために...はい、あなたはすでにそれのかなりの量を持っていました。基本的に、あなたが立ち上がったところから、そのサイズを介してGameSceneのインスタンスを作成する必要があります:初期化子。そこから、プロパティを設定してpresentを呼び出すだけです。
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
super.touchesBegan(touches, withEvent: event)
guard let location = touches.first?.locationInNode(self),
let scene = scene,
nodeAtPoint(location) == "Game Button" else {
return
}
let transition = SKTransition.reveal(
with: .down,
duration: 1.0
)
let nextScene = GameScene(size: scene.size)
nextScene.scaleMode = .aspectFill
scene.view?.presentScene(nextScene, transition: transition)
}
touch-begainまたはノードアクションに取り組む必要がある場合は、それを使用します。
override func touchesBegan(touches: NSSet!, withEvent event: UIEvent!) {
let touch = touches.anyObject() as UITouch
if CGRectContainsPoint(btncloseJump.frame, touch.locationInNode(self)) {
self.scene.removeFromParent()
btncloseJump.removeFromParent()
let skView = self.view as SKView
skView.ignoresSiblingOrder = true
var scene: HomeScene!
scene = HomeScene(size: skView.bounds.size)
scene.scaleMode = .AspectFill
skView.presentScene(scene, transition: SKTransition.fadeWithColor(SKColor(red: 25.0/255.0, green: 55.0/255.0, blue: 12.0/255.0, alpha: 1), duration: 1.0))
}
}