Google+

PASTEL ORBIT ゲームプログラマが語る / (旧Team Dyquem!)

本業はPS4やPS3等のゲームプログラマ。もう一つの本業である文筆と、ちょっと経済、SFドはまり体質を語る。Team Dyquemとか言ってるけれどもアプリは一人開発

パステル オービット
.
new

TeamDyquem

Dyquem

検索フォーム

Twitter

全記事表示リンク

最新記事

アクセスランキング

[ジャンルランキング]
コンピュータ
875位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
143位
アクセスランキングを見る>>

QRコード

QR

Mail

アプリに関するご意見等は、下記メールフォームよりお問い合わせ下さい。
直接のご連絡は、team.dyquem[at]gmail.com にてお受け致します。

Your address:
Message:

スポンサーサイト
-------- --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
rule

シリーズ記事まとめ

Aニュース、ガジェット通信 寄稿記事

『連載.jp』寄稿「ゲームプログラマが語る「プロ棋士に勝ったAIは、タクシー基本無料化をもたらす?」」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る ”買わない理由”がもたらす充足感と、開発者達の心理」」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る アップデート版に潜む開発者モラルハザード」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る ソフトやアプリと携帯ゲーム課金における経済行動学」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る。新しいゲーム機が定期的に生まれる理由」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 楽しさの仕組み ゲームメカニクス」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 3Dテレビとゲームの微妙な関係 その打開策」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 無料アプリのビジネスモデルと舞台裏」
『Aニュース/ガジェット通信』寄稿「新発表ラッシュに見るクラウド大航海時代の幕開け」

■ゲーム制作初心者さん向け系

ゲームプログラマが語る。なんちゃってリードプログラマにはなるな!ゲーム造りで放棄してはいけない大切な事
ゲームプログラマが語る。今さら聞けないフレームレートに纏わる話。秒間60?16ミリ?
ゲームプログラマが語る。「浮動小数点」と商業レベルで上手に付き合う方法
「ゲームプログラマが語る。ゲーム制作初心者の方へ小ネタ「クォータービュー入門」」
「ゲームプログラマが語る。「正しい乱数」が彩る確率世界とエンターテイメント」
「iPhoneアプリ、ゲーム制作初心者の方へ小ネタ「線分と円の交差」」
「iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタ「2Dベクトル」」
「iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタを一つ」

「プロのゲームプログラマとして、ゲーム製作に関する書評を」シリーズ

ゲームプログラマが語る書評:「MMORPGゲームサーバープログラミング」を読んでみた
ゲームプログラマが語る書評:「ゲームプログラマになる前に覚えておきたい技術」を読んでみた
ゲームプログラマが語る書評:「ゲームエンジン・アーキテクチャ」を読んでみた

■個人でも出来る、マルチプラットフォーム開発関連

ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その4
ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その3
iPhoneアプリ作者が語る。マルチプラットフォーム化その2・アトミック型定義のススメ
ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その1

■リリースしました系

PASTEL-ORBIT/TeamDyquemアプリ第19弾。ローグライク決定版「隣人は魔王」をリリースしました。
TeamDyquemアプリ第18段。ご当地バトルRTS「埼玉クエスト」をリリースしました。近隣の県を滅ぼそう(*-_-*) 埼玉以外でも遊べます #47app
アプリ新作「ネコりす マカロン」をリリースしました
埼玉県ご当地アプリ、「タッチ the さいたま」をリリースしました #47app
アプリ新作「ひよこガーデン」をリリースしました
TeamDyquem新作。結構真面目なアクションパズル「ネコりす」リリース
iPhoneアプリ作者が、iアプリ「泡リス女子部 for iアプリ」をリリースしました
自作iPhoneアプリ改良版、「ネコがゴミのようだネ:アーケード」をリリースしました
iPhoneアプリ作者が、「まりも育成」for iモードをリリースしました
iPhoneアプリ新作 「ナタ・デ・ネコ」 をリリースしました
秋刀魚は関係ないけれど、新作「i-Wishbone」リリース
アプリ新作「ネコがゴミのようだ」。プロモ動画をアップしてみた
「泡リス 女子部」、販売開始
AppBankにまりも紹介記事が!

ゲームプログラマとして参加。ご当地47都道府県アプリプロジェクト #47app

□ビジネス系

ゲームプログラマが語るドコモiPhoneと、インフラから合法的に大金を抜くスキーム
ゲームプログラマが語る。秀丸エディタのビジネスモデル

■SFネタ系

ゲームプログラマがSFを語る。意識はどこからやってきて、死んで、そして何処へ行く?
ゲームプログラマが語る。気の遠くなるスキもない程の、宇宙の話
iPhoneアプリ作者が語る。流れ星に馳せる真実
iPhoneアプリ作者が警笛。どこでもドアの使い過ぎには注意
iPhoneアプリ作者が語るSETI理論。異星人さんは何処!?


人気ブログランキングへ
comments(-)|trackback(-)|スポンサー広告|--------_--:--|page top

ゲームプログラマが語る。ゲーム制作初心者の方へ小ネタ「クォータービュー入門」
2011-12-16 13:20



 まるでヨドバシカメラWiFiスポットに何百人と集まったドラクエすれ違い通信合戦であるかの如く、年の瀬を彩る夜宴誘惑の嵐が空間を駆け巡る昨今、天駆けるワルキューレな女戦士達も銀河鉄道999号に無賃乗車し裸足で逃げ出しかねない多忙な時期と成り果てている方も多い事でありましょう。

 はい。それはわたくしの事でもある様です。本業が良い感じに終盤を迎えておりますもので、なかなかに小忙しい日々が続きますが、本惑星滅亡までもあまり時間がありませんからね。楽しんで過ごしていきたいもので御座います。

今日も今日とて人生がタラバガニなTeamDyquemで御座います。
みなさまこんにちは。

 先日はですね、数年前に超多忙を極めた某プロジェクトメンバーによる久しぶりの夜宴で御座いました。3年前のクリスマスイブ当日夜中2時、徹夜作業中のメンバー男6人がぶち切れて呑みに行った居酒屋へ再び集う、題して「エースワン眠らせナイト再び」。大変にカオスな宴で御座いました。
 ふと立ち寄った居酒屋にて、妙に業界的な話が聞こえてくる事が御座いましたら、それはもしかしたらゲーム制作者達かもしれません。彼等が紡ぎ出す水面の静かな囁きに、耳を傾けてみるのもまた一興かもしれませんよイヤうっかり聞き耳を立てようものなら毒舌乱発で手元のウズラの卵も孵化するかもしれませんお気を付けて。


久しぶりのエントリーなもので、冒頭走り出し部分が暴走の憂き目にあってしまい、予定していたスーパー後輩 「Come-Come Cat はにわ」君の紹介が割愛されるというまさかの展開になりましたw 彼の紹介はまた次回にでも改めて。

Come-Come Cat

テレビでも紹介された彼の大ヒット作品「能力+支払い技術検定」はコチラ!


rule

さて今回は、久しぶりの「ゲーム制作初心者さん向け系」で御座います。
これらはシリーズエントリーとなっておりますので、興味のある方は、以下につきましても併せてご覧頂けましたら幸いです。

「ゲームプログラマが語る。「正しい乱数」が彩る確率世界とエンターテイメント」
「iPhoneアプリ、ゲーム制作初心者の方へ小ネタ「線分と円の交差」」
「iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタ「2Dベクトル」」
「iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタを一つ」


rule

 先日リリースさせて頂きました、「ネコりす マカロン」。
前作「ネコりす」に引き続き、沢山の御愛好を頂いております。本当に有り難う御座います。嬉しいです。

 さて、本作「ネコりす マカロン」におきましては、所謂クォータービューという手法を用いた作品と相成りました。斜めに見下ろした視点より描く手法で、ファイナルファンタジー・タクティクス等でもお馴染みでありましょう。

 ゲームやエンタメ系アプリにおきましては、2Dや3D等色々な種類の表現方法がありますが、今回は、それらがどういった図法で描かれているかという点に焦点を充ててみましょう。

 図法に関して言えば、例えばその作品が2D表示物で構成されているか、若しくは3D空間を用いた表現であるかという点は、図法そのものにはあまり関係在りません。
