book-loverのブログスマートフォン用の表示で見るbook-loverのブログこの広告は、90日以上更新していないブログに表示しています。ゲームの製作・開発iphoneのアプリケーション開発は、着々と、磐石なものになっているようです。開発ノウハウの講座まで作ってしまっています。それに対して、Google様のアンドロイド端末のアプリケーション開発の体制をみていると、どうもさびしいような気がしてなりません。下手に、OSのソースコードそれ自体も、公開してしまったので、アンドロイドに興味のあるディベロッパーのフォーカスも拡散したのかな。ゲーム・プログラミングの開発となると、さらに情報は少なく。アンドロイドの書籍を購入しても地図を使ったアプリケーションのノウハウにカタヨッテイマス。実際に、ゲームの開発会社に勤務していたことのあるGooglerが、アンドロイドで遊べる2次元のスクロールゲームを開発して、その開発・完成にいたるまでのいろいろなノウハウをプレゼンしています。クリス・プルエットという、Google東京オフィスで働いているゲーム・プログラマーです。彼の、プレゼンテーションスライドを部分的に日本語訳にしました。渋谷で、彼が講師になって、ゲームの学校開いてほしいですよ。ゲーム開発の実務のいったんが垣間見えるかもしれません。Development特に、再生開始してから、12分から15分のところで、試作ゲームのデモを開発者が自らやります。この動画の、12分から15分の間に、ゲームのデモがあります。レプリカ・アイランドという、タイトルの、横スクロール型のゲームです。http://www.youtube.com/watch?v=U4Bk5rmIpicこのプレゼンテーションのために、準備された、スライドです。話の内容のレジュメです。ゲームプログラムの全体の構造が図になっています。PSP,Wii.私は、クリス・プルエットといいます。私は、Androidで、ゲームを開発する人たちへの、営業を担当するプログラマです。言いたいことはひとつです。アンドロイドをつかって、何かを作ってください。こちらも、なにか、お助けできます。いまのポジションになる前は、Livelyというゲームの開発をしていました。Googleに入社する前は、ビデオ・ゲームの開発をしていました。いままでに、10作のゲームを開発しています。PSP、それと、Wiiです。pitfalls.アンドロイドで、ゲームをつくることゲームプログラムを書くのは、やっかいだ。アンドロイドも厄介だ。いうことで、アンドロイド携帯電話で遊べるゲームプログラミングを書くのは、やっかいなのに違いない。この仮説が本当かどうか、実際、プログラムを書いて試してみないといけない。いうことで、ゲームをつくってみた。おおくの、貴重なノウハウを得ることが出来ました。本日の公演の内容についてなぜ、ゲームなのか?なぜ、アンドロイドなのか?ゲーム・エンジン・アーキテクチャについて早く動く、JAVAのコードを書く。park.だれが、携帯電話の端末で遊ぶことができるゲームのことを気にしているのか?どれだけ、でかい山にあんたはいるのかということについてご説明。iphoneの79パーセントのユーザは、少なくとも、1本のゲームをダウンロードしている。Incという会社の資料から数字をとりました。)全世界で、ニンテンドーDSの端末を持っている人は、1億人以上います。(これは、任天堂が公表している数字です。)ソニーのプレステも、5千万台売れています。)任天堂のゲームボーイとゲームボーイアドバンスで、2億台以上、すでに売れています。携帯することができる端末で遊ぶことができるゲームは、たくさんの人に売り込みができるかもしれない。いままでに、販売されてきた携帯電話は、ゲームで遊ぶのには、あまりいい出来ではなかった。ゲームプログラミングを完成させる技術って、とっても特殊です。あなたが、実際にアプリケーションを作ろうとしている開発環境・プラットフォームが、質のいいビデオゲームを世に送り出すことができるようになっているなら。ほかのアプリケーションを開発することなんて、とても簡単なことです。audience.なぜ、AndroidというOSを組み込んだ携帯電話で遊べるようなゲームを開発することが、おいしいのか?伝統的なパソコン向けのゲームや、コンソール機向けのゲームを販売して利益を得る市場は、とても、ハイリスクになってきています。たくさんの人員、あふれるばかりの資金をもっているような、数のすくない大企業でないと、ゲーム開発にお金を使って、売り上げをとって、利益を回収することができなくなっています。従来、あまりなかった、プラットフォームで、より小さい素朴なゲームが、昔ながらのゲームファンと、ここ最近、アイフォンなどにはまってくれた消費者の間で、人気が出ています。XBOXゲームを開発して、販売してみて、たとえ売れなかったとしても、そんなに大きな損害を受けることはない。面白みがあって、多様なコンテンツが広がっています。アンドロイドというOSを組み込んだ携帯電話では、革新的なゲームを、インターネットが大好きなお客さんに提供することができる。genre.私が、開発したアンドロイド向けのゲームがどうして、このような形になったのか?私が、今回、開発にあたって、設定した目標は三つあります。アンドロイド用の楽しいゲームを生み出すこと。ほかの、開発者が、アンドロイド向けのゲームを作ってみる際に、使いまわしができるようなゲームプログラムコードを提供すること。ゲームの開発に関して、アンドロイド向けのプラットフォームの負荷テストを行いたかった。プログラムコードと、開発ツールしか使っていません。2次元のサイド・スクロールゲームを作りました。視差を生むように重ねられたレイヤー、タイル表示をベースにした世界、動くキャラクターすべての標準のハードウェアのボタンを押すようにつくりました。今回のゲーム開発にあたって、通常の業務時間のうち、20パーセントを費やすプログラマーひとりが、半年の間、開発作業をして、4ヶ月の間、フルタイムで働くアーティストが、投入されました。開発ツールは、コードで書くのがとても簡単なものです。このジャンルのゲームは、とても人気があるのですけど、現在、アンドロイド携帯電話で、このジャンルで遊ぶことができるゲームは少ないです。(つまり、この分野で開発ができれば、ヒットが狙えるかもしれない。)ここでゲームのデモ画面が入ります。object.ゲームプログラミング全体の構造についてプレゼンテーションのスライドの11枚目と12枚目を見てください全体の構造を組み立てるのには、いろいろな方法があると思います。基本的な問題は、どんな方法を使ったとしても似たようなものです。私の方法は、ゲーム・グラフというものです。すべてのフレームを横断することが出来て、時間と、モーション・イベントを入力として設定できて、スクリーンに出力させるべきもののリストをつくっていくようにするものです。子供が呼び出されます。一枚、一枚のフレームごとに、3世代まで下る子供が呼び出されます。その子供の親にもよりますが。ゲーム・オブジェクトは、ゲーム・、マネージャーの子供になります。マネージャは、あるアクティビティーのバブルが、カメラの周辺でおきるときにだけ、その子供のところに、降りてきます。ゲームオブジェクト、そのものは、ゲーム・コンポーネント(構成要素)のしたのグラフになります。ゲーム・コンポーネントは、オブジェクトの一つ一つの特徴や、特性を実行します。アニメーション構成要素すくなくとも、私は、こんな感じで、プログラムの全体の構成をつくりました。大事なところ、をひとつ。グラフにおける各ノードにおいて、時間は経過します。フレームレートから独立した動きが可能になっています。「描くもの」を集めてきます。このシステムは、実際に、スクリーンに何かを描くということはしません。Holderゲームプログラムを構成するのは、3つのスレッドです。プレゼンテーションの。スライドの14枚目を見てください。これは、アンドロイドOSで、動くアプリケーションの画面の一つ一つであるアクティビティーによって生み出されるものです。ゲームを起動させることと、インプットのイベントを受け取ることが、役割です。ほとんどの場合、休眠状態です。画面への絵の表示に関係しないすべてのゲームの構成要素が入っています。アニメーションコンポーネントなどなどです。ゲームグラフをもちます。レンダリングのスレッドサーフェス・ホルダーによって操縦されます。描画リストの中で、走ります。各フレームにおいてOPENGLに命令をします。このスレッドは、ゲームの内容に関しては、なにも知りません。constantly.私は、C++のプログラマーです。実は、今回のゲーム開発で、はじめて、JAVAのコードを書きました。この半年の間に、たくさんの「最適化」の仕事をしました。JAVAでゲームを書くために、最良な方法がなにか、探してきました。この最良の方法は、ほかのJAVAのアプリケーションを開発するときには、おそらく要求されないようなレベルです。私は、いくらかの、有益なアドバイスをみなさんに提供できると思います。リアル・タイムのゲームのプログラムを書くということは、柔軟性と、パフォーマンスの完璧なバランスを探していく訓練のようなものです。私のゲーム開発の方法論(これは、どのプログラミング言語を使うのかということとは、無関係です。)可能なかぎり、単純な実装からはじめる→ただし、デザインに関しては、将来のやり直しの仕事を考慮にいれます。スピードと、柔軟性については、柔軟性を優先します。ゲームの遊びやすさにダメージが行かない限りは。常に、そして、すばやく、プロフィールをするようにします。avoidable.メモリーの管理GCとは、OSのメモリ管理機能の一つ。プログラムが使用しなくなったメモリ領域や、プログラム間の隙間のメモリ領域を集めて、連続した利用可能なメモリ領域を増やす技術。これが不完全なOSは次第に利用可能なメモリが減ってゆくため、一定期間ごとに再起動を強いられることになる。Java言語の実行環境(JVM)は自身がガーベジコレクション機能を持っており、Javaプログラマがメモリ管理に気を使わなくてもいいようにしている。メモリーを確保しようとしたり、リリースしたりしないようにしましょう。GCは、ゲームを、100ミリ秒から300ミリ秒とめることになります。これは、リアルタイムのゲームにとっては致命的です。メモリー確保は、なるべく、アップフロントで。自然な停止時間になるまで、ものを、リリースしてはいけません。GCを手動で起動させてください。それが、安全だということがわかったら。Service)と呼ばれるGUIツールが用意されています。それでは実際に起動してみます。エミュレーターが起動している場合は一度終了して下さい。コマンドプロンプトから「ddms」と実行します。メモリが、どうやって確保されているのかを、追跡するために、DDMSをつかってください。JAVAは、メモリーを、常に、確保します。etcetc.このうちのいくつかは、避けられるものではありません。implementations.メモリーの確保に関係するJAVAのゆがみC++のように、JAVAを扱っている多くのJAVAのユーティリティーオブジェクトは、メモリーを確保している。イテレータそうであるように、コレクションもアウトしている。これは、わすれてください。(これらは、とても重いです。読み専用である必要がある文字列を返すあらゆるもの(たとえば、Class.getXXX();)DDMSは、あなたのツールになります。名前をつけるためと、文句をいうため。私よりましなJAVAのプログラマは、すでにあるフレームワークの修正・補いを、メモリー確保をしない実装によってなしとげることができるでしょう。関数の呼び出しはやってはダメもちろん、これは極論ですが。関数の呼び出しは、高くつきます。関数のインライン展開に頼ることもできません。静的な関数を、なるべく使うようにしましょう。インターフェイスを通じて、関数の呼び出しをやってはいけません。私が、C++でコードを書いているときは、アクセサーと、ミューテイターはよき友でした。JAVAのインナーループにおいては、その出番はありません。JNIとは、Java言語で開発されたプログラムから、他の言語で開発されたネイティブコード(特定のプラットフォームでそのまま実行可能なプログラム)のプログラムを利用するためのAPI。Javaプログラムからプラットフォーム固有の強力な機能を利用することを可能にするが、そのプラットフォームでしか動作しなくなる。http://www.brpreiss.com/books/opus4/html/page604.html#SECTION0018331000000000000000たくさんのJNI関数には、注意してください。functions.関数の種類によって、呼び出しにかかる時間が違ってきます。Traceview!ローカル変数をつかってください。フィールドにおいては、なるべく、最後のキーワードを使うようにしてください。G1という、アンドロイドの携帯電話の端末のように、いくつかのハードウェアにおいては、少数演算ができません。少数をつかった演算はプログラミングに組み込まないでください。これに類似したものを、つかうようにしてください。Printingこのメソッドは、時間がかかります。TraceView用ログを/android/sdk/tools/traceviewで開くと、関数の呼び出しシーケンスと、それぞれの関数でどれだけ時間がかかったかをグラフィカルに表示する。これらのログは、donut版のAndroidを載せたZaurusC3000で取得した。ちなみに、このTraceViewの存在は、前回のAndroid勉強会@金沢*2で行われた、おおいしさんのプレゼンで知った。Traceviewを使うようにしましょう。guaranteed.アンドロイドで、描画をする方法についてキャンバスCPUをベースにした2次元の描画になります。ほとんどのアンドロイドのアプリケーションのユーザインターフェースにおいて採用されています。小さな数の転送をするのに、はやい処理ができます。(キャラクターを10個、画面に出力させるのに、16ミリ秒かかりませんでした。)単刀直入で、使いやすいです。ES2次元と3次元での描画ができます。(たとえば、アンドロイドOSを組み込んだ携帯電話端末であるG1)のハードウェアにおいて、加速されています。Canvasというソフトウェアより、より複雑なスケールに対応しています。さまざまな2次元の描画が出来ます。Object(VBO)も似た機能VBO構造になっています。サポートされています。extensionの組み合わせが、2次元の描画を、G1という携帯電話の端末でゲームをやることを想定すると、一番、はやいように思え素。すべてのプラットフォームをサポートするかどうか、定かではない。開発にとりかかるまえに、glGetString(GL10.GL_EXTENSIONS)というメソッドをかならず、チェックをしてください。Canvasもそんなに悪くはありません。フレームごとに、そんなにたくさんの「絵」が必要でないなら。すべてのフレームに、「絵」が必要ではないなら(たとえば、パズルゲームなどはそうです。)SpriteMethodTest→これは、私が、作成したゲームのプログラミングの中で、いろいろなメソッドで、描画をしてみたものの処理速度を比較したものです。method.ゲームの背景画面を作成する。Islandというゲームでは、3層のレイヤーを使っています。ひとつの、静的な大きな画像タイルの地面の背景地図それと、最前面になる地図です。タイル地図の層は、32x32枚のタイルで出来上がっています。1枚のレイヤーごとに、すべてのフレームに対して、150のタイルを描画しないといけないことになります。(最悪の場合)よりたくさんのレイヤーを使うのは、すばらしいことだと思います。背景を描画するということは、このゲームのプログラミングにおいて、一番、高くつく、オペレーションになっています。実際、ひとつの、静的な画像は、はやいです。512x512noテクスチャーとなります。タイルの地図が、一番フレームの時間を食うことになります。どの方法で描画するのかということによって、CPUやGPUの性能にもよりますが。ユニット、略してGPU)とは、パーソナルコンピュータやワークステーション等の画像処理を担当する主要な部品のひとつ。ユニット、VPU)という名称もある。コンピュータシステムにおいて画像表示を担当するASICであるグラフィックコントローラから発展したもので、GPUはジオメトリエンジンなどの専用ハードウェアによって画像データ処理を行う集積回路をさす。現在の高機能GPUは高速のVRAMと接続され、グラフィックスシェーディングに特化した演算器を複数搭載するマイクロプロセッサとなっている。行うコンピュータにおける中心的な電子回路である。中央処理装置(ちゅうおうしょりそうち)あるいは中央演算処理装置(ちゅうおうえんざんしょりそうち)とも言われる。タイルの背景画面を描画する。タイルの地図として、単一の、大地の形状をなしているテクスチャーを使う。ひとつひとつのタイルを選択することで、テクスチャーを切り取り、調整をする。