はじめまして。プログラミングを始めてまだ1ヶ月ちょっとの新人です。
質問ですが、画像を方向キーでマス目通りに移動させたいのですが、
現在地から左方向にマスがある時、flag4=1
それ以外、flag4=0
として
if (flag4=1)
{if(Key[KEY_INPUT_NUMPAD4]==1)Xzahyou-=48;}
と書くと、41章の「毎回書くプログラムの骨格(キー入力監視付)」を使わせてもらっているので
移動した直後に画像が元の位置に戻ってしまいます。
ifの条件を抜けた後も処理を反映させておくにはどうすればいいのでしょうか?
ifの条件を抜けた後
Re:ifの条件を抜けた後
これだけでは何とも言えませんが。
変数 Xzahyou が画像のX軸の表示位置を保持していると仮定して。
この Xzahyou をどこかで元の値に戻してませんか?
if(Key[KEY_INPUT_NUMPAD4]==1) の中の式は、ある特定のキーが押されていたら。 という意味でいいでしょうか。
>移動した直後に画像が元の位置に戻ってしまいます。
という事ですが、キーを押しっぱなしにしていても、移動した直後に元の位置に戻りますか?
変数 Xzahyou が画像のX軸の表示位置を保持していると仮定して。
この Xzahyou をどこかで元の値に戻してませんか?
if(Key[KEY_INPUT_NUMPAD4]==1) の中の式は、ある特定のキーが押されていたら。 という意味でいいでしょうか。
>移動した直後に画像が元の位置に戻ってしまいます。
という事ですが、キーを押しっぱなしにしていても、移動した直後に元の位置に戻りますか?
Re:ifの条件を抜けた後
質問の答えではありませんが、ありがちなミスがあるので。
if (flag4=1) は常に真となります。
私は定数との比較をする時は、if(定数==変数)で書く様にしています。
そうすると if (1=flag4)と書くとコンパイラさんがミスを教えてくれます。
if (flag4=1) は常に真となります。
私は定数との比較をする時は、if(定数==変数)で書く様にしています。
そうすると if (1=flag4)と書くとコンパイラさんがミスを教えてくれます。
Re:ifの条件を抜けた後
ご指摘通り(flag4=1)になってました。
なのでいろいろ書き直してみたら、今度はキーを押すと(押しっぱなしにしても)
一瞬消えてから、またもとの位置に表示されるようになってしまいました。
実際のコードを載せておくので、間違いなどあったらご指摘お願いします。
//ココから
//画像
int BF=LoadGraph("masume.png"),gazou[5];
LoadDivGraph ("gazou.png",5,5,1,64,41,gazou);
DrawGraph(0,0,BF,FALSE);
//座標
int yoko[13],tate[17],px=9,py=12;
yoko[px]=(px*48);
tate[py]=(py*16+160);
//移動
if ((px>0) && (py<16))
{if (Key[KEY_INPUT_NUMPAD4]==1)px--,py++;}
if ((px<12) && (py<16))
{if (Key[KEY_INPUT_NUMPAD2]==1)px++,py++;}
if ((px>0) && (py>0))
{if (Key[KEY_INPUT_NUMPAD8]==1)px--,py--;}
if ((px<12) && (py>0))
{if (Key[KEY_INPUT_NUMPAD6]==1)px++,py--;}
//描画
DrawGraph(yoko[px],tate[py],gazou[1],TRUE);
//ココまで
なのでいろいろ書き直してみたら、今度はキーを押すと(押しっぱなしにしても)
一瞬消えてから、またもとの位置に表示されるようになってしまいました。
実際のコードを載せておくので、間違いなどあったらご指摘お願いします。
//ココから
//画像
int BF=LoadGraph("masume.png"),gazou[5];
LoadDivGraph ("gazou.png",5,5,1,64,41,gazou);
DrawGraph(0,0,BF,FALSE);
//座標
int yoko[13],tate[17],px=9,py=12;
yoko[px]=(px*48);
tate[py]=(py*16+160);
//移動
if ((px>0) && (py<16))
{if (Key[KEY_INPUT_NUMPAD4]==1)px--,py++;}
if ((px<12) && (py<16))
{if (Key[KEY_INPUT_NUMPAD2]==1)px++,py++;}
if ((px>0) && (py>0))
{if (Key[KEY_INPUT_NUMPAD8]==1)px--,py--;}
if ((px<12) && (py>0))
{if (Key[KEY_INPUT_NUMPAD6]==1)px++,py--;}
//描画
DrawGraph(yoko[px],tate[py],gazou[1],TRUE);
//ココまで
Re:ifの条件を抜けた後
もし
Key[KEY_INPUT_NUMPAD4]==1
Key[KEY_INPUT_NUMPAD2]==1
Key[KEY_INPUT_NUMPAD8]==1
Key[KEY_INPUT_NUMPAD6]==1
で、px=9、py=12 だと
px--,py++;
px++,py++;
px--,py--;
px++,py--;
となって結局pxもpyも値は変わらないけど、そういう事では無いですか?
Key[KEY_INPUT_NUMPAD4]==1
Key[KEY_INPUT_NUMPAD2]==1
Key[KEY_INPUT_NUMPAD8]==1
Key[KEY_INPUT_NUMPAD6]==1
で、px=9、py=12 だと
px--,py++;
px++,py++;
px--,py--;
px++,py--;
となって結局pxもpyも値は変わらないけど、そういう事では無いですか?
Re:ifの条件を抜けた後
もしかして、提示されたコードをwhile、forとかの中に全部書いてたりしますか?
もしそうだと、
> int yoko[13],tate[17],px=9,py=12;
毎回初期化されてしまうので結果、移動しても戻ってしまうのではないでしょうか
もしそうだと、
> int yoko[13],tate[17],px=9,py=12;
毎回初期化されてしまうので結果、移動しても戻ってしまうのではないでしょうか
Re:ifの条件を抜けた後
> もしかして、提示されたコードをwhile、forとかの中に全部書いてたりしますか?
よく確認したら、whileの中に書いてました…
お騒がせしてすみませんでした。
もしよろしければ、41章の「毎回書くプログラムの骨格(キー入力監視付)」のサンプルの
どこに何(intやDrawGraphなど)を書けばいいのか教えて頂けないでしょうか?
プログラムの書く順番がいまいちよく解らないので…
よく確認したら、whileの中に書いてました…
お騒がせしてすみませんでした。
もしよろしければ、41章の「毎回書くプログラムの骨格(キー入力監視付)」のサンプルの
どこに何(intやDrawGraphなど)を書けばいいのか教えて頂けないでしょうか?
プログラムの書く順番がいまいちよく解らないので…