これらは総じてどういった投影方法を用いるかという点に絞る事が出来、その結果が図法であるのです。所謂、プロジェクション方式の採択ですね。

 上記2D表示物で構成された例えば拙作「ネコりす」の様なゲームにおきましては、単に2Dゲームと言えばそれまでなのですが、投影方法という観点からみればこれは「平行投影」という方式に当てはまります。

 また、3D空間を主人公が走り後ろからカメラが追いかける等、なんでも構いませんが、こうした所謂一般的な3Dゲームであるならば、通常、「透視投影」という方式が用いられています。

 さて、これを踏まえた上で、クォータービューとは何でしょう。

 感覚的には、上記「平行投影」と「透視投影」の中間的な形式であるかの様な印象を持つかもしれません。なるほど、それもその筈。「距離が遠くても縮小されない」という平行投影の持つ特徴と、「物体の三面を同時に描ける」という「透視投影」の特徴を併せ持っておりますので、その様に感じるのでありましょう。

 しかし、クォータービューとして表現されるこの特徴的な投影方法にも勿論名前がついており、これらは一般に「等角投影」と言われています。
ファイナルファンタジー・タクティクスや「ネコりす マカロン」が採用した手法は、ゲームにおける等角投影の中では最も一般的に用いられているであろう、「二等角投影」という手法です。3つの直交座標軸の内2つの内角が等しい故に、二等角となるわけですね。

以下の様に、斜辺の角度が各軸二対一となっているという特徴を持っています。
こうして図にしてみると、ぐッとファイナルファンタジー・タクティクスっぽくなりますね。なりませんね。


□□□□□□■■□□□□□□
□□□□■■□□■■□□□□
□□■■□□□□□□■■□□
■■□□□□□□□□□□■■
□□■■□□□□□□■■□□
□□□□■■□□■■□□□□
□□□□□□■■□□□□□□



この事を前提とした上で、Photoshop等による作図を行い、実機にて描画を行うというわけですね。
クォータービューにおける実機描画につきましては、その優先順位や高さが変化する部分の陰影処理等、考慮しなければならない点が沢山あるわけですが、それはまた別のお話。

尚、超有名MMORPGである「ウルティマ・オンライン」。
このゲームにおけるクォータービューは少し特殊な感じがする事でしょう。上記の「二等角投影」ではない事は明かでありますが、これは「不等角投影」という方式で、三つの直交座標軸の内角が全て異っています。

こうなると制御の難易度もグンと増しますが、より不思議な体験を得られるわけですね。

透視投影による完全3Dゲームが多い中、敢えてクォータービューに挑戦してみるのも又一興かと思います。

それでは皆様。良い週末を。
TeamDyquemでした。



rule

シリーズ記事まとめ

Aニュース、ガジェット通信 寄稿記事

『連載.jp』寄稿「ゲームプログラマが語る「プロ棋士に勝ったAIは、タクシー基本無料化をもたらす?」」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る ”買わない理由”がもたらす充足感と、開発者達の心理」」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る アップデート版に潜む開発者モラルハザード」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る ソフトやアプリと携帯ゲーム課金における経済行動学」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る。新しいゲーム機が定期的に生まれる理由」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 楽しさの仕組み ゲームメカニクス」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 3Dテレビとゲームの微妙な関係 その打開策」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 無料アプリのビジネスモデルと舞台裏」
『Aニュース/ガジェット通信』寄稿「新発表ラッシュに見るクラウド大航海時代の幕開け」

■ゲーム制作初心者さん向け系

ゲームプログラマが語る。なんちゃってリードプログラマにはなるな!ゲーム造りで放棄してはいけない大切な事
ゲームプログラマが語る。今さら聞けないフレームレートに纏わる話。秒間60?16ミリ?
ゲームプログラマが語る。「浮動小数点」と商業レベルで上手に付き合う方法
「ゲームプログラマが語る。ゲーム制作初心者の方へ小ネタ「クォータービュー入門」」
「ゲームプログラマが語る。「正しい乱数」が彩る確率世界とエンターテイメント」
「iPhoneアプリ、ゲーム制作初心者の方へ小ネタ「線分と円の交差」」
「iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタ「2Dベクトル」」
「iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタを一つ」

「プロのゲームプログラマとして、ゲーム製作に関する書評を」シリーズ

ゲームプログラマが語る書評:「MMORPGゲームサーバープログラミング」を読んでみた
ゲームプログラマが語る書評:「ゲームプログラマになる前に覚えておきたい技術」を読んでみた
ゲームプログラマが語る書評:「ゲームエンジン・アーキテクチャ」を読んでみた

■個人でも出来る、マルチプラットフォーム開発関連

ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その4
ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その3
iPhoneアプリ作者が語る。マルチプラットフォーム化その2・アトミック型定義のススメ
ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その1

■リリースしました系

PASTEL-ORBIT/TeamDyquemアプリ第19弾。ローグライク決定版「隣人は魔王」をリリースしました。
TeamDyquemアプリ第18段。ご当地バトルRTS「埼玉クエスト」をリリースしました。近隣の県を滅ぼそう(*-_-*) 埼玉以外でも遊べます #47app
アプリ新作「ネコりす マカロン」をリリースしました
埼玉県ご当地アプリ、「タッチ the さいたま」をリリースしました #47app
アプリ新作「ひよこガーデン」をリリースしました
TeamDyquem新作。結構真面目なアクションパズル「ネコりす」リリース
iPhoneアプリ作者が、iアプリ「泡リス女子部 for iアプリ」をリリースしました
自作iPhoneアプリ改良版、「ネコがゴミのようだネ:アーケード」をリリースしました
iPhoneアプリ作者が、「まりも育成」for iモードをリリースしました
iPhoneアプリ新作 「ナタ・デ・ネコ」 をリリースしました
秋刀魚は関係ないけれど、新作「i-Wishbone」リリース
アプリ新作「ネコがゴミのようだ」。プロモ動画をアップしてみた
「泡リス 女子部」、販売開始
AppBankにまりも紹介記事が!

ゲームプログラマとして参加。ご当地47都道府県アプリプロジェクト #47app

□ビジネス系

ゲームプログラマが語るドコモiPhoneと、インフラから合法的に大金を抜くスキーム
ゲームプログラマが語る。秀丸エディタのビジネスモデル

■SFネタ系

ゲームプログラマがSFを語る。意識はどこからやってきて、死んで、そして何処へ行く?
ゲームプログラマが語る。気の遠くなるスキもない程の、宇宙の話
iPhoneアプリ作者が語る。流れ星に馳せる真実
iPhoneアプリ作者が警笛。どこでもドアの使い過ぎには注意
iPhoneアプリ作者が語るSETI理論。異星人さんは何処!?


人気ブログランキングへ
スポンサーサイト

Theme:プログラミング
Genre:コンピュータ

comments(0)|trackback(0)|ゲーム制作初心者の方へ|2011-12-16_13:20|page top

ゲームプログラマと初歩物理。「泡」みたいな動きの接触判定ってどーするの?ルポ
2011-08-24 13:31



 「鼻ペチャなんて気にしないわ」って、別に気にする必要は僕も私も無いと思いますとも時代はもはや先進の一途、ネット華やかかりし個性溢れる現代に鼻ペチャ一つ気にしていてはクリエイティブな事なんて出来やしないどころか寧ろ衰退も不可避、自己主張と表現が最も重要な武器となる昨今寧ろ頼もしいけれど、いやいやそうでは無くて、「鼻ペチャを気にしない」という無味乾燥な主体を初対面冒頭に持ってくるその協調性の無さに関してはもう少し考えていこうよキャンディさん

 「意味の判らない書き出し」という大会があるならば、本年度の優勝は頂いた。

 暑い日が続きますが、如何お過ごしでしょうか。天気予報の警告を無視し傘を持たず、暴風雨に晒された翌日にまた猛暑。こんな惑星にはもうすっかり辟易している皆様こんにちは。
 良くも悪くも場自答増、いつだって二律背反TeamDyquemで御座います。


rule

 さて今回は、シリーズ化して参りましたゲームプログラマ初心者さん向けエントリーと致しまして、衝突判定について触れてみたいと思います。

 シリーズ企画と致しまして、以前のエントリー

ゲームプログラマが語る。「正しい乱数」が彩る確率世界とエンターテイメント

