2005年03月02日(水)の日記
数学と物理。
ゲームを作る初歩段階(脳内作業ONLY)で悩み中。
アクションゲームだとすると地面を設定するわけですが、
地面に立っている・着地するという概念は意外と複雑で、単純化する方法はないかと。
このままだと脳内作業で終わる気がする。
とりあえず練習にサンタスタックのOS Xアプリ版でも作ってみるかなぁ。
でも時間がなぁ。
アクションゲームだとすると地面を設定するわけですが、
地面に立っている・着地するという概念は意外と複雑で、単純化する方法はないかと。
このままだと脳内作業で終わる気がする。
とりあえず練習にサンタスタックのOS Xアプリ版でも作ってみるかなぁ。
でも時間がなぁ。
この日記へのトラックバック
この日記へのトラックバックはありません。
この日記へのコメント
主人公の下部分の座標:Chara.bottom
主人公の上下方向の速度:Chara.vy
ブロックの上部分の座標:Block.top
として、
if(Chara.bottom<=Block.top&&Chara.bottom+Chara.vy>=Block.top){
Chara.bottom=Block.top;
Chara.vy=0;
}
とかやってました。横方向も同じかんじ。斜め上から入ってきた場合とかも考える必要があるので、実際はもう少し複雑ですが。これを、ループを上手く使って、すべてのブロックオブジェクトに対して計算します。
ただ、主人公以外のキャラもブロックの上を歩かせると、当たり判定が指数関数的に増加してしまうので、実行してみてもたつく場合は、もうひと工夫する必要があるかも。いまやGHz時代なので、たいていのマシンでは大丈夫でしょうけど。
if(Chara.bottom>=Block.top&&Chara.bottom-Chara.vy<=Block.top){
Chara.bottom=Block.top;
Chara.vy=0;
}
の方が多分よいです。こっちの方が、複数のブロックに当たったときの座標修正が楽。
当たり判定の数は、当たりそうなところだけ当たり判定をするという(セクター分け当たり判定とかいうヤツ?)ので少しは軽減できるかと目論み中。
ただ、数ある処理の中で一番処理時間がかかるのは描画処理らしいのでなんともはや。
で、純Cocoaでやろうとすると、スクリーンへの描画はNSViewでバッファとしてはNSImageを使うということになったり、
キャラクターのオブジェクトはNSObjectの子孫クラスになったりで、
それらを操ろうとすると、命令のほとんどはObjective-Cのメッセージ送信になるわけで、
Cの関数実行に比べるとオーバーヘッドが気になるわけで。
まぁ、案ずるより産むが易しという言葉を信じたいところ。