今になってで恥ずかしくて聴けない話ですがそれでもこれを知らないと先には進めないので…

アバター
せんちゃ
記事: 50
登録日時: 15年前
住所: 江別市東野幌町
連絡を取る:

今になってで恥ずかしくて聴けない話ですがそれでもこれを知らないと先には進めないので…

投稿記事 by せんちゃ » 14年前

ゲーム製作をする際に、Dxライブラリを使ってプログラムを書いているのですが、
画像を読み込んで表示すると左上が中心座標になります。

なのでキャラクターの画像の当たり判定が実質左上から判定が始まってしまい、
これだと変なところでいきなり衝突判定してしまい、当たるべき部分で判定されないという
現象が起きてしまいます。

その分地点をズラしてあげればこの問題は解決するのですが、
これがどういうプロセスで座標をちゃんと中心にしているのか…

その辺をちゃんと設定できるようにするにはどうすればいいのか、
という理由が今だにわかっていません^^;


龍神録の館の
#define FIELD_MAX_X 384
#define FIELD_MAX_Y 448

#define FIELD_X 32
#define FIELD_Y 16

FIELD_MAX_X, ~Y それぞれキャラクタが動ける領域の広さ
FIELD_X, ~Yはその領域の左上の座標
(32,16)の座標から横に384,縦に448の広さがキャラクタが動ける領域

このあたりの部分が当たり判定に関係しているのかな??

と思い調べてみますがイマイチ理解できていません…


今になって悩んでいます^^;;

アバター
Tatu
記事: 445
登録日時: 14年前

Re: 今になってで恥ずかしくて聴けない話ですがそれでもこれを知らないと先には進めないので…

投稿記事 by Tatu » 14年前

龍神録プログラミングの館では
弾などの画面枠内の描画は
左上を指定するDrawGraphFではなく、
中心を指定するDrawRotaGraphFを使っていますよ。
この関数は画像のサイズに関係なく指定した座標が画像の中心になるように描画します。
さらに画像を拡大縮小、回転して描画することもできます。

graph.cppでは毎回画面枠の位置を考えなくて済むように
DrawRotaGraphFdFという関数を用意しています。
これを使えば指定した座標に枠の始まる位置が足されるので、
画面枠からの座標さえ指定していればOKです。

画面枠左上から見て(x,y)の位置に画像を描画したい場合

DrawRotaGraphF(x+FIELD_X,y+FIELD_Y,...)
とDrawRotaGraphFdF(x,y,...)
が同じ処理になるので引数に+FIELD_Xとか+FIELD_Yとかつけなくて済むのです。

アバター
せんちゃ
記事: 50
登録日時: 15年前
住所: 江別市東野幌町
連絡を取る:

Re: 今になってで恥ずかしくて聴けない話ですがそれでもこれを知らないと先には進めないので…

投稿記事 by せんちゃ » 14年前

tatuさん
コメントありがとうございます!!
なるほど!DrawGraphとDrawRotaGraphで中心座標が違うのはしりませんでした(汗
たしかDrawRotaGraphFdFは自作された関数だったことは覚えています。

これで謎が解けました!ありがとうございます!!!