ゲームプログラマが語る。宇宙に意識が生まれる仕組みと、バグテスト

ゲームプログラマが語る。竜田揚げと並列処理のススメ

 上記等も、中華屋さんのメニューの如しラインナップとして取り揃えて御座います。
是非併せてご覧頂けましたら、幸いです。幸いなのです。

 さて。


rule
お手軽実装。個性的な衝突判定処理

 ゲームプログラマを志し、若しくは興味を抱いた方ならば、少なからず興味をそそるであろう衝突判定プログラム。エンターテイメント系ソフトを彩る上におきましては、よもや欠かす事の出来ない技術であります故、それはもう古今東西種々語られ尽くしてきた感が漂っております。
 しかしながら、重要な技術でありますが故にこそ、一様に万能な解というものが普遍的に存在している訳ではありません。様々な効率化と工夫が重ねられ、現代の、それこそ星の数程の多種多様なアプローチが存在するに至っている訳でありましょう。

 線分や移動球と平面法線から数学的に解決していくという土台の部分に関しましては、言わば”通例”と呼ばれる、稼働実績の多い安定した手法を選択する事となります。しかしながら、例えば3D空間を自在に行動出来るアクションゲーム等にて、街並みを構成する建物の壁に接触判定を行うシチュエーションにおける、壁をこすりながらも進行を妨げない様なアルゴリズムは、通例とは言えそうですが、その実アプリ毎の個性として実装しなければならない一面を持っています。

 ま、堅い話になりそうな気配でありますが、ここは視点を例えば拙作脱力ゲーム群へ置き換えてみましょう。振り返ってみれば拙作アプリ達。「毬藻」だの「泡」だのが良く出てくるなと改めて思いましたが、所謂「柔らかくて丸いもの」に焦点を当ててみましょう。

 まず反例と致しまして、例えば何かが何かに当たったという情報だけを扱いたいのであれば、上記冒頭部分の様に数学的に一発で算出可能であり、それは衝突判定の根幹にある普遍的な通例に従えば事の足りる、あまり面白みのない話となりましょう。それが球であるならば、中心点からの距離と、双方半径の合計を比較すれば望む結果が得られるでしょう。しかしながら本エントリーにて扱う話題と致しましては、衝突を検知したその後のインタラクティブな展開を含めた「広義の衝突判定」と定めてみたいと思います。

 先に例を挙げました「柔らかくて丸いもの」とは何でしょう。拙作アプリに登場する「毬藻」や「泡」は想像に易しいかとは思いますが、風船やスライムの様な生き物も良い例でしょう。


 こうした物体、例えば「泡」がのんびりと漂いながら空間に二つ。
さてここから数秒後、どんな光景を想像しますか?


 二つの泡がユルユルと接触するとしましょう。
「割れる」ってのはナシです。話が終わってしまいます。泣きます。
 ここは、60分の1秒程にごくごく短いスライスした時間単位で考えてみましょう。まず、触れあう瞬間が訪れます。お互いに速度を持っていますので、触れあいながらも双方は更に食い込む様に進んでいく事でしょう。しかし、ある程度食い込んでいくとお互いの反発力に相殺され、今度は跳ね返って反対側へ飛んでいく事でしょう。
 この仮定モデルがビリヤードの玉なのであれば、接触の瞬間から反射を行えば良いのですが、泡の様な物体にはもう少し気の利いた処置が必要です。と言いましても、ここでそれを物理演算的お堅く実装しその解説を行う事も可能ですが、私個人は、ユルユル脱力アプリでそこまで堅苦しく実装する事に意味を見出さないタイプでありますので、もう少し簡易な方法をご紹介しましょう。


 サンプルプログラムの前に、以前のエントリー

iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタ「2Dベクトル」

iPhoneアプリ、ゲーム制作初心者の方へ小ネタ「線分と円の交差」

上記記事が、前知識としてお役に立てるやもしれません。
一読頂けましたら、幸いで御座います。


 さて、泡A、泡B双方の座標に注目してみましょう。
双方の座標はどの様な推移を見せるべきでしょうか?

 双方は互いに近づき、接触し、「ゆっくりと」反発し、触れあうか触れあわないかのギリギリの位置へ押し返されて行くわけです。



// それぞれの座標が入っていると仮定
CVector2 bubbleA;
CVector2 bubbleB;

// それぞれの半径
const float radiusA( 10.0 );
const float radiusB( 10.0 );

if( bubbleA.Distance( bubbleB ) < radiusA + radiusB )
{
// 接触している

// 双方の中間点
const CVector2 center = ( bubbleA + bubbleB ) * float( 0.5 );

// 中間点から泡Aへの単位ベクトル
const CVector2 vectorToA = ( bubbleA - center ).Normal();
// 泡Bは、↑ベクトルの逆
const CVector2 vectorToB = -vectorToA;

// 中間点から、泡Aと泡Bが接触しないギリギリの位置
const CVector2 toA = center + vectorToA * radiusA;
const CVector2 toB = center + vectorToB * radiusB;

// 現在の位置から、上記位置へ、「少しずつ」移動
bubbleA += ( toA - bubbleA ) * float( 0.2 ); // 肝
bubbleB += ( toB - bubbleB ) * float( 0.2 );

}



 可読性確保の為に随分と冗長なコードとなっておりますが、そこは留意頂けましたらと思います。「肝」の部分に示された「少しずつ移動」とは、イージング処理と呼ばれるもので、詳細は以前のまた別のエントリー
iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタを一つ
へ譲る事と致します。

 これは、その座標へ少しづつ近づくという処理であり、肝となるのはその係数「 float( 0.2 ) 」。これが1.0へ近づく程、行ってみれば「固い動き」という様相を呈してまいります。この辺りの調整はアプリ毎に変化してくる部分であり、これを決めて行く作業こそが、ゲームやエンターテイメント系アプリの醍醐味、最も面白い作業の一つと言って良いでしょう。


rule

 さてさて。

 毎度毎度、何故こうもダラダラと長いエントリーになってしまうものなのか、開設より一年以上も経過している本Blogであるにも関わらず、永遠の謎として悲しさを色濃く彩っておりますが。いえいえ、そう仰らず。
脳内垂れ流しBlogでは御座いますが、これからも気長にお付き合い頂けましたら幸いです。

 毎日が台風一過。TeamDyquemでした。



rule

シリーズ記事まとめ

Aニュース、ガジェット通信 寄稿記事

『連載.jp』寄稿「ゲームプログラマが語る「プロ棋士に勝ったAIは、タクシー基本無料化をもたらす?」」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る ”買わない理由”がもたらす充足感と、開発者達の心理」」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る アップデート版に潜む開発者モラルハザード」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る ソフトやアプリと携帯ゲーム課金における経済行動学」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る。新しいゲーム機が定期的に生まれる理由」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 楽しさの仕組み ゲームメカニクス」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 3Dテレビとゲームの微妙な関係 その打開策」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 無料アプリのビジネスモデルと舞台裏」
『Aニュース/ガジェット通信』寄稿「新発表ラッシュに見るクラウド大航海時代の幕開け」

■ゲーム制作初心者さん向け系

ゲームプログラマが語る。なんちゃってリードプログラマにはなるな!ゲーム造りで放棄してはいけない大切な事
ゲームプログラマが語る。今さら聞けないフレームレートに纏わる話。秒間60?16ミリ?
ゲームプログラマが語る。「浮動小数点」と商業レベルで上手に付き合う方法
「ゲームプログラマが語る。ゲーム制作初心者の方へ小ネタ「クォータービュー入門」」
「ゲームプログラマが語る。「正しい乱数」が彩る確率世界とエンターテイメント」
「iPhoneアプリ、ゲーム制作初心者の方へ小ネタ「線分と円の交差」」
「iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタ「2Dベクトル」」
「iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタを一つ」

「プロのゲームプログラマとして、ゲーム製作に関する書評を」シリーズ

ゲームプログラマが語る書評:「MMORPGゲームサーバープログラミング」を読んでみた
ゲームプログラマが語る書評:「ゲームプログラマになる前に覚えておきたい技術」を読んでみた
ゲームプログラマが語る書評:「ゲームエンジン・アーキテクチャ」を読んでみた

