変数の型について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
bb

変数の型について

#1

投稿記事 by bb » 15年前

10章の「敵を表示させてみよう」で
void graph_enemy(){
int i;
for(i=0;i<ENEMY_MAX;i++){
if(enemy.flag==1){
DrawRotaGraphF(enemy.x+FIELD_X,enemy.y+FIELD_Y,1.0f,0.0f,img_enemy[0][enemy.img],TRUE);
}
}
}
とありますがenemy.x,enemy.yは型がdoubleでの宣言ですが
DrawRotaGraphの引数の型はintですよね?
ここで「intにdoubleが使われてデータを失う危険があります」とビルド中出ます。
立ち上げて動くには動くのですがこれでいいのでしょうか?
VC++2008ではなく2010でやって変換がうまくいかなかったので自分でヘッダとかソース追加してやってるんですが関係ありますか?

softya

Re:変数の型について

#2

投稿記事 by softya » 15年前

DrawRotaGraphの引数の型はintですが、DrawRotaGraphFの引数の型はfloatです。
名前が微妙に違いますので注意してください。

Dxlib.hより抜粋。

extern int DrawRotaGraph( int x, int y, double ExRate, double Angle, int GrHandle, int TransFlag, int TurnFlag = FALSE ) ; // グラフィックの回転描画
extern int DrawRotaGraphF( float xf, float yf, double ExRate, double Angle, int GrHandle, int TransFlag, int TurnFlag = FALSE ) ; // グラフィックの回転描画

もしオリジナルのヘッダを作っているなら、原因を調べて元のヘッダを使えるようにしないと今後が面倒だと思います。 画像

Dixq (管理人)

Re:変数の型について

#3

投稿記事 by Dixq (管理人) » 15年前

警告を消す章が少し先にあります。
しかしdoubleを全部floatにした方が早いです…。
Directxを使うと計算過程すら両者が同じ精度になると知らなかったからこうしてあるんですよね;

bb

Re:変数の型について

#4

投稿記事 by bb » 15年前

ありがとうございます。
参考にしながら別のゲーム(STG)をつくってますので
とりあえずdoubleをintにして座標計算はすべて整数型で処理してみようと思います。
ありがとうございました。

Dixq (管理人)

Re:変数の型について

#5

投稿記事 by Dixq (管理人) » 15年前

いや、それはまずいです。

softyaさんが仰っているように、DrawRotaGraphF関数の引数はfloat型であってint型ではありません。
警告はとりあえず無視でも大丈夫です。
これも上と重なりますが、気になるようなら37章を参考にするか、全てfloat型にして下さい。

int a=0;

a += 0.9;
a += 0.9;
a += 0.9;
a += 0.9;
a += 0.9;

の計算結果がどうなるかを考えて頂ければ整数型で座標管理をしてはいけない理由がお解りいただけると思います。

閉鎖

“C言語何でも質問掲示板” へ戻る