[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
先日作成した左右に動きながら下がってくるような動作ですが、イチイチ動きが変わるたびに
数値を変更して移動させていたのですが、そんな面倒な事をしなくても三角関数を上手く使えば
実現可能だとコメント欄で教えて頂きました。
で、それを元に簡単な移動プログラムを作ってみました。ダウンロードはこちら↓
三角関数を使った左右移動プログラム(右クリック→対象をファイルに保存で保存して下さい)
今回は実行ファイルも入れてますので、VC++が無くても起動可能です。
このプログラムを動かすとこんな感じ↓
左右にウネウネ動きながら下がってきますが、先日作ったプログラムよりも滑らかな動きで
良い感じです。
Z⇔A X⇔S C⇔Dで速さや角度などを変更出来ます。
V⇔Fで敵の出現間隔を変更出来ます。
移動の計算方法としては、x軸側の移動に三角関数を使って左右に動かして
y軸側はただ単に下に移動させるだけって感じで、とても簡単。
////////////////////////////////////////////////////////////////////////////////////////////////////////////
enemy[i].emx=sin(enemy[i].r)*enemy[i].ds;//移動量x
enemy[i].emy=dsy;//移動量y
enemy[i].ex=enemy[i].ex+enemy[i].emx;//座標計算x
enemy[i].ey=enemy[i].ey+enemy[i].emy;//座標計算y
////////////////////////////////////////////////////////////////////////////////////////////////////////////
こんな感じで計算しています。
それにしても、先日の左右移動プログラム作るのに結構な時間が掛かったのですが
今日のプログラムは30分程度で出来てしまい、しかも動きもこっちの方が良いという
嬉しいような悲しいような結果に。
もっと色々と勉強しないとダメだなーと感じました^^;
画面上から一定距離下がって来て羽を回転させた後、自機に向かって移動してきます。
自機に向かってくる計算としては
atan2((ch.y+48)-(enemy[i].ey+24), (ch.x+48)-(enemy[i].ex+24));
こんな感じでatan2関数を使って自機と敵の向きを調べて移動させています。
こういう敵の動きを考える時に、作成中のプログラムに組み込みながら考えると色々と面倒なので
敵の処理を考えるためのプログラムを作ってみました↓
https://blog.cnobi.jp/v1/blog/user/63629cf35d5259ece1529ed13f0745b1/1253454081
コレを動かすとこんな感じ↓
自機と今回追加した敵が表示されます。
変数の名前などを同じにしたので、こちらで動きを考えてコピペで写せば良いだけなので便利です^^
左右に動きながら下がってくるような動作にしたかったのですが、なかなか良いやり方が思いつかず
思いの外、苦労してます^^;
こんな感じで、斜め下に移動していって端まで来たら方向を変えて斜め下に移動して・・・ってのが
作りたかったのですが、動きの制御方法をどうするかで結構悩みました。
敵の動きを制御する方法として考えられるのは・・・
1.生成時間で制御
生成からnフレーム後に移動処理を変更するって方法。
ただ、これだと反復移動させたい場合時などに、正確に移動させる為のフレーム計算が大変です。
2.表示場所で制御
n座標以上になったら移動処理を変更する方法
ただ、左右に動く場合などは相反する行動なので上手く制御出来ない時もあります。
コレくらいしか制御方法を思いつかなかったのですが、上記の方法だと反復する運動の場合に
上手く動かせなくて困ったんですよね。
で、ふと制御する為の変数を作って動き毎に変数を移行させていけばよいのでは?
と思ってやってみたら上手く行きました^^
とりあえず簡単なプログラムを作って考えてみました↓
https://blog.cnobi.jp/v1/blog/user/63629cf35d5259ece1529ed13f0745b1/1253287337
コレを動かすとこんな感じ↓
左右に動きながら降りていきます。
動きの制御は↓のようにch.actと言う変数を使って、行動を変化させたい時にch.actを
変更して対応しています。
if(ch.act==0 && rr==2.7475) {ds=2;rota=0;rr=2.7475 ;if(ch.x<= 100) ch.act=1;}
if(ch.act==1 && rr>=0.3925) {ds=2;rota=0;rr-=0.05; ;if(rr<=0.3925) ch.act=2;}
if(ch.act==2 && rr<=0.3925) {ds=2;rota=0;rr=0.3925;;if(ch.x>= 540) ch.act=3;}
if(ch.act==3 && rr<=2.7475) {ds=2;rota=0;rr+=0.05; ;if(rr>=2.7475) ch.act=4;}
if(ch.act==4 && rr>=2.7475) {ds=2;rota=0;rr=2.7475;;if(ch.x<= 100) ch.act=5;}
とりあえず、コレで上手く動くようになったので、何種類か敵の種類を増やして行こうかと
思ってるんですが、デザインを考えるのが大変なんですよね^^;
| 06 | 2026/07 | 08 |
| 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 |
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!