■個人でも出来る、マルチプラットフォーム開発関連

ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その4
ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その3
iPhoneアプリ作者が語る。マルチプラットフォーム化その2・アトミック型定義のススメ
ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その1

■リリースしました系

PASTEL-ORBIT/TeamDyquemアプリ第19弾。ローグライク決定版「隣人は魔王」をリリースしました。
TeamDyquemアプリ第18段。ご当地バトルRTS「埼玉クエスト」をリリースしました。近隣の県を滅ぼそう(*-_-*) 埼玉以外でも遊べます #47app
アプリ新作「ネコりす マカロン」をリリースしました
埼玉県ご当地アプリ、「タッチ the さいたま」をリリースしました #47app
アプリ新作「ひよこガーデン」をリリースしました
TeamDyquem新作。結構真面目なアクションパズル「ネコりす」リリース
iPhoneアプリ作者が、iアプリ「泡リス女子部 for iアプリ」をリリースしました
自作iPhoneアプリ改良版、「ネコがゴミのようだネ:アーケード」をリリースしました
iPhoneアプリ作者が、「まりも育成」for iモードをリリースしました
iPhoneアプリ新作 「ナタ・デ・ネコ」 をリリースしました
秋刀魚は関係ないけれど、新作「i-Wishbone」リリース
アプリ新作「ネコがゴミのようだ」。プロモ動画をアップしてみた
「泡リス 女子部」、販売開始
AppBankにまりも紹介記事が!

ゲームプログラマとして参加。ご当地47都道府県アプリプロジェクト #47app

□ビジネス系

ゲームプログラマが語るドコモiPhoneと、インフラから合法的に大金を抜くスキーム
ゲームプログラマが語る。秀丸エディタのビジネスモデル

■SFネタ系

ゲームプログラマがSFを語る。意識はどこからやってきて、死んで、そして何処へ行く?
ゲームプログラマが語る。気の遠くなるスキもない程の、宇宙の話
iPhoneアプリ作者が語る。流れ星に馳せる真実
iPhoneアプリ作者が警笛。どこでもドアの使い過ぎには注意
iPhoneアプリ作者が語るSETI理論。異星人さんは何処!?


人気ブログランキングへ

Theme:プログラミング
Genre:コンピュータ

comments(2)|trackback(0)|ゲーム制作初心者の方へ|2011-08-24_13:31|page top

ゲームプログラマが語る。竜田揚げと並列処理のススメ
2011-08-12 13:52



 まるでそれは、世紀末を彩る死鳥星の如し悪意を持って襲いかかる昨今の猛暑。近所のお弁当屋さんにて初お目見え「竜田揚げ弁当」を注文するも、「大きい竜田揚げが、一つだけドンと入っている」という、謎の上位互換機ップリにトキめいてしまいました。
 もう少しネタろうかと書き出した筈なのですが、「死鳥星」が一発で変換出来てしまい、思いがけず8秒ほど無言で怯んでしまったTeamDyquemで御座います。みなさまこんにちは。

rule


 ゲーム制作初心者さん向けのエントリーとして幾つか展開させております、技術ネタ。当ブログにおきましては比較的真面目なネタで筆の乗り辛い、しかしながら、「これをメインコンテンツにしなくてどうするんだカス」的なおしかりが、ジリジリと目に痛い昨今。

 久しぶりの技術ネタで御座いますが。
直接関連性はありませんが、今回も特定の機種に依存させていない話題でありますので、以前の、マルチプラットフォーム開発関連エントリー群

ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その4
ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その3
iPhoneアプリ作者が語る。マルチプラットフォーム化その2・アトミック型定義のススメ
ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その1

 上記も、併せてご覧頂けましたら幸いです。

 さて。


rule

 アプリ内におきまして、例えば水槽内でランダムに現れる沢山の泡をバラバラに動かしたい、若しくは、リアルタイム記録系等において、様々な視覚的メーターを個別に制御したいといった様に、単一のアプリとして動作していながらも、その内部では様々な動作がさも並列独立しているかの様に個別に制御させたいという事例が求められる事もあるでしょう。
 ゲーム等はまさにその集大成と言って良く、操作するプレイヤー、飛んでくる敵の弾、画面を舞う爆発エフェクト等、その全てが言ってみれば独立した小さなコンピューターであり、その全てが自律的に動作し、又は他の個体と協調し動作が共鳴していく事で、最終レンダリング結果は構成されています。
 ゲームやそれに類する主にアクション系エンターテイメントアプリというものは、それらフレームを次々と綴る連鎖の上に構築され、美麗なアニメーションとしてユーザーの目に到達するのです。

 この為に重要な技術が、並列化です。並列化に枷のあるシステムによって構築されたゲーム等は、みな一様にどこか動きが固く、画一的な印象をもたらす事が多いものです。そして何より、メンテナンス性を極端に欠き、また実装コストも高くなりがちであり、商業作品と呼ぶには厳しいと言わざるを得ないでしょう。

 並列化が旨く進めば、個別個体のブラッシュアップも自由自在。モジュール差し替えも文字通り差し替えるだけですし、メンテナンス性は抜群です。コストも最小に見積もる事が出来、禁煙も成功し、恋人も出来、宝くじにも当たります。並列化を採用しない手はありませんね。

 ゲームにおける疑似並列処理技術の代表例としましては、昨今では「ファイバー」実装が市民権を得ていると言って良いでしょう。その使い勝手、実装コスト等が、昨今の事例に留まらずゲームというカテゴリーにマッチしているという面が大きい様に思います。

 処理の単位をもう一つ大きな段階にて考える必要のあるアプリ、例えば、WEBブラウザ等において、ページ内フレーム群を構成する際にはファイバー単位では小規模なあまり、使い勝手に優れません。こういったケースではフレーム毎に「スレッド」分化を施すという手法が言わば通例でありましょう。
 更に大きな枠組みとして、タブブラウザ等が持つそれぞれのタブ処理におきましては、スレッドよりも更に大きな処理の枠組みとして、「プロセス」分化の領域にまで持っていく事も有力な方策と言えます。

 この様に、ざっと羅列しただけでも「ファイバー」「スレッド」「プロセス」と、処理の単位をどの様に区切り、またどの様に運用するかという点に意味の異なる手法がこれだけ挙げられますが、重要な点は用途にマッチする技術の選択であり、ゲームにおける単一のプレイヤーや敵キャラ一体一体を全てスレッド化する事は、通常、良い選択肢ではありません。

 さて。
 ここでは、所謂一般的な「ファイバー」技術に触れてみましょう。
 画面上で沢山のボールが跳ねているといった単純なシチュエーションを仮定します。それぞれのボールにおいては、ある瞬間の情報として速度と位置があり、ボールの数だけこの情報を管理運用していけば良いのですが、これをどこかでまとめて計算するという形はいかにも前時代的でありましょう。「ボール個体」に関する制御をクラス化し、個々のボール情報はそのボールが知っていれば良い、という実装が通例です。

 この時、個々のボールはファイバー特性を持たせる形にし、自律させる事が今回の目的です。
 以下の様なシステムを、この仮定理論の土台に設定してみましょう。


class CFiber
{
public:
class CKernel;
class CUnit;
};

class CFiber::CKernel
{
public:
void Attach( CUnit& aUnit );
void Detach( CUnit& aUnit );
void Progress();
};

class CFiber::CUnit :
{
public:
virtual void Progress() = 0;
};


 エントリー紹介用の至極シンプルな形になっていますが、重要な点は表現出来ています。CKernelというインスタンスを一つ以上用意し、無数にあるCUnitを登録していくイメージです。CKernelは、自身に登録されているCUnit群のProgressメソッドを、次々に呼び出していくカーネルです。

 このシステムの上に、ボールを載せてみましょう。


class CBall :
public CFiber::CUnit
{
public:
virtual void Progress();
};

CKernel kernel;
CBall ball1;
CBall ball2;
CBall ball3;

kernel.Attach( ball1 );
kernel.Attach( ball2 );
kernel.Attach( ball3 );

while( true )
{
kernel.Progress();
}


 この様にする事で、任意の数のボールインスタンスをコントロールします。ボールの他に箱も追加で跳ね回らさせたいのであれば、単純に箱を追加すれば事が足りてしまいます。


