[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 06/17 09:43 / Filesize : 226 KB / Number-of Response : 832
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者】スレを立てる前にココで質問を【Part16】



311 名前:名前は開発中のものです。 mailto:sage [2008/02/03(日) 11:41:33 ID:e342ETXV]
2Dの、プレイヤーキャラをリアルタイムで操作できるゲームをC#で作っているのですが、
プレイヤーキャラが壁等を通過できないようにする移動矯正アルゴリズムがうまくいかず困っています。
プレイヤーキャラは画面中心固定で、マップの方を相対的に動かします。
マップは32*32のチップをタイルのように配置します。それぞれのタイルの座標は左上のみ
2次元配列に持っておき、*32してタイルの範囲を計算します。
タイルはプレイヤー通過可・不可の属性を持っています。そこで以下のように移動矯正処理を
書いてみたのですが、例えば通過不可タイルの右側からタイルにめり込んだときに、
X軸の移動を矯正後、Y軸の移動を矯正するため、タイルの右下、もしくは右上に位置が矯正されてしまいます。
おそらく典型的な処理で、うまい方法があると思うのですが、探しても見つかりませんでした。
どういう風に処理するのが良い方法でしょうか。よろしくお願いします。

getPlayerTileIndex( プレイヤーの座標, out w, out h ); //プレイヤーがいるタイルのインデックスを求める
if ( tiles[ w, h ] == TileType.Wall ) { //タイルが壁なら移動矯正する(壁にめり込んでいる状態)
 float newx = プレイヤーの現在のX座標;
 float newy = プレイヤーの現在のY座標;
 if ( プレイヤーの現在のX座標 < ( ( float ) w + 0.5 ) * タイルサイズ ) {
  newx = w * タイルサイズ; //壁タイルの左側から進入した場合はタイルの左端に矯正
 }
 else {
  newx = ( w + 1 ) * タイルサイズ; //壁タイルの右側から進入した場合はタイルの右端に矯正
 }
 if ( プレイヤーの現在のY座標 < ( ( float ) h + 0.5 ) * タイルサイズ ) {
  newy = h * タイルサイズ; //壁タイルの上側から進入した場合はタイルの上端に矯正
 }
 else {
  newy = ( h + 1 ) * タイルサイズ; //壁タイルの下側から進入した場合はタイルの下端に矯正
 }
 プレイヤーの座標 = 座標( newx, newy );
}






[ 続きを読む ] / [ 携帯版 ]

全部読む 前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<226KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef