自機の弾速

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

自機の弾速

#1

投稿記事 by アキラ » 10年前

以下のようなプログラムで,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 );
}
}
}

Referia
記事: 24
登録日時: 10年前
住所: 奈良

Re: 自機の弾速

#2

投稿記事 by Referia » 10年前

コードを提示するときは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: 自機の弾速

#3

投稿記事 by アキラ » 10年前

ご返答ありがとうございます!
おかげでうまく作ることができました。

閉鎖

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