dポイントプレゼントキャンペーン実施中!

初心者です。よろしくお願いします。
C言語とDXライブラリを利用してゲームを作成中です。

GetMousePointの関数を利用して、マウスの座標がその時、どこにあったのか。という情報を配列に格納したい、と考えています。

リファレンスページを参照すると、
int GetMousePoint( int *XBuf, int *YBuf );

このように書かれているのですが、配列に格納しようとするとフリーズしてしまいます。

【1】
GetMousePoint(&x,&y);

zahyou[i] = x;

最初上のようにしてフリーズしたため、ああ、アドレスを格納してしまったのか。と思いまして、
下のように直しました。

【2】
GetMousePoint(&x,&y);

int *a = &x;
zahyou[i] = *a;

が、またフリーズが発生しました。ポインタを説明しているページを見てはいるのですが、ポインタの指すアドレスの中にある数値の取り出し方がイマイチ掴めません。

なぜか別の場所で処理している、

【3】
(x = x-230)/=40;
x = x*40+250;

このような処理に関しては動くのですが・・・。これはアドレスを直接に利用している、ポインタの中身を利用しているのではない、ような気がするのですが、なぜか動いています。
(上の処理より下の箇所で利用しています)

【1】【2】【3】のそれぞれがどう言った処理を行っていて、こうすれば良い。等のアドバイスをいただけないでしょうか。
あつかましいとは思いますが、よろしくお願いします。

A 回答 (3件)

static int x,y なら


GetMousePoint(&x,&y);
zahyoux[i] = x;
zahyouy[i] = y;
でいいはずですが。

// static である必要はあるのか? とか
// zahyou[i] の宣言は? zahyoux[i] の間違い ? とか
// struct point {int x;int y} zahyou[20] とかの方がいいのでは? とか

ここでフリーズしているわけでは無いと思います。
これが原因だとしても、実際にフリーズするのは別の場所では?
例えば、このzahyouを使って何かを表示している箇所とか。


> GetMousePoint(&x,&y);
> int *a = &x;
> zahyou[i] = *a;

これは
GetMousePoint(&x,&y);
zahyou[i] = x;
とまったく同じです。
int *a = &x; で aはxへのアドレスとなり
zahyou[i] = *a; で、 *a→(xへのアドレス)の実体→ xの実体
となるからです。


> (x = x-230)/=40;
> x = x*40+250;

ポインタはまったく関係ありません。
ただの数値演算です

ところで
(x = x-230)/=40;
は意図してこうしたのですか?
C++では間違いでは無いのですが...

この回答への補足

ううん。【1】でよかったとは思いませんでした。別の箇所なんですかね。Staticである必要はあります。補足で書いてあるプログラムは一部で、別の関数でもそれらを使用する予定、あるいはしている状態だからです。

>これは
>GetMousePoint(&x,&y);
>zahyou[i] = x;
>とまったく同じです。

structは構造体の宣言でしたね。そういえばそんなものもありました。頭から抜け落ちてました。

【1】と【2】が同じとは、有難い助言です。
正直、何が何やら、で頭が沸騰していましたので。

>(x = x-230)/=40;
>は意図してこうしたのですか?
>C++では間違いでは無いのですが...

意図して書いてはいるんですが、改めてみると何かおかしいですね? C言語のみ利用しているつもりですので、直した方がいいんでしょうか。


問題なのは、

>ここでフリーズしているわけでは無いと思います。
>これが原因だとしても、実際にフリーズするのは別の場所では?
>例えば、このzahyouを使って何かを表示している箇所とか。

ここでしか、このコードが書かれていない事なんです。
ちなみに実験的に動くかどうか、を試しで入れてみたので、別の場所で全く利用していません。

何かアホなミスをしているんでしょうか・・・。
前回は == を入れる所を = にしてしまっていて、半日悩みましたorz

補足日時:2013/09/19 08:24
    • good
    • 0
この回答へのお礼

配列の[i]部分で問題が生じているようでした。
zahyoux[i]の[i]部分に数字を入れればきちんと動作するのですが、そこに変数を入れるとフリーズしてしまうみたいです。
iには初期値0が与えられているのですが。

とりあえず、もう少し弄くってみたいと思います。
丁寧にありがとうございました。

お礼日時:2013/09/19 18:43

群盲象をなでる状態になりそうな気がするので, 可能ならそのような問題を生じる短いプログラムを出した方がいいんじゃないでしょうか.

    • good
    • 0
この回答へのお礼

家に戻ったので色々とやってみた所、ポインタではなく配列の方で問題が生じているようでした。

ありがとうございました。

お礼日時:2013/09/19 18:41

x,y,zahyouの型はなんですか?



>zahyou[i] = x;

iの値は問題ありませんか?

この回答への補足

それぞれ、
static int x,y;
static int zahyou[20];

static int i=0;
で宣言されています。

正確に書くならば、


static int x.y;
static int zahyoux[20],zahyouy[20];
static int i=0;

/*** ここから ***/

GetMousePoint(&x,&y);

int *a = &x;
int *b = &y;

zahyou[i] = *a; //ここと
zahyou[i] = *b; //ここ

i++;

if (i == 20)
i=0;

/*** ここまでの処理をマウスが離されたかどうか、を変数fと、GetMouseInput関数を利用して繰り返しています ***/


右側にコメントを入れてある配列の箇所を除けば、問題なく動くことは確認してあります。きちんと座標も得られているようです。
単純にポインタの知識が不足しているものだと思っているのですが、違うのでしょうか。

補足日時:2013/09/19 07:27
    • good
    • 0
この回答へのお礼

とりあえず、問題の箇所が判明しまして、アドバイスをいただけました。
ありがとうございました。

お礼日時:2013/09/19 18:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!