class CBox :
public CFiber::CUnit
{
public:
virtual void Progress();
};

CBall ball1;
CBall ball2;
CBall ball3;
CBox box1;
CBox box2;
CBox box3;

kernel.Attach( ball1 );
kernel.Attach( ball2 );
kernel.Attach( ball3 );
kernel.Attach( box1 );
kernel.Attach( box2 );
kernel.Attach( box3 );


 拙作種々アプリでも勿論この機構は採用しており、例えば拙作「ネコりす」等におきましても、タイトル画面の後ろで歩くネコや、それぞれのブロックネコ、ブロッククリア時に発生するエフェクト等、ありとあらゆる個体は並列制御されています。
 更に動きのあるアプリ等におきましては、登録されるCUnitの数が数百数千に上る事も、なんら珍しくありません。

 更に理論を進め、画面上にて動きのある、言ってみれば「判り易い」個体のみを並列管理させていくのではなく、例えば、「当たり判定処理」「表示順番並べ替え処理」、更に「タイトル画面処理」「ゲーム処理」等、処理の単位もCUnit化を進めます。
 それぞれの実行順番を管理する為の機構、「優先順位」の実装が必要となりますが、それにより、個々の処理までもユニットとして管理し、必要に応じて取り外しを行います。例えば、タイトル画面では「当たり判定処理」は不要なので、外しています。「ゲーム処理」というユニットが、「当たり判定処理」というユニットを自分に装着します。ユニットにユニットを持たせられる、親子構造にまで発展さられれば用途は更に広がります。この辺りでの運用にまで昇華させる事が出来れば、商業レベルアプリケーションの実装も現実的な視野に捉える事が出来る様になるでしょう。


rule

 そろそろ「残暑だ」と言いはってしまいたい程にまで冬が待ち遠しい。
休日よりも「明日は休日」が好きなTeamDyquemでした。

 それではみなさま。良い週末を^^


rule

シリーズ記事まとめ

Aニュース、ガジェット通信 寄稿記事

『連載.jp』寄稿「ゲームプログラマが語る「プロ棋士に勝ったAIは、タクシー基本無料化をもたらす?」」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る ”買わない理由”がもたらす充足感と、開発者達の心理」」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る アップデート版に潜む開発者モラルハザード」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る ソフトやアプリと携帯ゲーム課金における経済行動学」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る。新しいゲーム機が定期的に生まれる理由」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 楽しさの仕組み ゲームメカニクス」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 3Dテレビとゲームの微妙な関係 その打開策」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 無料アプリのビジネスモデルと舞台裏」
『Aニュース/ガジェット通信』寄稿「新発表ラッシュに見るクラウド大航海時代の幕開け」

■ゲーム制作初心者さん向け系

ゲームプログラマが語る。なんちゃってリードプログラマにはなるな!ゲーム造りで放棄してはいけない大切な事
ゲームプログラマが語る。今さら聞けないフレームレートに纏わる話。秒間60?16ミリ?
ゲームプログラマが語る。「浮動小数点」と商業レベルで上手に付き合う方法
「ゲームプログラマが語る。ゲーム制作初心者の方へ小ネタ「クォータービュー入門」」
「ゲームプログラマが語る。「正しい乱数」が彩る確率世界とエンターテイメント」
「iPhoneアプリ、ゲーム制作初心者の方へ小ネタ「線分と円の交差」」
「iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタ「2Dベクトル」」
「iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタを一つ」

「プロのゲームプログラマとして、ゲーム製作に関する書評を」シリーズ

ゲームプログラマが語る書評:「MMORPGゲームサーバープログラミング」を読んでみた
ゲームプログラマが語る書評:「ゲームプログラマになる前に覚えておきたい技術」を読んでみた
ゲームプログラマが語る書評:「ゲームエンジン・アーキテクチャ」を読んでみた

■個人でも出来る、マルチプラットフォーム開発関連

ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その4
ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その3
iPhoneアプリ作者が語る。マルチプラットフォーム化その2・アトミック型定義のススメ
ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その1

■リリースしました系

PASTEL-ORBIT/TeamDyquemアプリ第19弾。ローグライク決定版「隣人は魔王」をリリースしました。
TeamDyquemアプリ第18段。ご当地バトルRTS「埼玉クエスト」をリリースしました。近隣の県を滅ぼそう(*-_-*) 埼玉以外でも遊べます #47app
アプリ新作「ネコりす マカロン」をリリースしました
埼玉県ご当地アプリ、「タッチ the さいたま」をリリースしました #47app
アプリ新作「ひよこガーデン」をリリースしました
TeamDyquem新作。結構真面目なアクションパズル「ネコりす」リリース
iPhoneアプリ作者が、iアプリ「泡リス女子部 for iアプリ」をリリースしました
自作iPhoneアプリ改良版、「ネコがゴミのようだネ:アーケード」をリリースしました
iPhoneアプリ作者が、「まりも育成」for iモードをリリースしました
iPhoneアプリ新作 「ナタ・デ・ネコ」 をリリースしました
秋刀魚は関係ないけれど、新作「i-Wishbone」リリース
アプリ新作「ネコがゴミのようだ」。プロモ動画をアップしてみた
「泡リス 女子部」、販売開始
AppBankにまりも紹介記事が!

ゲームプログラマとして参加。ご当地47都道府県アプリプロジェクト #47app

□ビジネス系

ゲームプログラマが語るドコモiPhoneと、インフラから合法的に大金を抜くスキーム
ゲームプログラマが語る。秀丸エディタのビジネスモデル

■SFネタ系

ゲームプログラマがSFを語る。意識はどこからやってきて、死んで、そして何処へ行く?
ゲームプログラマが語る。気の遠くなるスキもない程の、宇宙の話
iPhoneアプリ作者が語る。流れ星に馳せる真実
iPhoneアプリ作者が警笛。どこでもドアの使い過ぎには注意
iPhoneアプリ作者が語るSETI理論。異星人さんは何処!?


人気ブログランキングへ

Theme:プログラミング
Genre:コンピュータ

comments(1)|trackback(0)|ゲーム制作初心者の方へ|2011-08-12_13:52|page top

iPhoneアプリ、ゲーム制作初心者の方へ小ネタ「線分と円の交差」
2011-01-11 13:12



基本的に寒い季節をこよなく愛する自分では御座います。
寒さにはメリット満載。空気も食べものも美味しい、お酒も美味しい、
服の組み合わせに悩む楽しさや、通勤時に汗ばまない利便。

そもそも、「温度」の上限は在りませんが下限は存在していると言うのが何かミラクル。
物質の熱振動が全く無い状態が絶対零度-273.15℃であるわけですが、高温は天井知らず。
経済学的に言えば、低温はリスクリミテッドであるのに対し高温はリスク無限大
低温が資産の国債運用であるならば、高温はFXハイレバ瞬殺コース。
低温が・・・、何の話をしたかったのかナチュラルに忘れましたが、
竹を割った様な無策にも程があるTeamDyquemで御座います。みなさまこんにちは。

そうそう。寒い季節が好きなのは良いのです。都会で暮らしている分にはそれもまた良いのです。
とは言え先日、高原温泉旅行等を志した際で御座います。
標高の高さを伴った粉雪の舞う寒さは、、あれは尋常ではありませんね。
あれは殺しにかかっていますよ。人を。結構な防寒対策であった筈なのですが、
カビキラーに生えたカビを眼前にする程に無力で御座いました。

この上、油断して風邪でもひこうものなら世間様のお笑いゴミクズ以下に成り果てる所でしたが、
何故かは知りませんが風邪はひきませんでした。何故かは知りませんが


さて。


以前のエントリー
「iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタ「2Dベクトル」」
「iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタを一つ」
上記等にて展開させて頂きました、ゲーム制作初級講座ネタ。
今回は2Dベクトル派生ネタという事で、
前回のCVector2を利用した円とのシンプル接触判定等をチョロっと。


rule
線分と円の交差判定

ゲーム制作には欠かせない、算術系の交差判定初歩で御座います。
最近の拙作では、「ナタ・デ・ネコ」におきまして飛んでゆくネコを球(円)として扱い、
グラスの形状に合わせた3本の線分との交差判定に利用しています。
接触が起きた場合には、円の入射角と線分から反射角を算出する程度のシンプルな処理でありますが、
物体飛ばしモノとしては、これだけでも十分に自然な挙動をカバー可能です。

