無題

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

無題

#1

投稿記事 by りょうちん » 18年前

質問です。アクションゲームを作っていてキャラクターの画像を
 右キーで右に回転 左キーで左に回転 上キーで向いている角度方向に直進
という動きをさせたいのですが、回転はするのですが直進しません。

DrawRotaGraph関数の引数に
x座標に[現在のx座標 + 上キーフラグ * cos(角度) * 速さ]
y座標に[現在のy座標 + 上キーフラグ * sin(角度) * 速さ]
みたいな感じで書いたのですが、これではだめでした。

詳しい方教えてください。よろしくお願いします。

管理人

Re:無題

#2

投稿記事 by 管理人 » 18年前

具体的な仕様がよくわかりませんが、単に進む方向ということだけでお答えすると、

上キーを押した時、角度がπ/2になるようにすれば、x座標の増分は0になり、y座標の増分は速さそのものになります。

どうだめだったのでしょう?

りょうちん

Re:無題

#3

投稿記事 by りょうちん » 18年前

返信ありがとうございます。まずタイトルが無題だったに気づきませんでした、ごめんなさい。
分かりにくい質問になってしまったのも申し訳ありませんでした。
理由はわからないのですが、問題解決できました。
勉強のため、よろしければなぜこれでできたのか教えてください(泣
(上キーを押さなくても自動で進むように変更しました)
こちらのHPを参考にして
if(KeyBuf[ KEY_INPUT_RIGHT] == 1){
		ch.z=ch.z+10;
}
if(KeyBuf[KEY_INPUT_LEFT] == 1 ){
		ch.z=ch.z-10;
}
rawRotaGraph((int)ch.x+cos(PI*(ch.z*0.001)),(int)ch.y+sin(PI*(ch.z*0.001)),
        1 ,PI*(ch.z*0.001)+PI/2, image, TRUE  ) ;
こんな感じで組んだところ回転はするのですが、直進しませんでした。
これを
if(KeyBuf[ KEY_INPUT_RIGHT] == 1){
		ch.z=ch.z+10;
}
if(KeyBuf[KEY_INPUT_LEFT] == 1 ){
    	    ch.z=ch.z-10;
}
ch.x=ch.x+cos(PI*(ch.z*0.001));
ch.y=ch.y+sin(PI*(ch.z*0.001));
DrawRotaGraph((int)ch.x,(int)ch.y, 1 ,PI*(ch.z*0.001)+PI/2, image, TRUE  ) ;
に変更したらうまくいきました。ch.zは0で初期化してます。
はじめ、cosやsinの値は1未満の数値だからDouble型をInt型にしたときに0になるため、こう変更して
解決したと思ってたのですが。よく考えたらch.zの初期値0ならばcosの値1になるはずだから
変にでも動くはずですよね・・。という事でなぜ解決したかわかりませんでした。

閉鎖

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