忍者ブログ
まったくのプログラミング素人の筆者がC++/HSPを使用してSTG(シューティングゲーム)を作っていく過程を書くブログでしたが最近は脱線気味。プログラミング以外にも、ゲーム関連の記事、日々の戯言など。
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

サイン、コサインを使って自機狙い弾を作る事が出来るようになったんですが、そもそもサイン、コサインを使おうと思った
きっかけは弾幕を作りたいと思ったからです。

サイン、コサインを使う前まではx軸とy軸の移動量を足したり引いたりして弾を撃たせようと思って色々試したのですが
この方法だと、角度もあまり変えられず、弾速もまばらで、綺麗な円状に弾を撃つ事が不可能でした。
それこそ扇状に弾を撃つなんて夢のまた夢って感じです。

ところが、サイン、コサインを使えば比較的簡単に弾幕を撃つ事が出来ます。
試しにスプリクトを書いてみました↓
*************************************
screen 0,240,320,0,0,0 ;メインウインドウ0を240×320で用意
px=112:py=304 ;自機の初期位置
ex=112:ey=100 ;敵の初期位置
dx=8:dy=8 ;敵の移動量
dx=1:dy=1 ;敵弾の移動量

emt=1000;敵の弾
dim etx,emt : dim ety,emt ;敵弾の位置、移動量
dim etxv,emt ; etxv 敵弾x方向運動量
dim etyv,emt ; etyv 敵弾y方向運動量
dim etf,emt;敵弾のフラグ
gtime=0 ;フレーム数

*main
redraw 0 ;仮想画面を指定
color 0,0,0 ;色に黒を指定
boxf 0,0,240,320 ;指定色で画面を塗りつぶす

;自機移動処理
stick ky,15 ;キーボードのチェック
if ky&1 :px-=4 :if px<0 :px=0
if ky&4 :px+=4 :if px>224 :px=224
if ky&2 :py-=4 :if py<0 :py=0
if ky&8 :py+=4 :if py>304 :py=304
pos px,py ;自機の座標指定
color 0,255,255 : mes "▲" ;青で▲を表示

;敵表示処理
pos ex,ey
color 255,0,0 : mes "■"

;敵弾処理
if gtime¥6=0 : gosub *tama ;gtime÷6の余りが0の時*tamaに移動
repeat emt ;emt回繰り返す
if etf(cnt)=1 { ;敵弾が画面に有る時{}内の命令を行う
etx(cnt)=etxv(cnt)+etx(cnt) ;敵弾のx軸の座標指定
ety(cnt)=etyv(cnt)+ety(cnt) ;敵弾のx軸の座標指定
pos etx(cnt),ety(cnt) ;敵弾の座標指定
color 255,255,0 : mes "*"
if etx(cnt)>240 : etf(cnt)=0 ;敵弾が画面から消えたら存在をなしにする
if etx(cnt)<-16 : etf(cnt)=0
if ety(cnt)>320 : etf(cnt)=0
if ety(cnt)<-16 : etf(cnt)=0
}
loop

gtime+ ;フレーム数をプラス
redraw 1 ;画面を更新
await 16
goto *main ;*mainに戻る

*tama
repeat emt ;emt回繰り返す
if etf(cnt)>0 : continue ;画面に弾がある時はrepeatに戻る
eh=eh+1 ;弾の数の為の計算
etf(cnt)=1 ;弾の存在を有にする
etx(cnt)=double(ex+2) : ety(cnt)=double(ey+2) ;弾の座標を実数で設定
ds=2 ;敵弾の速さ
r=double(r+0.1) ;弾の角度を実数で計算
etxv(cnt)=cos(r)*ds : etyv(cnt)=sin(r)*ds ;弾の移動量を角度より計算
if eh>62 : eh=0 :break ;63発弾を撃った時点でrepeatを抜ける
loop
return
*************************************
HSP3.0使用

コレを実行すると、円弾幕を角度をちょっとづつ変えながら撃ってきます。
まさに弾幕って感じですね^^
5181.jpg
当初、このスプリクトを作っている時に、エラー31 "異なる型を持つ配列変数に代入しました"
が、ずっと出てしまい上手くいかなかったのですが、double命令を使う事により上手く動くようになったので
多分、整数と実数の使い分けが上手くいってなかったんだろうと思っています。

でも、このサンプルでは上手く行くのですが、今作っているSTGに反映させようとすると、エラー31が出てしまうんですよね・・・
悩み中です(涙)
PR
この記事にコメントする
お名前
タイトル
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
Twitter
カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
最新コメント
[04/20 kt.]
[04/19 うぇむ]
[11/24 kt.]
[11/21 NONAME]
[11/24 kt.]
プロフィール
HN:
kt.
性別:
男性
自己紹介:
プログラミング経験は昔ファミリーベーシックでちょっとさわったくらい。
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
ブログ内検索
忍者ブログ [PR]