LoginSignup
16

More than 5 years have passed since last update.

Swiftrisで学んでみる(1)

Last updated at Posted at 2014-09-02

ゲーム「テトリス」を作成することでSwiftを学ぼう、というのがこちらのサイト。

Learn Swift Build Your First iOS Game

無目的に文法だけ学ぶというのも虚しいなあと思っていたので、ちょうど良いサイトに巡り会えた。

記録がてら、ひと記事書いて行こうかと思う。
なお、当方はiOS Application作成経験は皆無のため、本当に初歩的なところから四苦八苦して行く模様。

※環境はXcode6-Beta5

1. メールアドレスを入力する

まずはメールアドレスの入力が必要らしい。
とはいえ、なんの目的で集めるのかは気になるところ。
一応、サイト下部にあるプライバシーポリシーを見てみる。

  1. How We Collect and Use Information
  2. Sharing of Your Information
  3. How We Protect Your Information
  4. Your Choices About Your Information
  5. Links to Other Websites and Services
  6. Changes to Our Privacy Policy
  7. How to Contact Us

翻訳については各人でお願いしたい。
文責は一切持たないのであしからず。

重要そうなところだけ超意訳(google翻訳して抜粋しただけ)すると、

  1. メールアドレスをキーにして個人情報を収集するよ、第三者機関とかも使っちゃうから、FaceBookばりのクッキーで追っかけっから。

  2. 第三者にもプライバシーポリシーは守らせるし、法令に準拠した個人情報保護をお約束しますよ。

ってところだろうか。
訳には自信ないし、とりあえず、捨てアカかエイリアスで切り抜ける事にしよう。

2. 新しいプロジェクトを作成する

空欄にメールアドレスを入力して「Learn more」ボタンを押下すると、次の画面へ遷移する。

最初にすべき事として、Xcodeでプロジェクトを作成せよ、とのこと。

新規プロジェクトの作成画面で、まずはテンプレートの選択を行う。
iOSApplicationGameを選んでNextボタンをポチっと。
サイトの説明に従ってoptionsを埋めていこう。

……デベロッパー登録していないせいか、それともApple IDと違うメールアドレスの所為か、なんか文句言われてんな。

リポジトリからソースをダウンロード出来ないだけ、だと良いんだが。

……⌘ + Rでデフォルトゲームが走らん……。

The operation couldn’t be completed. (IDEPseudoTerminalDomain error 1.)

google先生、google先生!!

えー、Xcode再起動したらいいんじゃない、って言われました。

はい、iOS Simmulator起動しましたー。
google先生、ありがとうございました。

これで、"2. Creating a New Game Project"はおしまい。

3. 不要なものを削除したり必要なものをDLしたり

まあ、テンプレで用意したものから不要なものを削除して目的に近付けて行くのは常套手段ですね。

3-1. 不要ファイルの削除

  • GameScene.sksを削除
  • Images.xcassets > Spaceshipを削除

sksファイルというのは、プロジェクト作成の際に選んだSpriteKitに関連するファイル。
SpriteKitというのは、iOS・Mac OS X用2Dゲーム開発フレームワークらしい。
ま、削除しちゃうんですけどね。

Images.xcassetsってのは画面の管理ツール?らしいですよ。

3-2. 不要コードの削除

ソースコードから不要な部分を削除しよう。
背景が赤く塗られている部分は要らないから削除してね、って書いてあるみたいだけど、正直赤くない。

3-3. 絵とか音とかダウンロードしよっ?

ダイエットが終わったら、今度はテトリスに必要な画像や音楽等のリソースをダウンロードしよう。

……どこから?
URLは?
リンクは?

ありました。
"Download the necessary assets"という赤文字部分をクリックすると、ダウンロード出来ます。
……てか、英語サイトってこういうの多いですよね。
わっかんねーっつーの。

3-4. プロジェクトに追加

ダウンロードしたら解凍します。
中身はこんなカンジ。

Blocs
├── Images
│   ├── background.png
│   ├── background@2x.png
│   ├── gameboard.png
│   ├── gameboard@2x.png
│   ├── whitebg.png
│   └── whitebg@2x.png
├── Sounds
├── Sprites.atlas
├── icon-29pt.png
├── icon-40pt.png
└── icon-60pt.png

解凍したら下記対象に対し、以下の操作を行います。

  • Soundsフォルダ
  • Sprites.atlasフォルダ
  • Imagesの中身
  1. Supporting Filesフォルダにドラッグ&ドロップ
  2. Choose options for adding these filesウインドウのDestination:Copy items if neededをチェック
  3. Finishボタンを押下

ちょいと解説をば。
Supporting FilesフォルダはXcodeの左ペイン?のプロジェクトナビゲーターにあります。

Imagesフォルダについては、フォルダ内に入って、全ての画像ファイルを選択してSupporting Filesフォルダにドラッグ&ドロップです。

最後に、ナビゲーターからImages.xcassetsを選択して、AppIconをクリックします。

解凍したフォルダBlocs直下の、29pt、40pt、60ptのアイコンをAppIconの空欄にドラッグ&ドロップします。

3-5. 追加したリソースを活かす

まずはGameScene.swiftを編集します。
このクラスはSwiftrisの画面描画の全てと、音楽の再生、時間の経過を担うらしい。
奥さん、テトリスのブロックは英語でtetrominosって言うんだそうですわよ?

GameScene.swift
        required init(coder aDecoder: NSCoder!) {
            fatalError("NSCoder not supported")
        }
        override init(size: CGSize) {
            super.init(size: size)

            anchorPoint = CGPoint(x: 0, y: 0)

            let background = SKSpriteNode(imageNamed: "background")
            background.position = CGPoint(x: 0, y: 0)
            background.anchorPoint = CGPoint(x: 0, y: 1.0)
            addChild(background)
        }

ちょっと奥さん、init()でエラー出てますわよ?

GameScene.swift:15:22: Initializers may only be declared within a type
GameScene.swift:18:22: Initializers may only be declared within a type

うーん、調査したいけど、時間ないから今日はここまで。

->解決した。
 間違えてupdate()の中に追加用のコード書いてた。
 正しくはupdate()と並列に書くのが正しい。
 これによりエラーは解消された。

それから、Xcode6 Beta7にアップデートした。
すると、下記の部分でワーニングが出た。

GameScene.swift
        required init(coder aDecoder: NSCoder!) {
            fatalError("NSCoder not supported")
        }
GameScene.swift:15:25: Overriding initializer parameter of type 'NSCoder' with implicitly unwrapped optional type 'NSCoder!'

行数表示の横の三角マークをクリックするとIssueが表示され、

Fix-it Remove'!' to make tha parameter required
Fix-it Add parenthese to silence this warning

下の方を選んでこうなった。

GameScene.swift
        required init(coder aDecoder: (NSCoder!)) {
            fatalError("NSCoder not supported")
        }

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16