どこでつまっているかわからないのですが、
とりあえず、スペースキーで弾を発射するサンプルを作ってみました。
押しっぱなしで連射出来るようになっています。
弾のオブジェクトは
発射する時に作成して、消えるときに削除するといった流れですね。
このサンプルにはありませんが、命中した時も同じです。
削除しない方法としては
あらかじめ全ての弾のオブジェクトを登録して非表示(OBJ_HIDE)にしておき
発射するときに表示し、終わったら再び非表示にするといった方法もあります。
#include "hgimg3.as"
hgini
setpos HGOBJ_CAMERA , 20 , 10 , 30 ; カメラ
setang HGOBJ_CAMERA , deg2rad(45) , 0 , deg2rad(45)
setcolor 255 , 255 , 255 ; 自機
addbox MDL_PLAYER , 2 , 2
regobj OBJ_PLAYER , MDL_PLAYER
setcolor 0 , 255 , 255 ; ショット
addbox MDL_SHOT , 1 , 1
SHOT_MAX = 10 ; 最大数
dim OBJ_SHOT , SHOT_MAX ; オブジェクト用
dim SHOT , SHOT_MAX ; 状態
SHOT_COUNT = 0 ; 発射間隔カウント
*MAIN
getkey SPC_KEY , ' ' ; スペースキー
if SPC_KEY { ; 押された
if SHOT_COUNT = 0 { ; カウントが0ならば発射
repeat SHOT_MAX
if SHOT(cnt) = 0 { ; 未使用か
SHOT(cnt) = 1 ; 発射状態に
regobj OBJ_SHOT(cnt) , MDL_SHOT ; オブジェクト作成
break ; ループから抜ける
}
loop
}
SHOT_COUNT ++ ; 発射カウント+1
}
if SPC_KEY = 0 or SHOT_COUNT > 3 { ; スペースが押されていないかカウントが最大
SHOT_COUNT = 0 ; カウントリセット
}
repeat SHOT_MAX
if SHOT(cnt) = 1 { ; 発射状態ならば
addpos OBJ_SHOT(cnt) , 0 , -2 , 0 ; 移動
addwork OBJ_SHOT(cnt) , 1 , 0 , 0 ; 移動カウント
getwork OBJ_SHOT(cnt) , A , B , C
if A > 20 { ; 一定回数移動したら
SHOT(cnt) = 0 ; 未使用状態に
delobj OBJ_SHOT(cnt) ; オブジェクト削除
}
}
loop
hgdraw
hgsync 30
getkey ESC_KEY , 27 ; ESC キー
if ESC_KEY { end } ; 押されたら終了
goto *MAIN