ページ 1 / 1
弾幕の作成について…
Posted: 2012年1月30日(月) 23:55
by 燐子
void boss_shot_bulletH003()
{
#define TM003 350
int i,k,t=boss_shot.cnt%TM003,t2=boss_shot.cnt;
if(t2==0)//フラッシュ
{
flash.flag=1;
flash.knd=1;
flash.to_cnt=60;
flash.cnt=0;
}
if(t==0)//目印の弾
{
for(i=0;i<32;i++)
{
if((k=search_boss_shot())!=-1)
{
boss_shot.bullet[k].col = 2;
boss_shot.bullet[k].x = boss.x;
boss_shot.bullet[k].y = boss.y;
boss_shot.bullet[k].knd = 9;
boss_shot.bullet[k].angle = +PI2/32*i;
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 4;
}
}
}
if(t==300)//フラッシュ
{
flash.flag=1;
flash.knd=1;
flash.to_cnt=100;
flash.cnt=0;
}
if(300<t && t<305 && t%1==0 )//大弾
{
for(i=0;i<32;i++)
{
if((k=search_boss_shot())!=-1)
{
boss_shot.bullet[k].col = 2;
boss_shot.bullet[k].x = boss.x;
boss_shot.bullet[k].y = boss.y;
boss_shot.bullet[k].knd = 0;
boss_shot.bullet[k].angle =[A]+PI2/32*i;
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 10;
}
}
}
}//終了
Re: 弾幕の作成について…
Posted: 2012年1月31日(火) 00:06
by 燐子
文書き忘れました。すいません
どういう弾幕(スペル)を作りたいかと言うと、
まず、自機中心の弾を32方向の円形に発射し、
その起動と同じ起動に大弾を発射する感じです。
~最初略~
if(t==0)//目印の弾
{
for(i=0;i<32;i++)
{
if((k=search_boss_shot())!=-1)
{
boss_shot.bullet[k].col = 2;
boss_shot.bullet[k].x = boss.x;
boss_shot.bullet[k].y = boss.y;
boss_shot.bullet[k].knd = 9;
boss_shot.bullet[k].angle = [A]+PI2/32*i;
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 4;
}
}
}
~中盤略~
if(300<t && t<305 && t%1==0 )//大弾
{
for(i=0;i<32;i++)
{
if((k=search_boss_shot())!=-1)
{
boss_shot.bullet[k].col = 2;
boss_shot.bullet[k].x = boss.x;
boss_shot.bullet[k].y = boss.y;
boss_shot.bullet[k].knd = 0;
boss_shot.bullet[k].angle =[A]+PI2/32*i;
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 10;
}
}
}
この二つの[A]の部分に何と入力すればできるでしょうか
boss_shot.bullet[k].angle の部分です
できれば教えてもらえませんか、お願いします
アドバイスなどももらえればうれしいです
Re: 弾幕の作成について…
Posted: 2012年1月31日(火) 00:32
by nullptr
えーと、よみにくくて読んで無いのでちょっと分からないんですが。
アドバイスってことでひとつ、「ちゃんとインデントしましょう」。
インデントは大事ですよ。
あとアングルはラジアンを使うのですがそういうのとかはわかってらっしゃいますでしょうか?
http://dixq.net/rp/14.html
とかをもういちど呼んでみたりいてみてください(ここにはラジアンの説明は無いですがshotatan2()が使われてるので参考になるかも
Re: 弾幕の作成について…
Posted: 2012年1月31日(火) 00:48
by jay
フォーラムルールに書いてありますが
ここの掲示板ではコードを張り付けるときは原則としてcodeタグで囲んでくださいね
最低限のルールなのでよろしくお願いします
囲んでみました
コード:
if(t==0)//目印の弾
{
for(i=0;i<32;i++)
{
if((k=search_boss_shot())!=-1)
{
boss_shot.bullet[k].col = 2;
boss_shot.bullet[k].x = boss.x;
boss_shot.bullet[k].y = boss.y;
boss_shot.bullet[k].knd = 9;
boss_shot.bullet[k].angle = [A]+PI2/32*i;
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 4;
}
}
}
~中盤略~
if(300<t && t<305 && t%1==0 )//大弾
{
for(i=0;i<32;i++)
{
if((k=search_boss_shot())!=-1)
{
boss_shot.bullet[k].col = 2;
boss_shot.bullet[k].x = boss.x;
boss_shot.bullet[k].y = boss.y;
boss_shot.bullet[k].knd = 0;
boss_shot.bullet[k].angle =[A]+PI2/32*i;
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 10;
}
}
}
今更囲んでみてもインデント解除されてるのでアレですけど・・・
で、質問の回答については”ボスから見た自機の角度”を入れればいいのですが
恐らくloweさんがおっしゃっているリンク先を参照すれば分かると思います
Re: 弾幕の作成について…
Posted: 2012年1月31日(火) 01:35
by 燐子
loweさん、jayさん、すいませんでした…囲ったものを書いておきます。
見様見真似でshotatan2関数とやらを使ってみましたが、
どうしても角度を決める弾と大弾の位置がずれます…
「角度を決める弾と5つの大弾をそれぞれ、発射される時に自機がいた方向に発射する」のではなく、
「角度を決める弾が発射される時に自機がいた方向と同じ方向に5つの大弾も発射する」ようにしたいのです。
方法を教えてください。お願いします。
>ソフト屋さん
すいません。手直ししておきました。
只今いろいろと試してみています。
コード:
void boss_shot_bulletH003()
{
#define TM003 350
int i,k,t=boss_shot.cnt%TM003,t2=boss_shot.cnt;
double angle;
angle=bossatan2();
if(t2==0)//フラッシュ
{
flash.flag=1;
flash.knd=1;
flash.to_cnt=60;
flash.cnt=0;
}
if(t==0)//角度を決める弾
{
for(i=0;i<32;i++)
{
if((k=search_boss_shot())!=-1)
{
boss_shot.bullet[k].col = 2;
boss_shot.bullet[k].x = boss.x;
boss_shot.bullet[k].y = boss.y;
boss_shot.bullet[k].knd = 9;
boss_shot.bullet[k].angle = angle+PI2/32*i;
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 4;
}
}
}
if(t==300)//フラッシュ
{
flash.flag=1;
flash.knd=1;
flash.to_cnt=100;
flash.cnt=0;
}
if(300<t && t<305 && t%1==0 )//大弾
{
for(i=0;i<32;i++)
{
if((k=search_boss_shot())!=-1)
{
boss_shot.bullet[k].col = 2;
boss_shot.bullet[k].x = boss.x;
boss_shot.bullet[k].y = boss.y;
boss_shot.bullet[k].knd = 0;
boss_shot.bullet[k].angle = angle+PI2/32*i;
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 10;
}
}
}
}
Re: 弾幕の作成について…
Posted: 2012年1月31日(火) 09:18
by softya(ソフト屋)
インデントは正確にお願いします。
読みづらいのもありますがバグの原因と成ることが多いのです。
「投稿前チェックリスト(beatleさん作成)」 ← チェック3を御覧ください。
http://uchan.net/w/index.php?mixcpp%2F% ... 5%B9%A5%C8
問題点ですが、「角度を決める弾」と「大弾」を同じ方向に発射したいなら「角度を決める弾」発射時にboss_shotの構造体などにangleを保存しておいて「大弾」は保存しておいたangleを使う必要があります。こうすれば同じ方向に発射できますが理屈はわかりますか?なぜズレのかをよく考えてみてください。
Re: 弾幕の作成について…
Posted: 2012年1月31日(火) 20:53
by 燐子
>ソフト屋さん
あなたのアドバイスと恋の迷路の弾幕を参考にしたらできました!
もっと簡単な作り方があるかもしれませんが、私なりに満足する弾幕になりました
loweさん、jayさん、ソフト屋さん
ありがとうございました!m(_ _)m
完成したもの
コード:
void boss_shot_bulletH000()
{
#define TM000 250
int i,k,t=boss_shot.cnt%TM000,t2=boss_shot.cnt;
double angle;
if(t2==0)//フラッシュ
{
flash.flag=1;
flash.knd=1;
flash.to_cnt=60;
flash.cnt=0;
}
if(t==0)//角度を決める弾
{
for(i=0;i<32;i++)
{
if((k=search_boss_shot())!=-1)
{
boss_shot.bullet[k].col = 2;
boss_shot.bullet[k].x = boss.x;
boss_shot.bullet[k].y = boss.y;
boss_shot.bullet[k].knd = 9;
boss_shot.bullet[k].angle = bossatan2()+PI2/32*i;
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 4;
se_flag[0]=1;
}
}
}
if(t==0)//自機の角度を記憶
boss_shot.base_angle[0]=bossatan2();
{
if(t==200)//フラッシュ
{
flash.flag=1;
flash.knd=1;
flash.to_cnt=100;
flash.cnt=0;
}
if(200<t && t<220 && t%2==0 )//大弾 10発
{
for(i=0;i<32;i++)
{
if((k=search_boss_shot())!=-1)
{
boss_shot.bullet[k].col = 2;
boss_shot.bullet[k].x = boss.x;
boss_shot.bullet[k].y = boss.y;
boss_shot.bullet[k].knd = 0;
boss_shot.bullet[k].angle = boss_shot.base_angle[0]+PI2/32*i;
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 10;
se_flag[0]=1;
}
}
}
}
}//終了
Re: 弾幕の作成について…
Posted: 2012年1月31日(火) 23:31
by beatle
ちなみにですが,#defineは関数などの構造をまったく感知しませんのでご注意ください.
#defineを関数の中に書いたとしても,関数の終端を超えてファイルの終端まで有効になるということです.
Re: 弾幕の作成について…
Posted: 2012年2月01日(水) 17:28
by 燐子
>beatleさん
わざわざありがとうございます!m(_ _)m
つまり、ファイルの最後までTM000の値は250ってことですか?
他の弾幕データではTM001などと変えていけば大丈夫ですよね?
Re: 弾幕の作成について…
Posted: 2012年2月01日(水) 19:44
by beatle
燐子 さんが書きました:つまり、ファイルの最後までTM000の値は250ってことですか?
その通りです.#defineで定義された行の次の行からファイルの終端までが,その定義の有効範囲です.
燐子 さんが書きました:他の弾幕データではTM001などと変えていけば大丈夫ですよね?
そうですね.ふつうは,#defineはファイルの上の方でまとめて書きます.
コード:
#define TM000 250
#define TM001 300
void boss_shot_bulletH000()
{
...
}
void boss_shot_bulletH001()
{
...
}
という感じに.
Re: 弾幕の作成について…
Posted: 2012年2月01日(水) 21:41
by 燐子
わかりました( ´∀`)
これからは注意して書くようにします!