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

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

ここ最近アフターバーナーみたいなギャラクシーフォースみたいなゲーム作れないかなーと思って試行錯誤しています。こんな感じ↓
ここで悩んだのが弾幕の撃ち方。というか3D空間におけるオブジェクトの移動方法。
2Dの場合はこんな感じで書いてました。
r=角度
speed=速度
x=x座標
y=y座標
xv=x軸移動量
yv=y軸移動量

xv=cos(r)*speed
yv=sin(r)*speed
x=x+xv
y=y+yv

この方法だと角度と速度を指定するだけでオブジェクトを自由に移動させることが出来ます。
これを3Dでやりたくて色々試してやっと出来たのがコチラ
xyr=xy角度
yzr=yz角度
speed=速度
x=x座標
y=y座標
z=z座標
xv=x軸移動量
yv=y軸移動量
zv=z軸移動量
xv=speed*sin(xyr)*cos(yzr)
yv=speed*sin(xyr)*sin(yzr)
zv=speed*cos(xyr)

x=x+xv
y=y+yv
z=z+zv
極座標と直交座標を使ってxy角度とyz角度と速度でオブジェクトを移動させる事が出来ました。 次は自機狙い弾。
anglex=acos(pz-ez/sqrt((px-ex)*(px-ex)+(py-ey)*(py-ey)+(pz-ez)*(pz-ez))
angley=atan(py-ey,px-ex)
で自機と敵の角度計算して

xv=speed*sin(anglex)*cos(angley)
yv=speed*sin(anglex)*sin(angley)
zv=speed*cos(anglex)

x=x+xv
y=y+yv
z=z+zv
直交座標を極座標に変換する感じでやれば上手く動きました。
って簡単に書いてますが出来るまでメチャクチャ苦労しました・・・
これとは別のもっと良い方法をフォロワーさんが教えてくれました。
単位ベクトルを使った方法で
vx=px-ex
vy=py-ey
vz=pz-ez
vl=sqrt(vx*vx+vy*vy+vz*vz)
xmove=vx/vl*speed
ymove=vy/vl*speed
zmove=vz/vl*speed
x=x+xmove
y=y+ymove
z=z+zmove

この方法だと難しい計算もなくシンプルで良い感じです。
PR
プチコン4で開発していたSTG、SONIC'S SKY PATROL IIを公開しました!
ダウンロードキー 4A8X51X
Switchをお持ちなら無料体験版で遊ぶことが出来ます。
1.ニンテンドーeショップでプチコン4で検索。体験版はサーバー利用券無しの方です。
2.プチコン4起動後のトップメニューから作品を見るを選択
3.Rボタンを3回押して公開キー4A8X51Xを入力
4.ローカルからゲームを起動すれば遊べます。
体験版は8時間に1回しかダウンロード出来ないのでご注意下さい。

CESA(コンピュータエンターテインメント協会)で『プチコン4』を使った「ゲームクリエイト講座」が公開されていたのですが、そこで使用されたソニックの素材が期間限定でプチコン4内で使用出来るって事でソニックのゲームを作れる機会なんて二度とないだろうと思って作ってみました。

セガのシューティングで思い浮かべるのはファンタジーゾーン。
なのでファンタジーゾーンとソニックを足したようなSTGに。本当はもっと簡単に作って公開しようと思っていたのですが作っているうちにアレもコレもとなって結局作り始めてから完成まで一ヶ月くらいかかりましたが、結構良く出来たのではないかと自分では思っています。
プチコン4で開発していたSTG、ReflectionForce公開しました!

ダウンロードキー 4EKE334XF
Switchをお持ちなら無料体験版で遊ぶことが出来ます。






1.ニンテンドーeショップでプチコン4で検索。体験版はサーバー利用券無しの方です。
2.プチコン4起動後のトップメニューから作品を見るを選択
3.Rボタンを3回押して公開キー4EKE334XFを入力
4.ローカルからゲームを起動すれば遊べます。
体験版は8時間に1回しかダウンロード出来ないのでご注意下さい。

作り始めたのが2019年の6月20日と書いてあるので約半年くらい時間がかかった感じです。
それでもゲームモードは未実装だし音楽は使いまわしなので本来ならもっと時間かかってるはず。
今後ゲームモードの追加や細かい修正なんかもしていきたい所です。

今回のSTGのテーマは狙い撃ちです。小さい敵は通常ショットで殲滅して大きい敵やボスなどは波動砲で狙って倒す・・・みたいなのをイメージして作っています。
難易度は高いと思うのでビギナー機体だとかなり敵弾が消せるようにしています。
とりあえず大きなバグが無いと良いなぁ。。。

プチコン4でWAVファイルを読み込んで効果音として使用しようと思ったのですが上手く鳴らせるようになるのに苦労したので忘備録。

まず大前提としてWAVファイルをプチコン4に転送するために麗の小屋さんのPetit4Sendを使用します。
WAVファイルを鳴らす方法として思いつくのがPCMSTREAM命令ですが、PCMSTREAM命令だと音を重ねる事が出来ない(私が鳴らす方法を知らないだけかもしれません)ので効果音を鳴らすのには向いていません。
なのでWAVSETA命令でWAVファイルを波形登録して鳴らすようにしてみました。

一応PCMSTREAM命令でのWAVファイルの鳴らし方も書いておきます。
01 OTO[]
02 OTO=LOADV("DAT:KOUKAON.WAV")
03 PCMSTREAM OTO,48000
04 PCMVOL 10000
05 WHILE 1
06  VSYNC 1
07 WEND
こんな感じで書けば任意のwavファイルを鳴らすことが出来ます。音は勝手にループしますので止めたい場合はPCMSTOP命令で止めて再開する場合はPCMCONT命令で、PCMPOSで再生位置を設定出来ます。

WAVSETA命令で鳴らす場合はこんな感じ。
01 OTO[]
02 OTO=LOADV("DAT:KOUKAON.WAV")
03 WAVSETA 244,127,0,0,127,OTO,69,0,99235,48000
04 BGMSET 128,"@244O4A2"
05 BGMPLAY 128
WAVSETA命令の内容は下記のようになっています。
***********************************************************
WAVSETA 楽器番号,アタック,ディケイ,サスティン,リリース,配列,基準音程,ループ先頭,ループ終端,サンプル周波数[,オフセット][,BEEPループ]
***********************************************************
配列の要素数はPRINT DIM (OTO,0)で調べる事が出来るので例えばDIM (OTO,0)が99236ならば1引いた99235を設定すればOKです。基準音程は69で「"O4A":オクターブ4のラ」を設定した事になりサンプル周波数を48000にした時にWAVファイルと同じ音程で鳴らすことが出来るようです。
WAVファイルの音長によって"@244O4A2"のA2の2の部分を1にしたり4にしたりして(音の長さを設定する)効果音がループしない良い感じのところに設定します。
実際に効果音を鳴らす場合は効果音毎にトラックを変更しないと音が重ならないのでショット音はBGMPLAY 0,128で爆破音はBGMPLAY 1,129とかにすれば上手く行くと思います。
new3DSを購入した時に、それまで使っていた3DS LLは売ってしまったのですが
プチコン3号を使ってみるとnewとノーマル3DSでかなりの速度差がある事がわかりました。

こんな事なら3DS LL売るんじゃなかった・・・と思っても後の祭りw
って事でノーマルな3DSを購入してみました。
 
中古で1万円くらいで購入。
当初は動作確認用だしジャンクな3DS買おうと思っていたのですが
ヤフオク見ててもジャンクでも7~8千円くらいしていて、そこまで
出すんなら普通の中古でエエかーと思いまして。
もっと安くで売ってると思っていたのですが人気あるんですねぇ。

とりあえず自分が作ったテストプログラムで速度差を見てみると・・・

newでFPS60ギリギリくらいまで動作させてみるとノーマルの場合はFPS20程度
まで低下する模様。
大体、ノーマルとnewで3倍くらいの速度差があるようです。
ココまで速度差があると、newでギリギリ動作するゲーム作るとノーマルでは
殆どまともに動かないって感じになりそうですねぇ。
ノーマル基準で作れば良いのですが、それだと折角のnewのパワーを持て余すことに
なってしまって勿体無い気もしますし難しい所です。

あと、現在公開しているテストプログラムの公開キーを記載しておきます。

弾幕STGテストプログラム
公開キー:K2K4EK4V
ファイル名:KT_DANSTG_TES

弾幕表示のテストプログラムです。
各種ボタンで表示間隔や弾速などを変更出来ます。
敵弾400発とか撃たしても余裕でFPS60動作しますので
弾幕STGの作成も出来そうです^^




スプライトを使った擬似3D表示プログラム
公開キー:E5DEE3
ファイル名:KT_3DTEST

スプライトを使った擬似3D表示プログラムです。
各種ボタンで表示間隔や速度、回転などが出来ます。
こちらも余裕でFPS60動作しますので目指せ!ギャラクシーフォース
って感じですかねw
Twitter
カレンダー
04 2024/05 06
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 31
最新コメント
[04/20 kt.]
[04/19 うぇむ]
[11/24 kt.]
[11/21 NONAME]
[11/24 kt.]
プロフィール
HN:
kt.
性別:
男性
自己紹介:
プログラミング経験は昔ファミリーベーシックでちょっとさわったくらい。
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
ブログ内検索
忍者ブログ [PR]