まったくのプログラミング素人の筆者がC++/HSPを使用してSTG(シューティングゲーム)を作っていく過程を書くブログでしたが最近は脱線気味。プログラミング以外にも、ゲーム関連の記事、日々の戯言など。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ここ最近アフターバーナーみたいなギャラクシーフォースみたいなゲーム作れないかなーと思って試行錯誤しています。こんな感じ↓
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軸移動量
x=x+xv
y=y+yv
z=z+zv
極座標と直交座標を使ってxy角度とyz角度と速度でオブジェクトを移動させる事が出来ました。
x=x+xv
y=y+yv
z=z+zv
直交座標を極座標に変換する感じでやれば上手く動きました。
って簡単に書いてますが出来るまでメチャクチャ苦労しました・・・
単位ベクトルを使った方法で
この方法だと難しい計算もなくシンプルで良い感じです。
ここで悩んだのが弾幕の撃ち方。というか3D空間におけるオブジェクトの移動方法。ロックオン出来るようにしてみた。ミサイルもっと沢山出したいんだけど今のところ8発が処理落ちしない限界。もうちょい処理軽くしたいなー。#SmileBasic #petitcom #プチコン4 #NintendoSwitch pic.twitter.com/dOjh9o2m64
— kt. (@xxxx_kt_xxxx) June 20, 2020
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角度と速度でオブジェクトを移動させる事が出来ました。
次は自機狙い弾。3Dな弾幕やっと出来た。三角関数使った3Dでの移動方法がわからなくて悩んだんだけど極座標使って計算するみたいなので、それで実装したら上手く出来た。。。と思う。動作もっと軽くしたいなぁ(続く#SmileBasic #petitcom #プチコン4 #NintendoSwitch pic.twitter.com/UtPIEu6DPm
— kt. (@xxxx_kt_xxxx) June 22, 2020
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
直交座標を極座標に変換する感じでやれば上手く動きました。
って簡単に書いてますが出来るまでメチャクチャ苦労しました・・・
これとは別のもっと良い方法をフォロワーさんが教えてくれました。自機狙い弾出来た。。。3Dでの自機狙い弾の実装方法がわからなさ過ぎてメチャクチャ苦労したけど上手く動いて嬉しい。直交座標から極座標に変換で角度計算したら出来たけどトライ&エラーしまくり(続#SmileBasic #petitcom #プチコン4 #NintendoSwitch pic.twitter.com/UsTv9T93h9
— kt. (@xxxx_kt_xxxx) June 23, 2020
単位ベクトルを使った方法で
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
この方法だと難しい計算もなくシンプルで良い感じです。
死ぬほど簡単に実装できてしまって今までの苦労はなんだったんだ・・・てなってます。もっと早く教えて下さい(笑)教えて頂きありがとうございます! pic.twitter.com/TOB1vVvxOk
— kt. (@xxxx_kt_xxxx) June 24, 2020
PR
この記事にコメントする
カレンダー
10 | 2024/11 | 12 |
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/04)
(12/26)
(12/25)
(11/17)
(10/11)
プロフィール
HN:
kt.
性別:
男性
自己紹介:
プログラミング経験は昔ファミリーベーシックでちょっとさわったくらい。
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
ブログ内検索
最古記事