【初心者】スレを立てる前にココで質問を【Part16】at GAMEDEV【初心者】スレを立てる前にココで質問を【Part16】 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト308:名前は開発中のものです。 08/02/02 23:00:28 eaarCO+A うん。 309:名前は開発中のものです。 08/02/02 23:08:27 UbFEfq9m やっぱりそうなのか 310:名前は開発中のものです。 08/02/02 23:43:57 7p5LKMGa <日記帳> DirectXとか使ったことないけど結構面倒そうだね マテリアルソートとかやっとくのは当然として、テクスチャとメッシュを一括して指示すればポンと書いてくれるんだと思ってたよ 地形となったら領域分割とかもしなきゃならないし3Dには二の足を踏んじゃう </日記帳> >>305 そういう話は聞いてて楽しいな 311:名前は開発中のものです。 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