ゲーム「テトリス」を作成することでSwift
を学ぼう、というのがこちらのサイト。
無目的に文法だけ学ぶというのも虚しいなあと思っていたので、ちょうど良いサイトに巡り会えた。
記録がてら、ひと記事書いて行こうかと思う。
なお、当方はiOS Application作成経験は皆無のため、本当に初歩的なところから四苦八苦して行く模様。
※環境はXcode6-Beta5
1. メールアドレスを入力する
まずはメールアドレスの入力が必要らしい。
とはいえ、なんの目的で集めるのかは気になるところ。
一応、サイト下部にあるプライバシーポリシーを見てみる。
- How We Collect and Use Information
- Sharing of Your Information
- How We Protect Your Information
- Your Choices About Your Information
- Links to Other Websites and Services
- Changes to Our Privacy Policy
- How to Contact Us
翻訳については各人でお願いしたい。
文責は一切持たないのであしからず。
重要そうなところだけ超意訳(google翻訳して抜粋しただけ)すると、
-
メールアドレスをキーにして個人情報を収集するよ、第三者機関とかも使っちゃうから、FaceBookばりのクッキーで追っかけっから。
-
第三者にもプライバシーポリシーは守らせるし、法令に準拠した個人情報保護をお約束しますよ。
ってところだろうか。
訳には自信ないし、とりあえず、捨てアカかエイリアスで切り抜ける事にしよう。
2. 新しいプロジェクトを作成する
空欄にメールアドレスを入力して「Learn more」ボタンを押下すると、次の画面へ遷移する。
最初にすべき事として、Xcodeでプロジェクトを作成せよ、とのこと。
新規プロジェクトの作成画面で、まずはテンプレートの選択を行う。
iOS
のApplication
のGame
を選んで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の中身
-
Supporting Files
フォルダにドラッグ&ドロップ -
Choose options for adding these files
ウインドウのDestination:Copy items if needed
をチェック -
Finish
ボタンを押下
ちょいと解説をば。
Supporting Files
フォルダはXcodeの左ペイン?のプロジェクトナビゲーターにあります。
Images
フォルダについては、フォルダ内に入って、全ての画像ファイルを選択してSupporting Files
フォルダにドラッグ&ドロップです。
最後に、ナビゲーターからImages.xcassets
を選択して、AppIcon
をクリックします。
解凍したフォルダBlocs
直下の、29pt、40pt、60ptのアイコンをAppIcon
の空欄にドラッグ&ドロップします。
3-5. 追加したリソースを活かす
まずはGameScene.swift
を編集します。
このクラスはSwiftris
の画面描画の全てと、音楽の再生、時間の経過を担うらしい。
奥さん、テトリスのブロックは英語でtetrominos
って言うんだそうですわよ?
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にアップデートした。
すると、下記の部分でワーニングが出た。
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
下の方を選んでこうなった。
required init(coder aDecoder: (NSCoder!)) {
fatalError("NSCoder not supported")
}