質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SpriteKit

SpriteKitは、iOSやOS Xで使用できるApple社製の2Dゲーム開発フレームワークです。

Xcode 7

Xcode 7は、ソフトウェア開発のためのアップルの統合開発環境であるXcodeのバージョン。UIを作成するために用いるグラフィカルツールです。iOS9/OS X El Capitan/watchOS2に対応。Swift 2コンパイラーが搭載されています。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1993閲覧

Xcode7, SKSceneの追加について

退会済みユーザー

退会済みユーザー

総合スコア0

SpriteKit

SpriteKitは、iOSやOS Xで使用できるApple社製の2Dゲーム開発フレームワークです。

Xcode 7

Xcode 7は、ソフトウェア開発のためのアップルの統合開発環境であるXcodeのバージョン。UIを作成するために用いるグラフィカルツールです。iOS9/OS X El Capitan/watchOS2に対応。Swift 2コンパイラーが搭載されています。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

1グッド

0クリップ

投稿2015/09/18 13:28

Swift, SpriteKitでOSX向けゲームを作っています。
シーン遷移の実装をしたいのですが、ビルドしてみるとうまく遷移してくれません。
プロジェクトの内容はXcode7のGameテンプレートにTestScene.swiftを追加し、GameSceneにコードを追加したものとなっています。
以下が追加したファイルとコードです。

Swift

1// GameScene.swift 2import SpriteKit 3 4class GameScene: SKScene { 5 override func didMoveToView(view: SKView) { 6 /* Setup your scene here */ 7 let myLabel = SKLabelNode(fontNamed:"Chalkduster") 8 myLabel.text = "Hello, World!"; 9 myLabel.fontSize = 45; 10 myLabel.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame)); 11 12 self.addChild(myLabel) 13 } 14 15 override func mouseDown(theEvent: NSEvent) { 16 /* Called when a mouse click occurs */ 17 18 let location = theEvent.locationInNode(self) 19 20 let sprite = SKSpriteNode(imageNamed:"Spaceship") 21 sprite.position = location; 22 sprite.setScale(0.5) 23 24 let action = SKAction.rotateByAngle(CGFloat(M_PI), duration:1) 25 sprite.runAction(SKAction.repeatActionForever(action)) 26 27 self.addChild(sprite) 28 29 /* 追加コード */ 30 // シーンに移動 31 if let scene = TestScene(fileNamed: "TestScene") { 32 scene.scaleMode = SKSceneScaleMode.AspectFill 33 let transition = SKTransition.fadeWithDuration(1.0) 34 self.view?.presentScene(scene, transition: transition) 35 } else { 36 print("scene is nil") 37 } 38 } 39 40 override func update(currentTime: CFTimeInterval) { 41 /* Called before each frame is rendered */ 42 } 43}

Swift

1// TestScene.swift 2import SpriteKit 3 4class TestScene: SKScene { 5 override func didMoveToView(view: SKView) { 6 /* Setup your scene here */ 7 let myLabel = SKLabelNode(fontNamed: "Helvetica") 8 myLabel.text = "test scene" 9 myLabel.fontSize = 30 10 myLabel.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame)); 11 12 self.addChild(myLabel) 13 } 14}

ビルドすると、マウスで画面内をクリックするたびにscene is nilが出力されます。おそらくTestScene(fileNamed: "TestScene")で追加クラスが正常にインスタンス化されていないのだと思いますが、その原因がわかりません。
考えられる理由があれば意見していただけると助かります。

e-cube👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

もしsksファイルを作成していないなら、シーン生成の部分を以下のようにしてください。

Swift

1TestScene(size: /* 適切なCGSize */)

Swift

1TestScene(fileNamed: "TestScene")

公式リファレンスにも記載がある通り、この生成方法はGUI(拡張子.sksファイル)でシーンを構築した際に、そのsksファイルを元にシーンを生成する場合に使います。

投稿2015/09/18 14:02

shiolier

総合スコア1156

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/09/18 14:38

回答ありがとうございます。どちらの方法でもTestSceneを表示することができました。 TestScene(size: CGSize)についてはコード補完では表示されなかったため、利用できないものと思い込んでいました(SKScene(size: CGSize)だと補完で表示されました)。 TestScene(fileNamed: "TestScene")は公式リファレンスを読み落としていました... SKSceneの項ばかり見てて継承元のクラスSKNodeのことを忘れていました。きちんとチェックしないとはまりますね...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問