例によりまして、以下は自分が使っている自前処理群からの抜粋ですが、
今回は、CVector2を使う形のグローバル関数として抜き出しました。

実際には、線分、円、ポリゴン、円錐や円筒などそれぞれをジオメトリクラスとして定義し、
相互判定メソッド群を扱う CColision的なクラスを用意する形が合理的で好みです。

適当に抜粋



/// 2D: 線分と円の交差判定
/// @param aV0 線分開始位置
/// @param aV0 線分終端位置
/// @param aCircleCenter 円の中心点
/// @param aCircleRadius 円の半径
/// @result 接触していればtrue.
inline bool gIntersection2D_SegmentWithCircle(
const CVector2& aV0,
const CVector2& aV1,
const CVector2& aCircleCenter,
float aCircleRadius
)
{

const float cr2 = aCircleRadius * aCircleRadius;
const CVector2 v = aV1 - aV0;
const CVector2 c = aCircleCenter - aV0;
const float d0 = v.DotProduct( c );
if( d0 < float( 0 ) )
{
// c の長さが円の半径より小さい場合は交差している
return c.SquaredMagnitude() <= aCircleRadius;
}

const float d1 = v.DotProduct( v );

if( d0 > d1 )
{

// 線分の終点と円の中心の距離の二乗を求める
const float dist = ( aV1 - aCircleCenter ).SquaredMagnitude();

// 円の半径の二乗よりも小さい場合は交差している
return dist <= cr2;

}
else
{

const float d2 = c.DotProduct( c );
return d2 - ( d0 / d1 ) * d0 <= cr2;

}

return false;

}



この手のコードにはThumbを切る事もお忘れ無く。

余談ですが、昨今の次世代機ゲーム等では次元数を問わずこれでは不十分です。
可変長フレームレート下にて描画と基本処理の時間経過が一致しませんので、
移動線分やボリューム線分同士の判定も求められる所ですね。
勿論、iPhone等においてライトなゲームを制作する分におきましては、問題になる事も少ないでしょう。



rule

シリーズ記事まとめ

Aニュース、ガジェット通信 寄稿記事

『連載.jp』寄稿「ゲームプログラマが語る「プロ棋士に勝ったAIは、タクシー基本無料化をもたらす?」」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る ”買わない理由”がもたらす充足感と、開発者達の心理」」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る アップデート版に潜む開発者モラルハザード」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る ソフトやアプリと携帯ゲーム課金における経済行動学」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る。新しいゲーム機が定期的に生まれる理由」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 楽しさの仕組み ゲームメカニクス」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 3Dテレビとゲームの微妙な関係 その打開策」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 無料アプリのビジネスモデルと舞台裏」
『Aニュース/ガジェット通信』寄稿「新発表ラッシュに見るクラウド大航海時代の幕開け」

■ゲーム制作初心者さん向け系

ゲームプログラマが語る。なんちゃってリードプログラマにはなるな!ゲーム造りで放棄してはいけない大切な事
ゲームプログラマが語る。今さら聞けないフレームレートに纏わる話。秒間60?16ミリ?
ゲームプログラマが語る。「浮動小数点」と商業レベルで上手に付き合う方法
「ゲームプログラマが語る。ゲーム制作初心者の方へ小ネタ「クォータービュー入門」」
「ゲームプログラマが語る。「正しい乱数」が彩る確率世界とエンターテイメント」
「iPhoneアプリ、ゲーム制作初心者の方へ小ネタ「線分と円の交差」」
「iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタ「2Dベクトル」」
「iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタを一つ」

「プロのゲームプログラマとして、ゲーム製作に関する書評を」シリーズ

ゲームプログラマが語る書評:「MMORPGゲームサーバープログラミング」を読んでみた
ゲームプログラマが語る書評:「ゲームプログラマになる前に覚えておきたい技術」を読んでみた
ゲームプログラマが語る書評:「ゲームエンジン・アーキテクチャ」を読んでみた

■個人でも出来る、マルチプラットフォーム開発関連

ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その4
ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その3
iPhoneアプリ作者が語る。マルチプラットフォーム化その2・アトミック型定義のススメ
ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その1

■リリースしました系

PASTEL-ORBIT/TeamDyquemアプリ第19弾。ローグライク決定版「隣人は魔王」をリリースしました。
TeamDyquemアプリ第18段。ご当地バトルRTS「埼玉クエスト」をリリースしました。近隣の県を滅ぼそう(*-_-*) 埼玉以外でも遊べます #47app
アプリ新作「ネコりす マカロン」をリリースしました
埼玉県ご当地アプリ、「タッチ the さいたま」をリリースしました #47app
アプリ新作「ひよこガーデン」をリリースしました
TeamDyquem新作。結構真面目なアクションパズル「ネコりす」リリース
iPhoneアプリ作者が、iアプリ「泡リス女子部 for iアプリ」をリリースしました
自作iPhoneアプリ改良版、「ネコがゴミのようだネ:アーケード」をリリースしました
iPhoneアプリ作者が、「まりも育成」for iモードをリリースしました
iPhoneアプリ新作 「ナタ・デ・ネコ」 をリリースしました
秋刀魚は関係ないけれど、新作「i-Wishbone」リリース
アプリ新作「ネコがゴミのようだ」。プロモ動画をアップしてみた
「泡リス 女子部」、販売開始
AppBankにまりも紹介記事が!

ゲームプログラマとして参加。ご当地47都道府県アプリプロジェクト #47app

□ビジネス系

ゲームプログラマが語るドコモiPhoneと、インフラから合法的に大金を抜くスキーム
ゲームプログラマが語る。秀丸エディタのビジネスモデル

■SFネタ系

ゲームプログラマがSFを語る。意識はどこからやってきて、死んで、そして何処へ行く?
ゲームプログラマが語る。気の遠くなるスキもない程の、宇宙の話
iPhoneアプリ作者が語る。流れ星に馳せる真実
iPhoneアプリ作者が警笛。どこでもドアの使い過ぎには注意
iPhoneアプリ作者が語るSETI理論。異星人さんは何処!?


人気ブログランキングへ

Theme:プログラミング
Genre:コンピュータ

comments(0)|trackback(0)|ゲーム制作初心者の方へ|2011-01-11_13:12|page top

iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタ「2Dベクトル」
2011-01-07 13:12



新しい年、2011年を迎えてより早1週間。天気も良くほどよく寒く、加えて卯年。
何か良いことが起きそうな予感だけは毎年しているのですけれども、
フタを開けてみれば又フタが出てくる様な負の無限ループを送っていませんか?
そろそろフタが開けられなくなりそうなTeamDyquemで御座います。皆様こんにちは。
What's a new years resolution で御座います。

2011年ってまあドエライ年号になってまいりましたね。
時は10年以上も前になりますが、21世紀を迎えたあの瞬間。
当時、自分は友人らと共に大晦日より派手に呑み、
その為に購入したシャンパン片手にカウントダウン。あと10秒で21世紀。
10・9・8・7で思いがけずシャンパン放出。盛大に吹き上がりこぼれ落ち、
記念すべき21世紀の瞬間を、台布巾で絨毯掃除しながら迎えた事も良い思い出。
あの時から、こんな21世紀になっていく様な気がしておりました。


以前のエントリー

「iPhoneアプリ作者より年始のご挨拶。パンが無くてもケーキは要らない」


にても少し触れておりますが、新作もほぼ仕上げ段階に到達する事が出来、
あともう1日程度の作業で提出する事が出来そうなのでありますが、
とりあえずその前に、明日より温泉小旅行等へ勤しんで参ります。
どんだけ温泉行ってるんだという気がしないでも無いですが・・・。



さて。

以前のエントリー

「iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタを一つ」


にて展開させて頂きました、ゲーム制作初級講座ネタ。
今回はこれをもう一つ。

rule
2Dベクトルクラス

ゲーム等を制作する際、特に2D系のゲームにてキャラクター等の座標を管理する際には、
座標値にはfloatを充てる事が合理的でありましょう。
処理速度を稼ぐ為にshort型などで固定小数点化するというのも面倒でしょうし、
なにより、昨今のiOSデバイスではfloatがそこまでネックになる事もありません。
但し、thumbは気にする事が必要。これについては後述します。

