これおもしろい

らふにかいてこ

App A Week(iOS)をやってみる: 3日目

1週間目: 11/3(金)〜11/9(木)

作ってるもの

STG with クイズ

リポジトリ

GitHub - takattata/spritekit-stg-quiz (晒し忘れてました😅)

状況

所感

アウトプットとインプットのバランスに悩んでます。
どっちも時間掛かるし、やりたいことはいっぱいだし、時間の工夫は難しいですねぇ。
今、移動時間にはPEAKS(ピークス)|堤 修一 吉田 悠一 池田 翔 坂田 晃一 加藤 尋樹 川邉 雄介 岸川 克己 所 友太 永野 哲久 - 第一線の開発者陣による「iOS 11 Programming」執筆プロジェクト!を読んでいます。
ありがたい代物です。読んでて面白い。

あと今日イチでSwiftここ良いよなー!と思ったのが、

private func didCollide(bullet: SKSpriteNode, enemy: SKSpriteNode) {
    print(">>> HIT: " + #function)
}

private func didCollide(myCharacter: SKSpriteNode, enemy: SKSpriteNode) {
    print(">>> HIT: " + #function)
}

こんな感じに、同じ引数の型でも、引数の名前変えるだけで関数を定義できるとこですね!
何度書いてもこれは格好良いなーと思います。

進捗

一応説明しておくと、思いついた内容が、今会社で開発している(宣伝しておこう)

このアプリの画像を使ったものだったので、画像に色塗ったりして問題がないようにしている為、見た目がよく分からない感じになっています。

f:id:takattata:20171105233515g:plain
本来なら、タイトル画面の赤い四角は赤ちゃんがパタパタしていて、ゲーム画面の上部に常駐しているのは赤ちゃんの絵、という想定です。
黒いのが障害物、下のハートが自キャラ、発射してるのが自弾です。(画像がややこしいですね汗)
背景の紫っぽい?四角は障害物の移動範囲を、確認の為に可視化してた名残です。消し忘れました。
それを踏まえた上で進捗を説明すると、

  • 赤ちゃんと自弾の当たり判定をつける + 赤ちゃんのHPが回復する
  • 障害物を出す + 移動範囲をつける(範囲内で跳ね返る)
  • 障害物と自弾の当たり判定をつける
  • 自キャラと障害物の当たり判定をつける + 自キャラ瞬間操作不能, 点滅アニメーション

思ったほど進んでない😱
面白いけど、やっぱり実際に作っていくとなると難しいものだなー。
でもやっぱり作るの楽しいなぁ。

明日には終わらせたい

  • 敵貫通のレーザービーム作る
  • オーバーレイでクイズ画面への遷移作る + メイン画面の時間を止める

詰まったところ

演算子オーバーロード

加減乗除はいいものの、+=(加算代入)に少し手間取りました。
inout使って解決。

Must call a designated initializer of the superclass

オブジェクトクラスにSKSpriteNodeを継承させようとした時に初期化に悩みました。
参考サイトあたりを参照して、convenienceとdesinatedの2種類initializerがあることを知り、実際に継承している方のソース見て事なきを得ましたが。
どれがdesignated initializerなのかの判別はドキュメントでするものなのでしょうか?🤔

画面の左下が(0, 0)ということを忘れる

どうにも左上が(0, 0)のイメージが強くて、うっかり詰まりました...。
敵が出現する範囲決める時にやらかしました。

端末の画面サイズの違い

これはまだ直してないです...😭 ずっと8plusのシミュレータでやってたのですが、ふとSE(自分の端末)で動かしてみたら画面が凄いことになりました笑 たしかにテキトーにsetScaleしてたからなぁ。
画面サイズを考慮しなくて良い開発の仕方を意識しないといけないなぁ。

updateの書き方

どうにも、自キャラの状態更新などに毎フレ更新させる様な処理を書いてしまうのですが、SpriteKitっぽい書き方ではないのだろうなぁと感じます。
あと、フレームでカウントすると、fpsが定まってないから辛い。
こういうパターンの動きがほしい!という定石があるだろうから、掴みたいですね。
人のソース読んでみないと。

書き方が定まらない

これは書いている内に自分の中で固まりそうなので、書いた分だけ迷いもなくなっていきそうだなと思います。
とはいえ、ゲームを作る時とアプリを作る時では書き方違うから、その切り替えに苦戦しそうではありますが。

参考サイト

[Swift] 演算子のオーバーロード | 目くじら日記
SKNode - SpriteKit | Apple Developer Documentation
[Swift] クラスのイニシャライザ3: Designated Initializer と Convenience Initializer - Qiita
Swift倉庫・SKSpriteNodeでCButtonを作ってみました。 - Qiita
アクション|Sprite Kit入門
SpriteKitでNodeを点滅させる - Unnnnnnnn

App A Week(iOS)をやってみる: 2日目

1週間目: 11/3(金)〜11/9(木)

作ってるもの

STG with クイズ

全然作業時間確保できなかった...( ゚д゚)
SpriteKit絶賛インプット中です。
昨日貼り付けてたAppleのSpriteKitのサンプルはまだハードルが高かったので、他サイトのチュートリアル(SpriteKit Swift 3 Tutorial for Beginners)をやってみました。
すごく分かりやすくて良いですね。
英語もそこまで難しくなかったです。(コードで大体理解できます。)

チュートリアルで学べること
  • 絵の追加
  • 移動し続けるキャラ
  • タップによる弾の発射
  • 敵と弾の当たり判定
  • シーン切り替え

作ろうとしてるものも大体これから学べそうです。
クイズ画面出すところはちょっと調べないとかな。

せめて今日中に自キャラ動かすのと、自弾の発射を出来るところまでは持っていきたい。
=> 達成!!すっごく微妙な動きしてるけど...!!
仮画像にしても画像が変なのはご容赦ください...。
f:id:takattata:20171104232707g:plain

これ進捗晒すのも、コード晒すのもすごく恥ずかしいわぁ...。なけなしのプライドがズキズキと...。
コミットメッセージとか粒度とかも気になってくるし、このコードの書き方まずい...!!とか、色々目について良い刺激になりますね。
速度重視でやっていきながら、少しずつ慣れて来たら改善していかないとなぁ。
日頃の意識の仕方で力付けられる部分だと思うので、気をつけていこうと思います。
今後に乞うご期待。

App A Week(iOS)をやってみる: 1日目

検索してたら自分のブログを発掘したので、更新しなさいということかな。と思ったので、書きます。

App A Weekとは

「週に1本アプリを作る」というルールがあるだけですかね?
Qiitaでバズってた こちらの記事に感化されて文字ってみましたが、ググってみると出てきたので、意外と認知されてる言葉なのでしょうか?🤔

自分ルール

  • 週に1本iOSのアプリを作る(作りきれなくても晒す)
  • 人に動かしてもらう
  • GitHubソースコード晒す(晒せるリソースを使用する)
  • 何か1つ新しいものに挑戦する(技術的にでもアーキテクチャでも何でもok)

の4つでやっていこうと思います。(申請までは厳しそうなのでどんどん人目に晒す方向にしておきます。)
必要なら随時ルール付け足します。

なぜやろうと思ったのか

  1. 自分で1からiOSアプリ制作をしたことがない
  2. ゆえに実装の周辺知識に疎い
  3. 新しいものを試す手が遅い
  4. 人に晒すことに怖がりすぎてる
  5. 持続力がない

4, 5番もそうですが、特に3番目ですかね。
これは自分の最大の弱点だなぁと常々思っていました。
これを機にブログも書きながらやることで、やらざるを得ない状況に追い込もうと思います。

という訳で、栄えある第一弾はこちらの内容でやっていきます。

1週間目: 11/3(金)〜11/9(木)

作るもの

ジャンル?

STG with クイズ

挑戦

SpriteKit

理由

  • SpriteKitを触ってみたかったから
  • 昨日仕事でアプリを開発しながら思いついたから(といってもリソース使えないのでテキトーな画像に差し替えます。)

自分にしか分からないであろうメモ書き
f:id:takattata:20171103172212j:plain

作ろうとしてるものに関してはこんな感じですかね。

進捗

Xcodeにデフォルトで入っているGameのプロジェクトに、ラベルと絵が出てるだけのタイトル画面を挟んでみたところまでしか進んでないですね...。
新しい概念学ぶのが苦手だなぁという自分の特徴をひしひしと感じます。
cocoa2d-xの方がまだ早く出来そうだなぁ...。
AppleのSpriteKitのSampleプロジェクト(DemoBots: Building a Cross Platform Game with SpriteKit and GameplayKit)を見ながら進めてみようと思います。
が、今サンプル落として動かしてみたら
let fractionOfComponent = max(0, min(1, componentInSegment))
ここで転けて動かせない...。
=> let fractionOfComponent = Swift.max(0, Swift.min(1, componentInSegment)) で動くように'は'なりました。
学び足りないなー。楽しい。

まだ進んでないのでアプリについては書けることがないのですが、一つ言いたいことがあります。
XcodeからGameプロジェクト作ったことあります?シンプルなんですけどなんか格好良いんですよ!」
ということを声を大にして言いたい。
Xcodeのサンプルは、意外と簡単に出来そうだなー。と思わせてくれますね。

今後どうなっていくか分かりませんが、やると決めたからにはやっていこう!
がんばるぞー。