初心者のSWIFTアプリ開発記 ©たぬきち

肥満気味になってきたので筋トレに励んでいます! プログラミング頑張ります

【swift勉強】おすすめチュートリアル

基本がわかる

www.raywenderlich.com

www.raywenderlich.com

シングルトンなんて言葉は何回か聞いてきましたがまぁ放置。。。ですが上のチュートリアルで出てきたのでついに調べたらわかったようなわからなかったような・・・まぁあっちでもこっちでもインスタンス化するとわけわかんないからそういうの防ぐ的なやつなのかね!?🐶

復讐・・・復習は大事

パズルゲームチュートリアルと比べると基本的なことが多く、内容も大体理解できてきたことが多かったのですんなりできた。なんか一度簡単なチュートリアルをやるのも自分の理解度が確認できたり、足りていない箇所を少しずつ補えるのでいいですね・・・まぁそんなのんきなこと言える状況でもないんですが♪(´ε` )

【swiftアプリ開発】AVAudioPlayerで効果音を発生させるとラグい!

SKAction.playSoundFileNamed("neko", waitForCompletion: false)

これだと簡単だし、事前に読み込んでおけばラグもないのでいいんだけども音量調整ができないのが辛い。

stackoverflow.com

let qualityOfServiceClass = QOS_CLASS_BACKGROUND
let backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass, 0)
dispatch_async(backgroundQueue, {
    audioPlayer.play()
})

こんなの試してみたら確かに改善している!。けど若干遅れているような遅れていないような・・・でもやらないよりは全然いい!

ただ最近このdispatchなんちゃらもなれてきたっちゃ慣れてきたんだけど、メモリリークのトラウマがあるのでなんか怖いんだよね。意味もわからず使ってるし。ちょっと調べたけどなんか見る気なくしてダメだった。

【swiftアプリ開発】メモリリークの原因を特定できない

腹筋ローラー

腹筋🙅 腹筋ローラー🙆

気軽にできるし効果あるしいいね。全然できないけど

遷移

InitialViewController → GameViewController → InitialViewController・・・

となんどもやると落ちる。セグエは戻るときはunwindセグエだし他に原因が思い当たらない。とりあえずweakをつけてみたりしたけどダメ。いろいろ調べても原因分からないし、そもそももう提出する寸前だったので今更どこが原因が特定するなんてできないよぅ😢

なのでViewControllerを二つ使うのではなく、InitialSceneとGameSceneを一つのViewControllerで移動させる感じに直しました。正直storyboardでボタンの設置が楽だからviewControllerでタイトル画面を作っていただけでこだわりなんてなんもないしどっちがいいのかもわかんないし、むしろtransitionとかのエフェクトならspritekitの方が簡単だからそっちのほうがいいんだけどもね。まぁ画面設計はめんどくさいけど・・・

まぁ今回は方法を変えてなんとかなったけど、正直問題解決には至っていないからなんだかすっきりしない。かといって悩んでいる間はまったく進歩がないしね。こまったもんだなo(`ω´ )o

【swiftアプリ開発】fontを事前に読み込んで遅延解消

遅延解消

let preloadFont: UIFont!

override func didMoveToView(view: SKView) {
    preloadFont = UIFont(name: "Courier", fontSize: 10)
}

func abc(){
    let myText = SKLabelNode(fontNamed: preloadFont.fontName)
}

長らく悩まされた遅延。やっとその一部が解消されました🐶

ただ以前にやったチュートリアルで、

SKLabelNode(fontNamed: "フォントの名前")

こんな感じで記述してあったんだけど、そのようにしても遅延は解消されなかった。

・・・だが!!!!

その時はフォントネームを"Bold"と指定していたんです。"フォントネーム-bold"じゃなくてただの"Bold"。そして今回直った方法でも"Bold"でやると、preloadFont.fontNameがnilとなるのでだめだった。なのでSKLabelNode(fontNamed:"Courier")と指定していたら直った!?のかもしれない(直った)。

なのでどっちのやり方でもいいのかね。どっちがいいとかわからんからとりあえず2パターンくらいしっていおいて損はない!!!

【swiftアプリ開発】自称パズルゲームが蓮コラ見たいなってしまった

パズルゲーム制作

swiftの勉強始めて1カ月くらいの頃にやったチュートリアル

www.raywenderlich.com

当時はわけわかんないままやってましたね。columnとかタイプしにくいし意味もあやふやで本当に理解できなかった。

そして最近そろそろパズルゲームが作りたいと思ってきたので再度同じチュートリアルをやることに(`ω´ )!

配列やらenumやら当時よりはもちろん理解できているけど、それでもやっぱり理解できない部分も・・・まぁそれもそのうちわかるだろうと思って、今は理解度を深めるのに時間を割くよりもアプリ提出を第一に考えますがな🌜

考えるのめんどくさいからシンプルか!

パズルゲームだけじゃなくて全てのものに対していえるけど、もうなんにしても世の中にはあるからね...新たなものを生み出すなんて無理だし、面白くおしゃれなのを作る能力もない。でもせっかくチュートリアルをやったのだからアレンジしてアプリとして出す!

そんな感じでシンプルな自称パズルとして色々いじっていたんだけど、なんか蓮コラみたいに見えて気持ち悪くなった

・・・もう二度とこんなアプリいじらんわ!!!!

f:id:egoisticYK:20160309010311p:plain

continueとかbreakがイマイチ理解できていない

for array in arrays{
    if i am rich{
         guard let tanuki = array[0] else{continue}
        ・・・
    }
    if i am nice guy{
        guard let tanuki = array[1] else{continue}
   ・・・
    }

}

正直guardの使い方もなんと書くしかわかってなんだけども。。。

原因不明の不具合、そういう動作じゃいんだよっ!という感じの悩みがあるのだけど原因がわからない。 思いつくのはチュートリアルではif let なんチャラとなっていたのを guard let に変えたことくらい。そんでも持ってguarl let ~ else{return}をreturnだとダメなので適当にcontinueに変えた!

なんとなくcontinueにしていたけど、continueだとforの新しいループが始まるってことだやね!?

つまりは二つ目のif分は実行されることなくスルーされていたんだよね!? なんでもかでもguard let 使っていたんだけど if let に戻してからは大丈夫な気が・・・でももともと特定の状況でしか不具合起こってなかったんで正直治ったのかわからない。

よくわかっていないのにかっこつけてチュートリアルのコードを変えてひどい目にあいました

・・・ひどい目😢

【swiftアプリ開発】不具合の原因がわからず

単純ミス

単純ミスだとはわかっているんだけど、それがどこなのかなかなか分からず。やる気のあるうちにバンバンとリリースしようと思った矢先に変なミスで5時間ほど費やしてしまった。。。まぁなんか頭がぼーっとして同じ箇所ばっか見直していたので時間がかかるのもしょうがないっちゃしょうがないかったような( )

なにかなくして探すときもなんか同じ場所ばっか探しちゃうんですよね。ある程度探したら、また最初に戻ってなんども同じところをループする・・・

鍵とかも、ちゃんとかけたか気になりだしたらいてもたってもいられない。5、6回確認したりね・・・これは関係ないか(= ̄ ρ ̄=)

原因

blocks[row,column] = block
blocks[column,row] = block