弾を発射する・押しっぱなしオート連射

トップへ

やりたいこと

任意のキーを押したときに弾を発射したい
押しっぱなしにしたらいい感じの間隔でオート連射にしたい

概要

こまかい手順

キー入力とオブジェクト生成

obj_player > ステップ

if keyboard_check(ord("V"))
{
	instance_create_layer(x + sprite_width, y + (sprite_height / 4), "Instances", obj_player_bullet)
}

keyboard_check(ord("V")) という組み合わせで、キーボードの"V"キーが押されているかどうかを判定できる。
TRUEであれば、instance_create_layer で obj_player_bullet というオブジェクトを生成してRoomに追加する。

生成数上限チェック

obj_player > ステップ

if keyboard_check(ord("V"))
{
	if instance_number(obj_player_bullet) < 4
	{
		instance_create_layer(x + sprite_width, y + (sprite_height / 4), "Instances", obj_player_bullet)
	}
}

instance_number 関数にオブジェクトを引数として指定すると、そのオブジェクトがRoom上にいくつ存在するかを返してくれる。
例では4つあるかどうかを判定し、4つ以下であればインスタンスを生成するようにしている。

アラームによる

まず obj_player に対してアラームを追加しておく(自動採番なのでアラーム0とする)
アラームは1フレームにつき1減算していって、0になったらスクリプトを実行するという仕組みの模様。
アラームに対してもスクリプトを設定できるが、今回はアラームをタイマーとして扱いたいだけなのでスクリプトには何も設定しない

obj_player > ステップ

// obj_player.alarm[0] → アラーム0のフレームカウントが0になっていればVキーを入力したとみなす。
if keyboard_check(ord("V")) && obj_player.alarm[0] <= 0
{
	if instance_number(obj_player_bullet) < 4
	{
		// 8フレーム後にアラートが有効になるが、今回は8フレーム経過したかどうかのタイマーとして扱う
		obj_player.alarm[0] = 8
		instance_create_layer(x + sprite_width, y + (sprite_height / 4), "Instances", obj_player_bullet)
	}
}