ページ 11

無題

Posted: 2007年11月07日(水) 17:35
by りょうちん
質問です。アクションゲームを作っていてキャラクターの画像を
 右キーで右に回転 左キーで左に回転 上キーで向いている角度方向に直進
という動きをさせたいのですが、回転はするのですが直進しません。

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

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

Re:無題

Posted: 2007年11月07日(水) 20:54
by 管理人
具体的な仕様がよくわかりませんが、単に進む方向ということだけでお答えすると、

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

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

Re:無題

Posted: 2007年11月07日(水) 21:36
by りょうちん
返信ありがとうございます。まずタイトルが無題だったに気づきませんでした、ごめんなさい。
分かりにくい質問になってしまったのも申し訳ありませんでした。
理由はわからないのですが、問題解決できました。
勉強のため、よろしければなぜこれでできたのか教えてください(泣
(上キーを押さなくても自動で進むように変更しました)
こちらの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になるはずだから
変にでも動くはずですよね・・。という事でなぜ解決したかわかりませんでした。