不正な左オペランドを解決するには?

解決


Nightz  2005-06-09 01:24:23  No: 57786  IP: 192.*.*.*

私は今ゲームを創ろうとしてるんですが
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;としようとしても  ↑の行で同じエラーが出てしまいました・・・

編集 削除
Blue  2005-06-09 01:39:09  No: 57787  IP: 192.*.*.*

xがdouble型やfloat型なのでエラーがでるのではないでしょうか?

編集 削除
Nightz  2005-06-09 01:39:12  No: 57788  IP: 192.*.*.*

すいません追記です  環境はVC6.0 WinXPです

編集 削除
Nightz  2005-06-09 01:40:32  No: 57789  IP: 192.*.*.*

レスありがとうございます。
しかしながらMyCharのxもOffsetXもfloatで宣言しています。

編集 削除
Blue  2005-06-09 01:42:58  No: 57790  IP: 192.*.*.*

float型(浮動小数点型)に%演算子は使えないのでは?
(余りというのがない)

編集 削除
Blue  2005-06-09 01:46:34  No: 57791  IP: 192.*.*.*

>HitMap[0].x = x - (x % 64);  
がなにをしたいのかよくわからないのですが
無理やりキャストするとか。(勿論小数点は切り捨てられるが(warning))
HitMap[0].x = x - ( static_cast< int >( x ) % 64 );

編集 削除
Nightz  2005-06-09 01:46:45  No: 57792  IP: 192.*.*.*

なるほど!! Blueさんありがとうございました。
OffsetX = (int)x % 64; にしたところ見事解決しました。
よくよく考えたらそうですよね・・。
くだらない質問に素早く親切に答えて頂いてありがとうございました。
また何かあれば聞きたいと思ってますのでよろしくお願いします〜。

編集 削除
PATIO  2005-06-09 16:47:54  No: 57793  IP: 192.*.*.*

解決になっていますけれど、
xとかyが仮に画面上の座標であると仮定するなら
floatにしなければならない意味が良くわからないのですけれど。
普通にlongでよいのではないでしょうか?
画面座標に浮動小数点型は必要ないと思いますけれど。

編集 削除
Nightz  2005-06-11 02:33:00  No: 57794  IP: 192.*.*.*

こんばんわ  わざわざレスありがとうございます
私はDirectXのテクスチャーを使って表示させています。
そのため
/* 頂点フォーマット */
typedef struct _D3DTLVERTEX_
{
  float x,y,z;
  float rhw;
  DWORD color;
  float tu0,tv0;  // テクスチャーを使うために使用
}D3DTLVERTEX;
このような感じの構造体を作って使っています。
DirectXの本を見ますとfloatが主みたい?なので・・やっているのですが
longでもいいのかなと・・・思ったり思わなかったり_|‾|○ ガクッ

編集 削除
PATIO  2005-06-13 10:55:09  No: 57795  IP: 192.*.*.*

DirectXが絡んでいたのですね。
処理上の利便性があるのであれば、それはそれで理由になると思います。
通常の画面上の座標計算だけの話であれば、longで大丈夫だと思うんですが、
DirectXの事情でそうなっているのであれば、気にしなくても良いのかな。
この辺はアプリを作る側の考え方一つだと思いますので現状はfloatでも
良いかと思います。

編集 削除
Nightz  2005-06-13 14:40:31  No: 57796  IP: 192.*.*.*

すいません  DirectXが絡んでると言ってませんでしたね。
気にして頂いてありがとうございました。

編集 削除