floatにて値を持つ事により、移植性の高い算術系の実装も手間いらず。
以下は自分が使っている自前2Dベクトルクラスですが、用意しておくと便利ですよね。

適当に抜粋


class CVector2
{

public:

/// 代入
const CVector2& operator = ( const CVector2& aValue );

/// 比較
bool operator == ( const CVector2& aValue ) const;
bool operator != ( const CVector2& aValue ) const;

/// 四則演算子 全要素
CVector2 operator + ( const CVector2& aValue ) const;
CVector2 operator - ( const CVector2& aValue ) const;
CVector2 operator * ( const CVector2& aValue ) const;
CVector2 operator / ( const CVector2& aValue ) const;

/// 四則演算子 個別要素
CVector2 operator + ( float aValue ) const;
CVector2 operator - ( float aValue ) const;
CVector2 operator * ( float aValue ) const;
CVector2 operator / ( float aValue ) const;

/// 代入演算子
const CVector2& operator += ( const CVector2& aValue );
const CVector2& operator -= ( const CVector2& aValue );
const CVector2& operator *= ( const CVector2& aValue );
const CVector2& operator /= ( const CVector2& aValue );
const CVector2& operator += ( float aValue );
const CVector2& operator -= ( float aValue );
const CVector2& operator *= ( float aValue );
const CVector2& operator /= ( float aValue );

/// 単位化
CVector2 Normal() const;

/// 内積
float DotProduct( const CVector2& aValue ) const;

/// 外積
float CrossProduct( const CVector2& aValue ) const;

/// 大きさ
float Magnitude() const;

/// 大きさ2乗
float SquaredMagnitude() const;

/// 距離
float Distance( const CVector2& aValue ) const;

/// 距離2乗
float SquaredDistance( const CVector2& aValue ) const;

public:

/// Setter.
float X( float aValue )
{
mX = aValue;
return mX;
}

float Y( float aValue )
{
mY = aValue;
return mY;
}

/// Getter.
float X() const
{
return mX;
}

float Y() const
{
return mY;
}

private:

float mX;
float mY;

};

CVector2 CVector2::Normal() const
{
const float magnitude = Magnitude();
return *this / magnitude;
}

float CVector2::DotProduct( const CVector2& aValue ) const
{
return X() * aValue.X() + Y() * aValue.Y();
}

float CVector2::CrossProduct( const CVector2& aValue ) const
{
return X() * aValue.Y() - Y() * aValue.X();
}

float CVector2::Magnitude() const
{
return sqrt( SquaredMagnitude() );
}

float CVector2::SquaredMagnitude() const
{
return X() * X() + Y() * Y();
}

float CVector2::Distance( const CVector2& aValue ) const
{
return ( aValue - *this ).Magnitude();
}

float CVector2::SquaredDistance( const CVector2& aValue ) const
{
return ( aValue - *this ).SquaredMagnitude();
}




rule
浮動小数点数を扱う場合には、Thumbオプションに注意

ところで、上記のThumbにつきまして。
以下、全て実機コンパイルの話でございます。
ご存じの方が多いかとおもいますが、これは命令セットの名称ですね。
デフォルトONになっておりコードの小さいThumb命令セットへコンパイルされるのですが、
この状態だとfloat演算部分がビルトイン関数呼び出しになり、
float演算を多用するコード部分では大きなボトルネックになりかねません。
上記、CVector2の実装等はfloat演算のオンパレード。
こういったコード部分にはThumbをOffにすると合理的ですね。



さて。
最近は本当に派手に寒い日々が続きますが、
完成されたフィンランド人にクラスチェンジする為には
まだまだこんな寒さでへこたれてはいられません。

しかしながら、皆様は風邪などひかれません様に気をつけて下さいね^^



rule

シリーズ記事まとめ

Aニュース、ガジェット通信 寄稿記事

『連載.jp』寄稿「ゲームプログラマが語る「プロ棋士に勝ったAIは、タクシー基本無料化をもたらす?」」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る ”買わない理由”がもたらす充足感と、開発者達の心理」」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る アップデート版に潜む開発者モラルハザード」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る ソフトやアプリと携帯ゲーム課金における経済行動学」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る。新しいゲーム機が定期的に生まれる理由」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 楽しさの仕組み ゲームメカニクス」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 3Dテレビとゲームの微妙な関係 その打開策」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 無料アプリのビジネスモデルと舞台裏」
『Aニュース/ガジェット通信』寄稿「新発表ラッシュに見るクラウド大航海時代の幕開け」

■ゲーム制作初心者さん向け系

ゲームプログラマが語る。なんちゃってリードプログラマにはなるな!ゲーム造りで放棄してはいけない大切な事
ゲームプログラマが語る。今さら聞けないフレームレートに纏わる話。秒間60?16ミリ?
ゲームプログラマが語る。「浮動小数点」と商業レベルで上手に付き合う方法
「ゲームプログラマが語る。ゲーム制作初心者の方へ小ネタ「クォータービュー入門」」
「ゲームプログラマが語る。「正しい乱数」が彩る確率世界とエンターテイメント」
「iPhoneアプリ、ゲーム制作初心者の方へ小ネタ「線分と円の交差」」
「iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタ「2Dベクトル」」
「iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタを一つ」

「プロのゲームプログラマとして、ゲーム製作に関する書評を」シリーズ

ゲームプログラマが語る書評:「MMORPGゲームサーバープログラミング」を読んでみた
ゲームプログラマが語る書評:「ゲームプログラマになる前に覚えておきたい技術」を読んでみた
ゲームプログラマが語る書評:「ゲームエンジン・アーキテクチャ」を読んでみた

■個人でも出来る、マルチプラットフォーム開発関連

ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その4
ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その3
iPhoneアプリ作者が語る。マルチプラットフォーム化その2・アトミック型定義のススメ
ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その1

■リリースしました系

PASTEL-ORBIT/TeamDyquemアプリ第19弾。ローグライク決定版「隣人は魔王」をリリースしました。
TeamDyquemアプリ第18段。ご当地バトルRTS「埼玉クエスト」をリリースしました。近隣の県を滅ぼそう(*-_-*) 埼玉以外でも遊べます #47app
アプリ新作「ネコりす マカロン」をリリースしました
埼玉県ご当地アプリ、「タッチ the さいたま」をリリースしました #47app
アプリ新作「ひよこガーデン」をリリースしました
TeamDyquem新作。結構真面目なアクションパズル「ネコりす」リリース
iPhoneアプリ作者が、iアプリ「泡リス女子部 for iアプリ」をリリースしました
自作iPhoneアプリ改良版、「ネコがゴミのようだネ:アーケード」をリリースしました
iPhoneアプリ作者が、「まりも育成」for iモードをリリースしました
iPhoneアプリ新作 「ナタ・デ・ネコ」 をリリースしました
秋刀魚は関係ないけれど、新作「i-Wishbone」リリース
アプリ新作「ネコがゴミのようだ」。プロモ動画をアップしてみた
「泡リス 女子部」、販売開始
AppBankにまりも紹介記事が!

ゲームプログラマとして参加。ご当地47都道府県アプリプロジェクト #47app

□ビジネス系

ゲームプログラマが語るドコモiPhoneと、インフラから合法的に大金を抜くスキーム
ゲームプログラマが語る。秀丸エディタのビジネスモデル

■SFネタ系

ゲームプログラマがSFを語る。意識はどこからやってきて、死んで、そして何処へ行く?
ゲームプログラマが語る。気の遠くなるスキもない程の、宇宙の話
iPhoneアプリ作者が語る。流れ星に馳せる真実
iPhoneアプリ作者が警笛。どこでもドアの使い過ぎには注意
iPhoneアプリ作者が語るSETI理論。異星人さんは何処!?


人気ブログランキングへ

Theme:プログラミング
Genre:コンピュータ

comments(0)|trackback(0)|ゲーム制作初心者の方へ|2011-01-07_13:12|page top

iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタを一つ
2010-12-22 13:15



今冬は、どうも寒さにガッツが足りていないである等とウッカリ書き殴ってしまった前回エントリー。
帰り道にて思いっきりドシャ降られた上に折りたたみ傘が壊れるという、ガード不能瞬殺コンボ。
凍えながら帰宅する泣きっ面に蜂ップリが目に痛い。まったくもって恐ろしい惑星で御座います。

