私は今ゲームを創ろうとしてるんですが
MyCharというクラスを作り publicメンバーにxやy等を入れています
そこで MyChar.cppにvoid CMyChar::HitCheck2Map()という関数を作り
自キャラが触れているマップチップの左上の座標が欲しいため
HitMap[0].x = x - (x % 64); ということをしています
(マップチップサイズが64です)
ビルドしてみると 「error C2296: '%' : 不正な左オペランドです」 というエラーが出て調べてみたのですが 「左オペランドが無効です」ということしか記述されていなくてよく解りません・・・
ちなみに float OffsetX = x % 64;とし Hitmap[0].x = x -OffsetX;としようとしても ↑の行で同じエラーが出てしまいました・・・
xがdouble型やfloat型なのでエラーがでるのではないでしょうか?
すいません追記です 環境はVC6.0 WinXPです
レスありがとうございます。
しかしながらMyCharのxもOffsetXもfloatで宣言しています。
float型(浮動小数点型)に%演算子は使えないのでは?
(余りというのがない)
>HitMap[0].x = x - (x % 64);
がなにをしたいのかよくわからないのですが
無理やりキャストするとか。(勿論小数点は切り捨てられるが(warning))
HitMap[0].x = x - ( static_cast< int >( x ) % 64 );
なるほど!! Blueさんありがとうございました。
OffsetX = (int)x % 64; にしたところ見事解決しました。
よくよく考えたらそうですよね・・。
くだらない質問に素早く親切に答えて頂いてありがとうございました。
また何かあれば聞きたいと思ってますのでよろしくお願いします〜。
解決になっていますけれど、
xとかyが仮に画面上の座標であると仮定するなら
floatにしなければならない意味が良くわからないのですけれど。
普通にlongでよいのではないでしょうか?
画面座標に浮動小数点型は必要ないと思いますけれど。
こんばんわ わざわざレスありがとうございます
私はDirectXのテクスチャーを使って表示させています。
そのため
/* 頂点フォーマット */
typedef struct _D3DTLVERTEX_
{
float x,y,z;
float rhw;
DWORD color;
float tu0,tv0; // テクスチャーを使うために使用
}D3DTLVERTEX;
このような感じの構造体を作って使っています。
DirectXの本を見ますとfloatが主みたい?なので・・やっているのですが
longでもいいのかなと・・・思ったり思わなかったり_|‾|○ ガクッ
DirectXが絡んでいたのですね。
処理上の利便性があるのであれば、それはそれで理由になると思います。
通常の画面上の座標計算だけの話であれば、longで大丈夫だと思うんですが、
DirectXの事情でそうなっているのであれば、気にしなくても良いのかな。
この辺はアプリを作る側の考え方一つだと思いますので現状はfloatでも
良いかと思います。
すいません DirectXが絡んでると言ってませんでしたね。
気にして頂いてありがとうございました。
ツイート | ![]() |