ページ 1 / 1
構造体内で宣言した配列メンバの扱い方
Posted: 2012年10月18日(木) 22:00
by イマダニ
ヘッダファイルに書かれた構造体の中にこんな配列のメンバがあります。
コード:
typedef struct{
play img[10];
}play;
これをこんな形で別のファイルで使うと
コード:
//画像を読み込む
LoadDivGraph("play.png",2,2,1,64,64,play.img);
if(なになにが押された時)
play->img[12]を描画
画像が読み込めません
構造体内に配列のメンバを入れるのは初めてなのでなぜなのかわかりません。
なにか使用するための決まりとかあるんでしょうか?
Re: 構造体内で宣言した配列メンバの扱い方
Posted: 2012年10月18日(木) 22:24
by box
インデントくらい、ちゃんと付けていただきたいところであります。
さて、
イマダニ さんが書きました:
画像が読み込めません
どういう状況をもってして、「画像が読み込めない」と判断されているのでしょうか。
何かエラーメッセージが出ているのであれば、
「何をしたときに」「どんな」エラーメッセージが出ているかを「具体的に」書いていただけると
大いに助かります。なにせ、質問者さんのパソコンの状態はご本人にしかわからないものでして。
イマダニ さんが書きました:
コード:
typedef struct{
play img[10];
}play;
これは、play型のメンバーimg[10]を持つ構造体にplayという別名を付けた状態です。
その別名が付いた変数playをどこかで定義されていますか?
イマダニ さんが書きました:
コード:
//画像を読み込む
LoadDivGraph("play.png",2,2,1,64,64,play.img);
if(なになにが押された時)
play->img[12]を描画
変数playは、構造体の実体ですか?それとも構造体を指すポインターですか?
両者がゴッチャになっていないでしょうか。
play.imgというのは、メンバーimgの先頭アドレスを指しています。実体をロードしなくて大丈夫ですか?
また、img[12]というのは配列の定義範囲外になっています。大丈夫ですか?
Re: 構造体内で宣言した配列メンバの扱い方
Posted: 2012年10月18日(木) 22:53
by イマダニ
すいません!あわてて質問して質問内容が適当になってしまいました。
今後気をつけます……
現在、ゲームをチーム制作しており、まだ初心者である友人がプレイヤーキャラを動かそうとしています。
その友人が初めて分割コンパイルを行っており
コード:
player.h
typedef struct {
int Px,Py;
int PCG[16];
} PLAYER;
コード:
player.cpp
void player_draw(PLAYER *play){
DrawRotaGraph( play->Px, play->Py, 2.0, 0.0, play->PCG[12], TRUE );
}
このような形でプレイヤー画像を描画させようとしています。
結果、エラーも無く動作はするのですが、画面にプレイヤー画像が映りません。
それで僕に質問してきたのですが、僕にもわかりません!
ご教授願います。
Re: 構造体内で宣言した配列メンバの扱い方
Posted: 2012年10月18日(木) 23:01
by softya(ソフト屋)
見せられた部分でだけ言えば動くのでは?としか言えません。
まず、PCG[12]にちゃんと画像ハンドルが入っていることをデバッガで確認してください。
それとplayのポインタ値が正しいこともデバッガで確認してください。
それと、play->PCG[12]が正しいハンドル値あることも確認する必要があります。
【追記】
play->Px, play->Py
が正しい座標を指していることも確認が必要です。
全部デバッガで確認してくださいね。
Re: 構造体内で宣言した配列メンバの扱い方
Posted: 2012年10月18日(木) 23:03
by nil
教授->教示の間違いでは?
DrawRotaGraphにブレークポイントを置き、F5でデバッグ実行ブレークポイントで止まった時にplay->PCG[12]の中身が-1なら画像は読み込めていません。
Re: 構造体内で宣言した配列メンバの扱い方
Posted: 2012年10月19日(金) 15:50
by イマダニ
デバッガして、いろいろ試行錯誤したところ全く別の場所でミスがありました。
いろいろお騒がせしてすみません……
でもデバッガやブレークポイントはあまり活用したことがなかったので
今回の皆さんのアドバイスで大変勉強になりました。
アドバイスありがとうございました!