【初心者】スレを立てる前にココで質問を【Part16】at GAMEDEV
【初心者】スレを立てる前にココで質問を【Part16】 - 暇つぶし2ch311:名前は開発中のものです。
08/02/03 11:41:33 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 );
}


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch