- ベストアンサー
XNAでのゲーム制作で困っています
kmeeの回答
- kmee
- ベストアンサー率55% (1857/3366)
具体的にどんな判定をしているのですか? マップチップの当たり判定領域と、キャラクターの当たり判定領域が重なったら という判定をしているなら、基準座標は関係無いはずです。左上から+15,+15の範囲でも、右下から-15,-15の範囲でも、同じ領域になります。
関連するQ&A
- 【C#】アクションゲームの地形衝突判定について
はじめまして、C#でジャンプアクションゲームを製作していて、どうしても解決できないことが出来たので質問させてください。 質問と言うのは、キャラクタとマップとの衝突判定についてです。 テキストベースのマップデータを二次元配列に入れ、それを元にマップを作成し、キャラクタの現在位置の座標を、接触しているマップチップのサイズで割り、その値をマップデータが入っている二次元配列に要素数として入れると、現在接触しているマップデータの位置が割り出せると言うところまではわかり、やってみるとマップと衝突しているように見えるのですが、このマップをスクロールさせると、衝突判定に利用している二次元配列のマップデータがスクロールしない為か、キャラクタを移動させると、マップの段差部分でキャラクタが宙に浮くと言う問題が発生しています。 なら、マップデータも一緒にスクロールさせれば言いと思い、ずっとネットや本などで調べたりして、試してはいるのですが、これと言った解決法が見つかりません。 どなたか、わかる方おりましたらよろしくお願いいたします。
- ベストアンサー
- C・C++・C#
- ID3DXSprite::Drawメソッドに関して質問です。
ID3DXSprite::Drawメソッドに関して質問です。 ID3DXSprite::Drawメソッドの第3引数でスプライトの 中心を識別する座標を指定できますが、 この座標を画像の様に中心にセットします(単に2で除算するだけですが)。 スプライト上では中心を(0,0)と扱うので、仮にこのスプライトを 左上にあわせて描画するとします。 なお、スプライトのサイズと、ウィンドウのクライアントサイズは 完全に一致しているとします。 単純に中心までの幅はX、中心までの高さはXとなりますので、 スプライトをX、Y分だけ右下にずらせば 問題なく描画されるかと思っていたのですが、 何故か画像内の結果上の様に地味に左上に描画されてしまいます。 そこで画像内の結果下の様にそれぞれにさらに0.5pixlずらして描画しますと これは想像どおりの位置で描画されます。 インターネットで調べるとテクスチャの描画の際には0.5pixl云々という記述が あるのですが、この場合でも0.5pixlのずれを意識する必要があるのでしょうか? それとも私自身、根本的に座標の求め方に問題があるのでしょうか? どうか、ご指摘お願いします。
- ベストアンサー
- C・C++・C#
- 敵との当たり判定
現在VisualC++2008でゲームを製作してるんですが 自分と敵との当たり判定がわかりません。 どのようにすればいいか教えてもらえないでしょうかm(_ _)m #define SCREEN_WIDTH (640) // 画面の横幅 #define SCREEN_HEIGHT (480) // 画面の縦幅 #define CHIP_SIZE (32) // 一つのチップのサイズ #define MAP_WIDTH (SCREEN_WIDTH / CHIP_SIZE) // マップの横幅 #define MAP_HEIGHT (SCREEN_HEIGHT / CHIP_SIZE) // マップの縦幅 #define CHAR_SIZE (30) // プレイヤーのサイズ float PlX, PlY ; // プレイヤーの座標(中心座標) int ActMain( void ) { // プレイヤーの座標を初期化 PlX = 100.0F ; PlY = 1.0F ; // マップ { int i, j ; for( i = 0 ; i < MAP_HEIGHT ; i ++ ) { for( j = 0 ; j < MAP_WIDTH ; j ++ ) { // 1のところだけ描画 if( MapData[i][j] == 1 ) { DrawBox( j * CHIP_SIZE, i * CHIP_SIZE, j * CHIP_SIZE + CHIP_SIZE, i * CHIP_SIZE + CHIP_SIZE, GetColor( 0, 0, 0 ), TRUE ) ; } } } } //プレイヤーの描写 DrawBox( ( int )( PlX - CHAR_SIZE * 0.5F ), ( int )( PlY - CHAR_SIZE * 0.5F ), ( int )( PlX + CHAR_SIZE * 0.5F ) + 1, ( int )( PlY + CHAR_SIZE * 0.5F ) + 1, GetColor( 255, 0, 0 ), TRUE ) ; Cr = GetColor( 255 , 255, 255 ) ; //敵の描写 DrawGraph(teki[0].x,teki[0].y,teki[0].img,TRUE); //初期化 void SYOKIKA(void){ teki[0].x=500; teki[0].y=200; teki[0].img=LoadGraph("red_player.bmp"); //当たり判定をつくったつもりですが反応せず・・・。一応あたったらPlXを0に移動させようとしています。 if(PlX==teki[0].x) PlX=0; if(PlX==teki[0].y) PlX=0; if(PlY==teki[0].x) PlX=0; if(PlY==teki[0].y) PlX=0; がソースです(文字数が足りないのであたり判定に関係ありそうな(敵と自分の座標関連)ところだけ抜きました)今のところ敵、自分、マップ表示や自分の移動などはできているのですが、敵に触れても反応せず、ときおり敵のいないまったく関係のない場所でPlXが0に移動したりしてしまいます ソースみづらくて申し訳ありません。
- ベストアンサー
- C・C++・C#
- Fireworks4:イメージマップの座標について
イメージマップの座標はどこを基準にしているのでしょうか? その画像の中心ですか?左上ですか? それとも、その画像を設置してページ(html)の左上ですか? 最近、Fireworks4でプルダウンメニューを作ったのですが、 設置したところウィンドウサイズによってプルダウンの表示される位置が違うので どうしてもその画像のすぐ横に固定でプルダウンを表示されたいのです。
- ベストアンサー
- HTML
- 画像読み込み
現在Microsoft Visual C++ 2008 Express Editionをつかってゲームを製作していてhttp://homepage2.nifty.com/natupaji/DxLib/dxprogram.htmlを参考に勉強しているのですがここの 30.アクションゲームにおけるマップとの当たり判定基本におけるプログラムでの // マップの描画 { int i, j ; for( i = 0 ; i < MAP_HEIGHT ; i ++ ) { for( j = 0 ; j < MAP_WIDTH ; j ++ ) { // 1は当たり判定チップを表しているので1のところだけ描画 if( MapData[i][j] == 1 ) { DrawBox( j * CHIP_SIZE, i * CHIP_SIZE, j * CHIP_SIZE + CHIP_SIZE, i * CHIP_SIZE + CHIP_SIZE, GetColor( 255, 255, 255 ), TRUE ) ; } } } } // キャラクタの描画 DrawBox( ( int )( PlX - CHAR_SIZE * 0.5F ), ( int )( PlY - CHAR_SIZE * 0.5F ), ( int )( PlX + CHAR_SIZE * 0.5F ) + 1, ( int )( PlY + CHAR_SIZE * 0.5F ) + 1, GetColor( 255, 0, 0 ), TRUE ) ; のところのキャラクターとマップの画像を自分の書いた画像にするのはどうすればいいのでしょうか? 一応上のプログラムと同じサイズの画像を書き、load graphなどでためしているのですが成功しません・・・。 分かる方いらっしゃいましたら教えてもらえないでしょうか(m;_ _)m
- ベストアンサー
- C・C++・C#
- 座標変換についての質問
どういう風に考えれば答えを出せるのかよくわからないので質問させていただきます。 C言語でのゲームプログラムに関しての質問です。 やりたい事はウィンドウ上の座標をマップの座標に変換する。です。 縦と横だけのマップチップの配置(イメージとしてグラディウスのような)の場合、 現在の座標XまたはY÷マップチップ一枚分の大きさで割ってやれば、マップの座標に変換できました。 そうではなく、今回は、斜め俯瞰のマップなのです。 ウィンドウ上の右上に行くほどマップXの数値が大きくなり、右下に行くほどマップYの数値が大きくなります。 その場合はどのように計算すれば現在の座標X、Yをマップ座標X、Yに変換できるのでしょう? 普通の縦と横だけの配置のものと考え方は似ていると思うのですがイマイチ、ピンと来ていません。 ちなみにマップチップの中心点から現在の座標Xに60、Yに-20を加えてやると、 次の(右上)チップの中心へと移動します。(その60と20に対しての斜辺は63でした) 何か不明な点、不足、間違いなどありましたら補足修正いたしますのでよろしくお願いいたします。
- ベストアンサー
- C・C++・C#
- Doja3.5 APIのImageMapについて
Doja3.5でシューティングを作っています。 マップ画面に16x16のマップチップを並べて描画しているのがすが、当たり判定やマップの上下ループの処理などをいれるにつれて処理が重くなってきました。 そこで、マップの描画にImageMapを使用したところ処理の重さは以前より改善されたのですが、いろいろネットで調べていたところ「ImageMapはつかわない」という様な書き込みをちらほら見るのですがImageMapは、あまり良くない関数なのでしょうか・・・ 使用しないほうがいいのでしょうか?
- ベストアンサー
- Java
- 角度を変えて、縮小した場合の中心座標の求め方
座標が左上基準になっています。 キャンバス座標 x:1000 y:1000 の位置に 四角形 400 × 200 を 配置すると x:1000 y:1000のままですが、ここから 四角形を縮小して、角度を変えると 左上の座標の位置が変わってしまいます。 四角形の左上の座標を求める式と、 できればその四角形の中心座標を求める式を教えてください。
- ベストアンサー
- 数学・算数
- ひし形のあたり判定について
C言語でクォータービューのRPGを作っているのですが、ひし形をマップの座標からウィンドウへ描画する座標については自力で解決できたのですが、マウスの位置を取得してそこにカーソルを重ねるときにひし形のあたり判定の仕方がわからないのですが、どなたかご存知ないでしょうか? 教えてくださいお願いします。
- ベストアンサー
- C・C++・C#
- 配列
Java初心者です。 RPGを作っているのですが、JPanelを継承したクラスのpaintComponentメソッドで、Stageをインスタンス化すると、 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException というエラーメッセージが表示されてしまいます。 エラーが発生している行は、Stage.javaで、mass_x[0]に値を代入しているところです。DrowMapクラスを継承しているので、その辺でミスをしているのだと思いますが・・・。 ------------Stage.java public class Stage extends DrowMap{ //コンストラクタ public Stage(){ super(); //////////変数に値を代入(一部略) //マップに使用する画像 mapImage = "/material/mapchip/s10.png"; //マップの作成 map_arrangement = new int[][]{ {1,1,1,1}, {1,0,0,0}, {1,0,0,0}, {1,1,1,1} }; mass_x[0] = 1;//ここでNullPointerExceptionが発生 mass_y[0] = 1; mass_x[1] = 1; mass_y[1] = 16; } } ----------DrowMap.java abstract public class DrowMap{ //////////変数宣言(一部略) //読み込んだマップチップから切り取って表示するマス public int[] mass_x; public int[] mass_y; //表示されるマップの配列 public int[][] map_arrangement; //使用するマップ画像 public String mapImage; //使用するマップ画像の縦横のサイズ(単位:ピクセル) public int mapImageSize_yoko; public int mapImageSize_tate; /**マップを描画*/ public void drowMap(Graphics g){ mapchip = ImageIO.read(getClass().getResource(mapImage));//try~catchは略 for(int i=0; i < tate; i++){ //マップのX座標を初期化 map_x = 0; //マップのY座標=フレームの上枠+行数×チップサイズ map_y = frame_top_border + i * MAPCHIP_SIZE; for(int j = 0; j < yoko; j++){ //マップのX座標=(回数-1)×マップチップの大きさ+フレームの左枠 map_x = j * MAPCHIP_SIZE + frame_border; //次に表示するマスの、チップの番号=map_arrangement[i][j]の値 int chipnumber = map_arrangement[i][j]; //画像ファイルから切り取る部分の左上のx座標 source_x = (mass_x[chipnumber] - 1) * MAPCHIP_SOURCE_SIZE; //画像ファイルから切り取る部分のy座標 source_y = mass_y[chipnumber] * MAPCHIP_SOURCE_SIZE; } //マップの描画 g.drawImage(mapchip, map_x,map_y, MAPCHIP_SIZE,MAPCHIP_SIZE, source_x,source_y, source_x+MAPCHIP_SOURCE_SIZE, source_y+MAPCHIP_SOURCE_SIZE, frame); } } } 色々と試してみたのですが、解決しません。お分かりになる方いらっしゃいましたら、教えていただけないでしょうか。
- ベストアンサー
- Java
補足
今いるキャラクターの座標をマップサイズで割り、 配列番号を参照して通れるか否かを判断しています。 で、通れるなら移動量を座標に足すといった処理になっています。