Your SlideShare is downloading. ×
『こなへん』ができるまで ☆リリース直前編☆
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

『こなへん』ができるまで ☆リリース直前編☆

7,476
views

Published on

第3回iphone_dev_jp 東京iPhone/Mac勉強会で発表したスライドです

第3回iphone_dev_jp 東京iPhone/Mac勉強会で発表したスライドです

Published in: Technology

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
7,476
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
6
Comments
0
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 『こなへん』ができるまで ☆リリース直前編☆ 西山信行 5mingame2
  • 2. はじめに• 私はこれまでにiPhoneアプリをシ リーズ物とかで12本くらいリリース している、ほんのり専業アプリ開発 者です。• Objective-Cは5年目、C++は2年目。
  • 3. はじめに• 5月末に、生まれて初めてほぼC++で書 いたiPhoneアプリ『こなへん』が無事公 開されました!皆さんのおかげです! 多謝。 – 今回は実験的に、拙ブログにて公開直前 バージョンのソースを配布していますので 併せてどうぞ(スライドの最後に案内があり ます)
  • 4. はじめにそれでは、まずはみなさん一番困っているであろう『こなへん』の発音から。
  • 5. 前回までのあらすじ• 新ジャンル「マゾプログラミング」• C++とOpenGLとOpenALでマルチプ ラットフォームなゲームが作れる• 「3M」プログラミング – 画像・サウンドの読み込み処理ない…マゾい – 日本語テキスト表示ない…マゾい – iOSライブラリ使えない…マゾい
  • 6. 今回のマゾプログラミング• GameCenter & iAd対応はどうした• ローカライズはどうした• テスト&デバッグはどうした• 動作パフォーマンスはどうした
  • 7. GameCenter & iAd対応
  • 8. GameCenter & iAd対応• アプリはUIViewControllerが1つだけ の単純な構造 –XcodeのOpenGL ESのひな形まんま
  • 9. GameCenter & iAd対応• まず、そのUIViewControllerに GKLeaderboardViewControllerDelegateと ADBannerViewDelegateを担当させる
  • 10. GameCenter & iAd対応• GameCenter.mmというソースを用意。 GameCenter関連を処理する関数群をそ こに押し込んだ。• クラスにはしないですべて関数で実装 – これだとC++のコードから関数が呼び出せる。• 関数内では [[NSString alloc] init]; とか 色々普通に使えます。
  • 11. GameCenter & iAd対応
  • 12. GameCenter & iAd対応
  • 13. GameCenter & iAd対応
  • 14. ローカライズ
  • 15. ローカライズ• iPhoneの NSLocalizedString() を真似 る所からスタート –定義ファイルをutf-8で用意 • en.langとかjp.langとか –[元のテキスト] TAB [翻訳テキスト] –その定義ファイルをstd::mapに流し込 むだけ~
  • 16. ローカライズ
  • 17. ローカライズ• さて、準備はできたけど、C++で 実行環境が「英語」なのか「日本 語」なのかはどうやって調べよう か…
  • 18. ローカライズ• Windowsはstd::localeを使って言語環 境を判定 std::locale lc(“”); if (lc.name() == std::string(“Japanese_Japan.932”)) { /* jp.langを読み込む */ }
  • 19. ローカライズ• OSXは CFCopyLocalizedString() で判定• iOSは NSLocalizedString() で判定• どういう事?
  • 20. ローカライズ• OSXとiOSは Localizable.strings を用意 するだけで読み込む定義ファイルを 決められる。簡単!• “langFile” = “en.lang”; とか書いておく。 – NSLocalizedString(@” langFile”, 0) で読み込む定義ファイルを決めればいい。
  • 21. ローカライズ• そして、 NSLocalizedString() 同様 std::string text = localize.get(“hoge”); みたいにして、文字列を取得するよう になっています。
  • 22. テスト&デバッグ
  • 23. テスト&デバッグ• 僕はプログラムの動作中に状況を簡 単に確認できるデバッグプリントが大 好きなので、いろんな場所で std::cout << “座標:” << x << “,” << y << std::endl; とかしたくなるのですが…。
  • 24. テスト&デバッグ• Xcode –コンソールに表示される• Windows –へんじがない ただの しかばねの ようだ
  • 25. テスト&デバッグ• マリアナ海溝よりも深い理由がある のか。この件、VisualStudioはいいか げん対応してほしい! – VisualStudio2010調べ• でも自分でなんとかできちゃった。
  • 26. テスト&デバッグclass DbgStreambuf : public std::streambuf { std::vector<char> str_;public: int_type overflow(int_type c = EOF) { str_.push_back(c); return c; } int sync() { str_.push_back(¥0); OutputDebugString(&str_[0]); // VSの出力に文字列を表示する str_.clear(); return 0; }};
  • 27. テスト&デバッグDbgStreambuf dbgStream;std::streambuf *stream;stream = std::cout.rdbuf(&dbgStream);std::cout << "hogehoge" << std::endl;// VSの出力にちゃんと出力されるstd::cout.rdbuf(stream);// 元に戻す
  • 28. テスト&デバッグ• NSLog() は、リリースビルドだと処理 がスキップされるようになっている。• std::cout も同じようにできないだろう か…
  • 29. テスト&デバッグ• こう書くことで解決。 #ifdef _DEBUG #define DOUT std::cout #else #define DOUT 0 && std::cout #endif DOUT << “hoge piyo” << std::endl;
  • 30. テスト&デバッグ• その他デバッグ機能の紹介 –キーを押してスナップショット –キーを押してどこでもポーズ –連続スナップショット –マップ確認&データ変換ツール –地球プレビュワー
  • 31. 動作パフォーマンス
  • 32. 動作パフォーマンス• 『こなへん』の地球は、1つの球体 データをテクスチャを切り替えたり して何度も重ね描きしています。
  • 33. 動作パフォーマンス• 開発中期、iPhone4でだけ30fpsになる 現象が発生して慌てた。 – iPhone3GSは常時60fps。• iPhone4の画像プロセッサには Retina ディスプレイはしんどいらしい。 – これをどうやって解決しよう…>_<
  • 34. 動作パフォーマンス• Xcode4から導入された OpenGL ES Performance Detective Instruments(OpenGL ES Analysis) を使って描画負荷の原因を調べてみた。 – アップルから配布されている「iOS OpenGL ESプ ログラミングガイド(日本語!)」にかなり親切な 解説があります。
  • 35. 動作パフォーマンス• 診断の結果なんと 「頂点バッファを使え」 「テクスチャ圧縮を使え」 と具体的に指摘されました。英語で ですが…(汗) –これに対応したらiPhone4でもほぼ 60fpsを達成できた
  • 36. 動作パフォーマンス• CPU負荷はXcodeの Instruments (Time Profiler) で計測。CPUの負荷を計測したり、処理 の重い関数をリストアップしてくれる! – これもアップルから配布されている「Instruments ユーザガイド(日本語!)」で詳しく解説されてい ます。素敵すぎます。
  • 37. 動作パフォーマンス• 計測の結果「プログラム最適化の 必要なし」 – C++初心者ゆえのダサい書き方は放置 – 計測で問題なければ、最適化をする必 要は「まったく」無い。
  • 38. 動作パフォーマンス• 問題が発生した時に、まずは処理 負荷を計測、「負荷となっている箇 所」を絞り込む作戦で問題を解決 できた。• 結果、初代iPadでもほぼ60fps!• 僕は勘で直せるほど精通してない ので…:P
  • 39. まとめ
  • 40. まとめ• GameCenter & iAd対応 – iOSに特化した処理なので、大人しくObjective-C で書いた。• ローカライズ – OSXやiOSのを真似て自分で実装した。• テスト&デバッグ – デバッグビルドで検証用の機能を実装したら楽 できた。• 動作パフォーマンス – 各種検証用ツールがあるXcodeは最高!
  • 41. 余談• 今回サポートページをfacebookに 作って直接リンクを設定したけどリ ジェクトされなかった:D – facebookのアカウントが無くても、アプリ の情報や連絡先が見られるようにした からいい…のかな?
  • 42. おしまいです• こんな感じですが…マゾっぽくないみな さんの参考になりましたでしょうか… – blog 「でらうま倶楽部」 • http://blog.livedoor.jp/tek_nishi/ – twitter • @5mingame2 – Facebook • 5mingame2