スプライトIDをカウンタのIndexとして使って管理するとこんな感じ
#include "hspdx.as"
es_ini 1024,1024,360 ; 角度の分割を360に設定
es_screen 640,480,32,,1,1 ; スクリーン初期化
if stat : end
*start
boxf
font msgothic, 31, 1
color 0,255,255
mes "自"
color 128,255,0
mes "A"
color 255,128,0
mes "B"
color 0,255,0
mes "●"; 弾A
color 255,0,255
mes "・"; 弾B
es_buffer 0,2,,,1
if stat : rnd
es_size 32,32,60
es_pat 0, 0,0 ; 自
es_pat 1, 0, 32 ; 敵A
es_pat 2, 0, 32*2 ; 敵B
es_pat 3, 0, 32*3 ; 弾A
es_pat 4, 0, 32*4 ; 弾B
gsel 0,1
es_cls
es_sync
wait 100
myx=200:myy=400
es_set 0,myx,myy,0,1 ; メインのスプライト
es_type 0,1 //自機のタイプを1
es_new enid,1
es_set enid,50,50,1,1
es_type enid,2 //敵Aのタイプを2
b_tcnt(enid)=0 //弾の発射準備カウンタ初期化
es_new enid,1
es_set enid,600,50,2,1
es_type enid,4 //敵Bのタイプを4
b_tcnt(enid)=0
*main
stick ky,$1f
if ky&1 : myx-=8
if ky&4 : myx+=8
if ky&2 : myy-=8
if ky&8 : myy+=8
enid=1//検索開始ID
repeat
es_find enid,2+4,enid
if enid<0 {break}
if b_tcnt(enid)=0 {//現在弾は出してない
es_get type,enid,13
if type=2 {//敵Aだった
if rnd(100)>95 {//100分の5で弾発射準備
es_get enx,enid,3
es_get eny,enid,5
es_ang enx-16,eny-16,myx-16,myy-16
b_ang(enid)=stat-25 //自機の方向から-25度ずらす
b_fps(enid)=10 //10フレーム毎に発射(必ず1以上を設定)
b_tcnt(enid)=5*b_fps(enid) //5初発連続発射
}
}else{//敵Bだった
if rnd(1000)>980 {//1000分の20で弾発射準備
es_get enx,enid,3
es_get eny,enid,5
es_ang enx-16,eny-16,myx-16,myy-16
b_ang(enid)=stat+3//自機の方向から3度ずらして弾が直接自機を狙わないように
b_fps(enid)=5 //5フレーム毎に発射(必ず1以上を設定)
b_tcnt(enid)=4*b_fps(enid) //4発連続発射
}
}
}
if b_tcnt(enid) { gosub *Fire :b_tcnt(enid)--}//弾発射処理
enid++ //同じIDを検索しないように+1(これを忘れると無限ループになる)
loop
if ky&$80 : goto *owari
es_pos 0,myx,myy
es_cls 0,70,60
es_draw
es_sync 16
await 0
goto *main
//弾発射処理
*Fire
es_get type,enid,13
es_get enx,enid,3
es_get eny,enid,5
if type=2 {
if (b_tcnt(enid)\b_fps(enid))=0 {//b_tcnt(enid)/b_fps(enid)の余りが0なら発射
repeat 3
es_new a,2
if a<0{break}
es_set a,enx,eny,3,1
es_type a,16
es_adir a,b_ang(enid)+cnt*25,500//+25ずつずらして指定
loop
}
}else{
if (b_tcnt(enid)\b_fps(enid))=0 {
repeat 60
es_new a,2
if a<0{break}
es_set a,enx,eny,4,1
es_type a,16
es_adir a,b_ang(enid)+cnt*6,300//6度ずつずらして指定
loop
}
}
return
*owari
es_bye
end