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

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

ただいまの
回答率

90.62%

  • Swift

    7059questions

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

  • Xcode

    4006questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

[Swift] SpriteKitのSKSceneのサイズの指定方法がよくわかりません。

受付中

回答 1

投稿 ・編集

  • 評価
  • クリップ 2
  • VIEW 2,676
使っているのはXcode6-Beta4です。
GameテンプレートでSpriteKitを使うと、GameSceneというのがデフォルトでは用意されています。このsceneのサイズがデフォルトだと、(1024,768)なのですが、これはどこで指定しているのでしょうか?教えて頂ければ幸いです!

GameViewController.swiftの冒頭部分は以下のようになっています。


import UIKit
import SpriteKit

extension SKNode {
    class func unarchiveFromFile(file : NSString) -> SKNode? {
        
        let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks")
        
        var sceneData = NSData.dataWithContentsOfFile(path, options: .DataReadingMappedIfSafe, error: nil)
        var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData)
        
        archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene")
        let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as GameScene
        archiver.finishDecoding()
        return scene
    }
}

class GameViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
            // Configure the view.
            let skView = self.view as SKView
            skView.showsFPS = true
            skView.showsNodeCount = true
            
            /* Sprite Kit applies additional optimizations to improve rendering performance */
            skView.ignoresSiblingOrder = true
            
            /* Set the scale mode to scale to fit the window */
            scene.scaleMode = .AspectFill
            
            skView.presentScene(scene)
        }
    }

普通にGameSceneのインスタンスを作ろうとしたら、


let scene = GameScene(size: self.view.bounds.size)


などと書くと思うのですが、こうすると、sceneのサイズが、(320,480)になってしまいます。これはこれで問題ないのですが…。ただ、デフォルトの書き方だと、sceneのサイズが(1024,768)となるので、その理由が知りたいです。分かる方いらっしゃいましたら、宜しくお願いしますm(..)m
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

extension SKNode {
    class func unarchiveFromFile(file : NSString) -> SKNode? {
        
        let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks")
        
        var sceneData = NSData.dataWithContentsOfFile(path, options: .DataReadingMappedIfSafe, error: nil)
        var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData)
        
        archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene")
        let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as GameScene
        archiver.finishDecoding()
        return scene
    }
}

上のコードのlet sceneのところでブレークポイント貼ってpo sceneすると幸せになれるかもしれません
要はGameScene.sksっていう元々ある素材のサイズが1024x768だからってことですね

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    swiftで分割した画像をSKShapeNodeに貼り付けたい

    お世話になります。 swiftで一枚の画像を3x3の画像に分割して、9つ(3x3)のSKShapeNode(四角形)のTextureに設定したいです。 以下のサイトで実

  • 解決済

    SKActionが終わった後に何か動作をさせたい時

    SKActionが実行され、そのアクションが終わった時に呼ばれる関数というものは存在しますか?

  • 解決済

    Swift, SpriteKitでTwiterにスクリーンショットの画像を投稿する

    こんばんは。いつもお世話になっています。早速質問させていただいます。 タイトル通りの質問なのですが、既に同じ様な質問が出ていて、そちらを参考にさせてもらっているのですが、 分か

  • 解決済

    [SpriteKit]マルチタップの設定の仕方

    スプライトキットでマルチタップの設定の仕方がわかりません。 試行錯誤して、以下をやってみたのですが、うまくいきません。 ❶ GameViewController.swift

  • 解決済

    touchesBeganが動作しない

    Swift Playgroundで以下のようなプログラムを作成しています(前に質問させていただいたものと同じです) import UIKit import SpriteKit

  • 解決済

    xcodeでシミュレータに表示されない

    連投になってしまって申し訳御座いません。前回の質問がまだ解決していないのにベストアンサーをつけてしまい解決済みになってしまいました。本格的に使うのは初めてでして何分ご容赦を。

  • 解決済

    SpriteKitによる画像のドラッグ

    swift SpriteKit で画像を横にスライドした分だけx軸方向にスライドさせるプログラムを組みたいです。画像は表示されるのですが画像をドラッグすることができません。何が足り

  • 解決済

    Swift 3.1 touchsMovedメソッドでエラー

    前提・実現したいこと xcode8 swift3 spritekitを使用して かんたんなアプリを作成しており、 画面タップによって反応するtouches関連のメソッドの中に

同じタグがついた質問を見る

  • Swift

    7059questions

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

  • Xcode

    4006questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

関連ワード: unarchivefromfile skscene