ページ 11

自機の弾速

Posted: 2015年4月29日(水) 23:56
by アキラ
以下のようなプログラムで,Zを押したら弾が出るようにしたいのですが,弾が一瞬で一番上まで行ってしまします。
どのようにすればゆっくりと弾が出るのでしょう。

初歩的なことかもしれませんが返答お願いします。

int w, h, l=0;
int bullet[6];
void shot(){
if( Key[ KEY_INPUT_Z ] % 5 == 1){
w = x;
for(h = y;h>0;h--){
DrawRotaGraph( w , h ,0.8, PI, bullet[l], TRUE );
}
}
}

Re: 自機の弾速

Posted: 2015年4月30日(木) 10:33
by Referia
コードを提示するときはBBcodeを有効にした状態でcodeタグで囲んでいただけると、見やすくてありがたいです。

このプログラムだとDrawRotaGraphがifの中にあるのでZキーを離した時点で描画が止まることと、
Zキーを押すと今の位置から画面上端まで一気に描画してしまう点が問題になりそうですね。
以下のように更新・描画・発射を分けると良いと思います

コード:

// 弾丸の座標を持つ2次元配列
int bulletPoint[6][2];
// 弾丸のグラフィックハンドラを持つ配列
int bullet[6];
// 発射した弾丸の数
int count = 0;

// 発射関数
void shot(){
	// Zキーが押されたとき
	if (Key[KEY_INPUT_Z] % 5 == 1){
		count++;					// 発射数を増やして
		bulletPoint[count][0] = x;	// X軸と
		bulletPoint[count][1] = y;	// Y軸の座標を代入
	}
}

// 更新関数
void update(){
	int i = 0;
	// もし1つでも発射しているならば
	if (count > 0){
		// 各弾丸のY座標を更新
		for (i = 0; i < count; i++){
			bulletPoint[i][1]--;
		}
	}
}

// 描画関数
void draw(){
	int i = 0;
	// もし1つでも弾丸を発射しているならば
	if (count > 0){
		// 発射している弾丸をすべて描画する
		for (i = 0; i < count ; i++){
			DrawRotaGraph(bulletPoint[i][0], bulletPoint[i][1], 0.8, PI, bullet[i], TRUE);
		}
	}
}

Re: 自機の弾速

Posted: 2015年5月01日(金) 10:17
by アキラ
ご返答ありがとうございます!
おかげでうまく作ることができました。