本年もとっぷりと暮れて参りましたが、仕事納めが近い方も多いのでは無いでしょうか。
明日は祭日で御座いますので、道行くサラリーマンの浮かれプリが目に浮かぶ様ですが、
忘年会で忘却処分しなければならない事があまりにも多いネタ満載人生に自分が浮かれ気味。
休日より、「明日は休日」の方が好きなTeamDyquemです。皆様こんにちは。


さて今回のエントリー。
ゲーム制作初心者の方へ向けた、技術小ネタを一つご紹介しましょう。
イージングと呼ばれる、加減速を簡単に制御する手法です。


rule

easing: イージング

アキレスと亀のパラドックスに例えられる事の多いこの計算、
この由来は結構面白く、ゲームや映像技術に上手く取り入れられています。

足の速いアキレスと遅い亀が競争をする事になった仮定の中で、
その競争は余りにも自分が不利であるとハンデを求めた亀が得た先行距離。
これに端を発する話なのでありますが、要するに

a(ア)------------------------>k(亀)----->ゴール

として開始されたそのレース、アキレスがaからkへ進む時間をt1とすると、
亀はkの位置より亀の速度でt1時間だけ進んだ位置k1まで到達しています。
では、この瞬間よりまたアキレスが a1->t1まで進みその経過時間をt2とすると、
亀はk1の位置より亀の速度でt2時間だけ進んだ位置、k2まで到達しています。
では、、、


この様に数学的精度で考えてみると、アキレスは永遠に亀へ到達出来ません。

今回、ゲームや映像処理の計算式として紹介するイージングはこのパラドックスの応用で、
単に減速を簡単に行う処理の一つです。
(もう少しだけ表現の幅の広い、三角関数を使ったイージングもありますよ。)

iPhoneのカメラロールで次の写真を見る為に画像を左右にフリックすると、
流れる様に新しい絵が画面に入り、減速していきながらピタっと止まる。アレですね。

計算式は単純明快
x = 現在座標
tx = 目標座標
c = 係数 (0以上で1未満の任意の値)


x += ( tx - x ) * c;


上記の簡単な計算式で算出出来るこの表現は、それはもゲーム業界太古から使われているネタで、
計算してみると簡単。目標座標に向かって減速していく速度アニメーションになりますね。
また、計算してみるまでもありませんが、c の値が1未満である以上
x がどんなに txへ近づいても、txと同値になる事は永遠にありません。
ゲーム等では単純に x と txとの差が0.1ドット未満ならばとかで適当に切り上げる事も多いですし、
tx が動的に更新される恒久的な動作として採用しているならば、そのまま放置で計算させ続けても構いません。

現実には2Dでも3Dも同じで、 xとtx、yとty、3Dならばzとtzそれぞれのペアで同じ計算を行うだけですね。
c の値は全要素共通にすれば所謂想像通りの直線減速動作に。
x y z それぞれ c を変えると曲線的な動作になり面白いですよ。


さて、この様にゲームや映像の中では現実にアキレスが亀に永遠に追いつく事が出来ていない事へ立ち返りますが、
そもそもは紀元前490年頃の古代ギリシア自然哲学者、エレアのゼノンという方が提唱したパラドックス。

しかし実際には、このパラドックスには部分的に反証が可能です。
ゼノンの誤りは、無限に加算した和は無限であるとした前提そのもので、
実際には無限加算の総和が有限である場合があり
「考えをいくらでも続ける事が出来る」から「いつまでも追いつけない」、
この様に解を導いている箇所に飛躍がある。

と、いう事らしいです(数式読んでも良く判らなかったorz)


ともあれ。

今世はおろか近世以前の時代、無限を数学的に扱う事にまでは至っていなかった故ではありますが、
こんな大昔にこんな発想をスクラッチから起こせるバイタリティに、ただただ脱帽です。

ゼノンさんに何かアプリ作って欲しいわ。



rule

シリーズ記事まとめ

Aニュース、ガジェット通信 寄稿記事

『連載.jp』寄稿「ゲームプログラマが語る「プロ棋士に勝ったAIは、タクシー基本無料化をもたらす?」」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る ”買わない理由”がもたらす充足感と、開発者達の心理」」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る アップデート版に潜む開発者モラルハザード」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る ソフトやアプリと携帯ゲーム課金における経済行動学」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る。新しいゲーム機が定期的に生まれる理由」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 楽しさの仕組み ゲームメカニクス」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 3Dテレビとゲームの微妙な関係 その打開策」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 無料アプリのビジネスモデルと舞台裏」
『Aニュース/ガジェット通信』寄稿「新発表ラッシュに見るクラウド大航海時代の幕開け」

■ゲーム制作初心者さん向け系

ゲームプログラマが語る。なんちゃってリードプログラマにはなるな!ゲーム造りで放棄してはいけない大切な事
ゲームプログラマが語る。今さら聞けないフレームレートに纏わる話。秒間60?16ミリ?
ゲームプログラマが語る。「浮動小数点」と商業レベルで上手に付き合う方法
「ゲームプログラマが語る。ゲーム制作初心者の方へ小ネタ「クォータービュー入門」」
「ゲームプログラマが語る。「正しい乱数」が彩る確率世界とエンターテイメント」
「iPhoneアプリ、ゲーム制作初心者の方へ小ネタ「線分と円の交差」」
「iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタ「2Dベクトル」」
「iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタを一つ」

「プロのゲームプログラマとして、ゲーム製作に関する書評を」シリーズ

ゲームプログラマが語る書評:「MMORPGゲームサーバープログラミング」を読んでみた
ゲームプログラマが語る書評:「ゲームプログラマになる前に覚えておきたい技術」を読んでみた
ゲームプログラマが語る書評:「ゲームエンジン・アーキテクチャ」を読んでみた

■個人でも出来る、マルチプラットフォーム開発関連

ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その4
ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その3
iPhoneアプリ作者が語る。マルチプラットフォーム化その2・アトミック型定義のススメ
ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その1

■リリースしました系

PASTEL-ORBIT/TeamDyquemアプリ第19弾。ローグライク決定版「隣人は魔王」をリリースしました。
TeamDyquemアプリ第18段。ご当地バトルRTS「埼玉クエスト」をリリースしました。近隣の県を滅ぼそう(*-_-*) 埼玉以外でも遊べます #47app
アプリ新作「ネコりす マカロン」をリリースしました
埼玉県ご当地アプリ、「タッチ the さいたま」をリリースしました #47app
アプリ新作「ひよこガーデン」をリリースしました
TeamDyquem新作。結構真面目なアクションパズル「ネコりす」リリース
iPhoneアプリ作者が、iアプリ「泡リス女子部 for iアプリ」をリリースしました
自作iPhoneアプリ改良版、「ネコがゴミのようだネ:アーケード」をリリースしました
iPhoneアプリ作者が、「まりも育成」for iモードをリリースしました
iPhoneアプリ新作 「ナタ・デ・ネコ」 をリリースしました
秋刀魚は関係ないけれど、新作「i-Wishbone」リリース
アプリ新作「ネコがゴミのようだ」。プロモ動画をアップしてみた
「泡リス 女子部」、販売開始
AppBankにまりも紹介記事が!

ゲームプログラマとして参加。ご当地47都道府県アプリプロジェクト #47app

□ビジネス系

ゲームプログラマが語るドコモiPhoneと、インフラから合法的に大金を抜くスキーム
ゲームプログラマが語る。秀丸エディタのビジネスモデル

■SFネタ系

ゲームプログラマがSFを語る。意識はどこからやってきて、死んで、そして何処へ行く?
ゲームプログラマが語る。気の遠くなるスキもない程の、宇宙の話
iPhoneアプリ作者が語る。流れ星に馳せる真実
iPhoneアプリ作者が警笛。どこでもドアの使い過ぎには注意
iPhoneアプリ作者が語るSETI理論。異星人さんは何処!?


人気ブログランキングへ

Theme:プログラミング
Genre:コンピュータ

comments(0)|trackback(0)|ゲーム制作初心者の方へ|2010-12-22_13:15|page top
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。