Cocos2d-xで初めてゲームを作ろうとしたはなし 【Cocos2d-x Advent Calendar 2015 25日目】
誘導
この記事はcocos2d-x Advent Calendar 2015 - Qiitaの25日目です。
昨日はmk18 - Qiitaさんの記事でした。
本題
自己紹介
わたし「おっ、クリスマスじゃん。メリークリスマース」
わたし「今年はサンタさんに卒論と学士とインターンをお願いしてたんだよねー。わくわく」
わたし「……」
わたし「進捗がない……」
Cocos2d-xは卒論の進捗のなさとともに爆散した。
最終日に爆散してすいません。許してください。明後日発表なんです。
※バージョン3.9として聞いてください。
※Xcodeで開発してます。そもそもiOS以外の事はわかりません。iOSの事もわかってません。
Cocos2d-xを開発して思ったまとまりのないはなし
Hello, world!
cocos run -p ios
Git管理
.gitignoreがわからない。調べても誰か個人のgistくらいしか出てこない。有名なライブラリなんだし有志でメンテしてるものとかありそうだけどねえ。
入門サイトについて
3.9だっていうのに日本語の解説サイトがない。あっても2.xで、メソッド名変わってるので非常に辛い。公式リファレンスを読んだ方がいいということがわかった。
3.x系で役に立ちそうなところ:
無名というわけでもないのにぐぐらびりてぃ激落ちくん。
同じく+1.0で関数名変えてきたSwiftはXcodeパワーで新しい関数名を提示してくれたので、あれは超ありがたいことだったんだなあって思った。涙出そう。
いつもの
jsonについて
このままでは誰の役にも立たない記事になってしまうので、ソースコードを抜粋したいと思う。
今回、「きっと自分はどこかのサーバからゲームデータを引っ張ってきているんだ!」というシチュエーションを想定しjson形式でデータを保存した。実を言うと鯖と通信の手間を省いて.jsonファイルに直書きしている点については勘弁して欲しい。
さて、Cocos2d-xにはspineという何かが含まれており、そいつがjsonパースするやつを含むらしい。でも、微妙らしい。(参考: spine/Json.hを使うべきでない4つの理由 - Blog :: Meatware)
そこでpicojsonなるものを使ってみることにした。C++用なので、Cocos2d-xから離れてももうわたしはjson怖くない。
以下、入出力やら何やらで fstream
・ iostream
・ string
・ iterator
を使ってたり使ってなかったり。
picojson::value hogeValue; // パース結果が入る auto hogeJson = FileUtils::getInstance()->getStringFromFile("ファイル名"); // 本当ならここで鯖から引っ張ってくるはずなんだ if(!picojson::parse(hogeValue, hogeJson).empty()) { // えらー }
これで hogeValue
にパース結果が入っているので、
- 取り出し途中なら
.get<value::object>()
- 配列なら
.get<array>()
- 特定の型ならREADME.mdにパース後の型一覧が書いてあるので空気を読んで
.get<型>()
って書く
でなんとかなる。以上。それだけ。かんたん。
力不足を感じる
現状報告はコレの一言。これ以外に言うことがない。
作ってて非常にストレスがたまる。何しろ設計がわからないのですぐごちゃごちゃしてイライラする。超生産性がない。
遊びとしてのゲームの質の追求これをやってる暇はない- 設計の質の追求
- C++やCocos2d-xをはじめとする言語・ライブラリ群の使い方の追求
さてどうしようか。
設計について
.cpp1枚で済む程度のミニゲームならわーっと書いてしまうのだが、正直に言って今回はいろいろ試そうとして拡張しているのでそうはいかない。(その前提が1番いけないという説も十二分にあるが現実は直視しないものとする)
それに、いつものiOSアプリと違って計算量が多いので、すぐMacBookが熱くなって泣いてる。どうすればいいんだ。
幸いゲーム用のデザインパターンの本は幾つかあるようなので、読んだら多少の改善は見込めるかもしれない。しかしゲーム全体の設計について参考になりそうなものが今の所見つかってない。つらい。誰か教えてください。
C++/Cocos2d-x
今これを読みたくてしょうがない。でも読んだら卒論が破壊されると思って耐えている。
ちなみに、最近ゲームプログラマーの基礎について | Cygames Engineers' Blogという記事が出ていて、せやなー、という感じ。
グラフィック系を抜いたとしても先は長い。
で、何作ったの?
初心者らしく弾飛ばして敵爆破するゲーム。
スケジュール的に今以上の遊び面の機能をつけられず、スタート画面くらいが限度と思われるので人生はつらい。
画像はぴぽや・自作ゲーム・WOLF RPG向け素材配布 - トップページより。感謝。
総括
Cocos2d-x自体が他のものと比較して良いのかと言われると謎。他のを使っていないので良し悪しはわからないが、Unity.appやUnity垢が必要でないだけサクッと試しやすいのかもしれない。
それにSpriteをつくってaddするという流れはいつものアプリ開発と一緒なので、ゲームといってもあまり怖がらなくて良いんだなと思った。ただしiOS7、てめーはだめだ。出だしからやる気失せるからやめろ。
俺、卒論終わったら江添さんの本とキウイの本と公式リファレンス読むんだ……。
というわけで以上、最終日に変な記事を失礼しました。
良いお年を。来年は見た目にも計算量的にも綺麗なソースコードを書く1年にしたいですね。