連続で質問させていただきます。
これもボス弾幕についての質問なのですが、弾を円形に配置する方法(x,y座標の設定の仕方)が知りたいです。
画面外から、中心に向かって円形に弾を発射する弾幕をつくっているのですが、この方法が分からず難航している状態です;
画面外に配置する方法自体は、龍神録プログラミングの館の、「そして誰もいなくなるか?風弾幕」の章を見て理解したのですが、円についての知識がほとんどないので、円形配置ができません…
分かる方いましたら、アドバイスよろしくお願いしますm(__)m
円形に弾を配置する方法
Re:円形に弾を配置する方法
龍神録の弾幕見てもらえたらいくつも円形の弾幕が紹介してあると思います。
解り易く円形で静止する弾幕作ってみました。
void boss_shot_bulletH000(){
int i,k,t=boss_shot.cnt;
double angle;
//360カウント以下で5カウントに1回
if(t<360 && t%5==0){
if((k=search_boss_shot())!=-1){
boss_shot.bullet[k].col = 0;//弾の色
boss_shot.bullet[k].x = boss.x + cos(PI2/360*t) * 150;//座標
boss_shot.bullet[k].y = boss.y + sin(PI2/360*t) * 150;
boss_shot.bullet[k].knd = 4;//弾の種類
boss_shot.bullet[k].angle = 0;//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 0;//スピード
se_flag[0]=1;
}
}
}
5°ずつ置いて行って360°まわります。
結果は添付ファイル参照で。
まず、sin,cosの使い方は解りますか?
もし忘れてしまった場合は、中学1年か2年位の教科書に書いてあると思うのでもしあれば見てみてください。
ネットでも検索すればすぐ出てきます。
http://www.google.co.jp/search?hl=ja&q= ... lr=lang_ja
sin()
cos()
とかけばかっこの中の角度からsin,cosを計算してくれます。
sin,cosは-1~1の値をとりますから、それに長さをかけてやればすきな半径に出来ます。
上の場合は150をかけているので、半径が150になっているのです。
わかりますかね・・?
解り易く円形で静止する弾幕作ってみました。
void boss_shot_bulletH000(){
int i,k,t=boss_shot.cnt;
double angle;
//360カウント以下で5カウントに1回
if(t<360 && t%5==0){
if((k=search_boss_shot())!=-1){
boss_shot.bullet[k].col = 0;//弾の色
boss_shot.bullet[k].x = boss.x + cos(PI2/360*t) * 150;//座標
boss_shot.bullet[k].y = boss.y + sin(PI2/360*t) * 150;
boss_shot.bullet[k].knd = 4;//弾の種類
boss_shot.bullet[k].angle = 0;//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 0;//スピード
se_flag[0]=1;
}
}
}
5°ずつ置いて行って360°まわります。
結果は添付ファイル参照で。
まず、sin,cosの使い方は解りますか?
もし忘れてしまった場合は、中学1年か2年位の教科書に書いてあると思うのでもしあれば見てみてください。
ネットでも検索すればすぐ出てきます。
http://www.google.co.jp/search?hl=ja&q= ... lr=lang_ja
sin()
cos()
とかけばかっこの中の角度からsin,cosを計算してくれます。
sin,cosは-1~1の値をとりますから、それに長さをかけてやればすきな半径に出来ます。
上の場合は150をかけているので、半径が150になっているのです。
わかりますかね・・?
Re:円形に弾を配置する方法
1bfuvabさんこんばんは、ありがとうございます
実は、三角関数もまだ未習なんです(汗
これまで、三角関数などについては、ゲーム制作の過程でその都度調べてきたものですから…
ある程度しか分かりません;
基礎的な数学の問題であれば、恐らく解けると思うのですが、プログラミングに応用するとなると、自分の理解度では少々厳しいことが多いです…
もしよければ、ご教授いただければ幸いです。
とりあえず、単位円において、
cosがx座標
sinがy座標
ということは分かるので、浅はかな知識なりに、円形に弾を配置するプログラムを書いてみました。
int t =boss_shot.cnt;
float i;
if(t=120){
for(i=0;i<60;i++){
bullet_way(cos(i)*100+200,sin(i)*100+200,1,0,0,0,4,1,0);//弾幕簡略関数。1番目がx座標、2番目がy座標となっています。
}
}
…しかしこれだと、
・弾の並びが均一でない
・円の中心を指定できないなど色々と不十分です。
配置する弾の数を指定して、その弾を均等に円状に並べるには、どうすればよいのでしょうか。
実は、三角関数もまだ未習なんです(汗
これまで、三角関数などについては、ゲーム制作の過程でその都度調べてきたものですから…
ある程度しか分かりません;
基礎的な数学の問題であれば、恐らく解けると思うのですが、プログラミングに応用するとなると、自分の理解度では少々厳しいことが多いです…
もしよければ、ご教授いただければ幸いです。
とりあえず、単位円において、
cosがx座標
sinがy座標
ということは分かるので、浅はかな知識なりに、円形に弾を配置するプログラムを書いてみました。
int t =boss_shot.cnt;
float i;
if(t=120){
for(i=0;i<60;i++){
bullet_way(cos(i)*100+200,sin(i)*100+200,1,0,0,0,4,1,0);//弾幕簡略関数。1番目がx座標、2番目がy座標となっています。
}
}
…しかしこれだと、
・弾の並びが均一でない
・円の中心を指定できないなど色々と不十分です。
配置する弾の数を指定して、その弾を均等に円状に並べるには、どうすればよいのでしょうか。
Re:円形に弾を配置する方法
あぁっと
すれ違ってしまいました(-.-;
管理人さんありがとうございますm(__)m
わかりやすい解説のおかげで理解することができました。
一つ前のレスで書いたサンプルを見直してみたのですが……これはひどい…(+_+)
私は今年高二になるのですが、未だに三角関数は習ってません…
去年三角比を習いました;三角関数は、恐らくは高二でやることになると思います。
なので、
中一、中二の教科書
と聞いてとても驚きました。
皆さんそんなに早くに学習するものなのでしょうか…
すれ違ってしまいました(-.-;
管理人さんありがとうございますm(__)m
わかりやすい解説のおかげで理解することができました。
一つ前のレスで書いたサンプルを見直してみたのですが……これはひどい…(+_+)
私は今年高二になるのですが、未だに三角関数は習ってません…
去年三角比を習いました;三角関数は、恐らくは高二でやることになると思います。
なので、
中一、中二の教科書
と聞いてとても驚きました。
皆さんそんなに早くに学習するものなのでしょうか…
Re:円形に弾を配置する方法
あれ・・中学で習うと思っていたのは勘違いだったのかもしれません・・。
サインコサインってそんなに後に習いますっけ・・?
高1で三角比か・・、なんか随分昔に習った気がするようになったということは自分も歳をt・・(ry
しかし習って無かったのならあのような計算式で理解されるとはすごいですね^^;
円周率ってありますよね。3.141592654...ってやつです。
あれは孤度法で表すと180°を表すんですよね。
何言ってるかわからない時は度数法と孤度法でググってみるといいと思います。
ということで、円周率X2が360°なので、私は
#define PI 3.141592654f
#define PI2 (PI*2)
と定義しています。PI2とは360°のことです。
だからPI2/360は1°を表すわけです。
プログラムでsinやcosを計算する時は孤度法を使わないといけないので、
このように円周率を使っているのです。
う~ん、習ってないとわかりにくいかもしれませんね・・。
(私の説明が下手なだけか^^;
サインコサインってそんなに後に習いますっけ・・?
高1で三角比か・・、なんか随分昔に習った気がするようになったということは自分も歳をt・・(ry
しかし習って無かったのならあのような計算式で理解されるとはすごいですね^^;
円周率ってありますよね。3.141592654...ってやつです。
あれは孤度法で表すと180°を表すんですよね。
何言ってるかわからない時は度数法と孤度法でググってみるといいと思います。
ということで、円周率X2が360°なので、私は
#define PI 3.141592654f
#define PI2 (PI*2)
と定義しています。PI2とは360°のことです。
だからPI2/360は1°を表すわけです。
プログラムでsinやcosを計算する時は孤度法を使わないといけないので、
このように円周率を使っているのです。
う~ん、習ってないとわかりにくいかもしれませんね・・。
(私の説明が下手なだけか^^;
Re:円形に弾を配置する方法
文部科学省のHP見てみましたが
http://www.mext.go.jp/b_menu/shuppan/so ... 90301m.htm
確かに中学じゃ習わないですね・・。
それどころか「負の数とは」そんな所からやるのか・・とちょっとビックリ^^;
そんな昔に習ったのか・・。
やだな、、しかし確かに自分が中学生だった頃を思い起こせば随分前だ・・(ブツブツ
http://www.mext.go.jp/b_menu/shuppan/so ... 90301m.htm
確かに中学じゃ習わないですね・・。
それどころか「負の数とは」そんな所からやるのか・・とちょっとビックリ^^;
そんな昔に習ったのか・・。
やだな、、しかし確かに自分が中学生だった頃を思い起こせば随分前だ・・(ブツブツ
Re:円形に弾を配置する方法
>私は今年高二になるのですが、未だに三角関数は習ってません…
>去年三角比を習いました;三角関数は、恐らくは高二でやることになると思います。
三角関数と三角比を分けて考えているようですが、たいして違いないですよ。
三角比は角度を0~180度に限定しているけど、三角関数はその限定を取り払ったものですから。
(使う公式にいくつか差はありますが、基本は変わりません)
弾幕の運動に使うのなら、三角[関数]を習ってなくても三角[比]だけでも分かるんじゃないでしょうか。
#そういえば今年のセンター試験まだ解いてないなー。
>去年三角比を習いました;三角関数は、恐らくは高二でやることになると思います。
三角関数と三角比を分けて考えているようですが、たいして違いないですよ。
三角比は角度を0~180度に限定しているけど、三角関数はその限定を取り払ったものですから。
(使う公式にいくつか差はありますが、基本は変わりません)
弾幕の運動に使うのなら、三角[関数]を習ってなくても三角[比]だけでも分かるんじゃないでしょうか。
#そういえば今年のセンター試験まだ解いてないなー。
Re:円形に弾を配置する方法
あれです、単位円で考えるとすぐわかります、多分
調べてみて下さい
気をつけるべきなのはゲームの座標はY軸が下向きであることですね
単位円を理解して、そこを気をつければ大丈夫だと思います
調べてみて下さい
気をつけるべきなのはゲームの座標はY軸が下向きであることですね
単位円を理解して、そこを気をつければ大丈夫だと思います
Re:円形に弾を配置する方法
返答遅れてしまってすみません;
(今日はパソコンをネットに繋ぐ時間がなさそうなので、携帯での書き込みです…)
>管理人さん
孤度法の解説ありがとうございます、とても分かりやすかったです。
PIが孤度法でのπ、ということは、少し前にやっと気付きましたf^_^;
("π"の読みが"パイ"であるために、PI(パイ)と表しているのかなぁ…と勝手に想像しているのですが、他に理由があるのでしょうか)
サインコサインもそうですが、私は、プログラミングに必要な数学の勉強が不完全なままゲーム制作に取り組んでしまっているので、プログラミングから数学を学ばせてもらっていることが多々あります。
もちろん、数学を勉強したことによってプログラムの意味を理解することができた、なんてこともありますけど。
あぁ、あの数式はそういう意味だったんだ…みたいな^_^;
プログラミングと数学は関係が深いなぁ、と初心者なりに実感している今日この頃です。
まぁ…数学どころか、初歩的なプログラミング自体もまだ理解が不完全ですけどね…
一年ちょっと前に、このサイトを知り、勢いでゲーム制作を始めたときは本当に何も知りませんでした;
知っていた事と言えば、
・intなるもので変数を宣言する
・if文
…くらいで…(本当ですf^_^;)
プログラミングに関する基礎知識もないまま、本格的なゲーム制作に入ってしまったんですね(-.-;
そんなこんなでも、プログラムを色々いじってみたり、この掲示板で質問させてもらいながら、少しずつ理解していくことができました。(なんとか%
(今日はパソコンをネットに繋ぐ時間がなさそうなので、携帯での書き込みです…)
>管理人さん
孤度法の解説ありがとうございます、とても分かりやすかったです。
PIが孤度法でのπ、ということは、少し前にやっと気付きましたf^_^;
("π"の読みが"パイ"であるために、PI(パイ)と表しているのかなぁ…と勝手に想像しているのですが、他に理由があるのでしょうか)
サインコサインもそうですが、私は、プログラミングに必要な数学の勉強が不完全なままゲーム制作に取り組んでしまっているので、プログラミングから数学を学ばせてもらっていることが多々あります。
もちろん、数学を勉強したことによってプログラムの意味を理解することができた、なんてこともありますけど。
あぁ、あの数式はそういう意味だったんだ…みたいな^_^;
プログラミングと数学は関係が深いなぁ、と初心者なりに実感している今日この頃です。
まぁ…数学どころか、初歩的なプログラミング自体もまだ理解が不完全ですけどね…
一年ちょっと前に、このサイトを知り、勢いでゲーム制作を始めたときは本当に何も知りませんでした;
知っていた事と言えば、
・intなるもので変数を宣言する
・if文
…くらいで…(本当ですf^_^;)
プログラミングに関する基礎知識もないまま、本格的なゲーム制作に入ってしまったんですね(-.-;
そんなこんなでも、プログラムを色々いじってみたり、この掲示板で質問させてもらいながら、少しずつ理解していくことができました。(なんとか%
Re:円形に弾を配置する方法
あう…なんか切れとる…
‐続きです(-.-;)‐
・・・・・できました。(なんとか、ゲーム完成のめどがつく位までは…)
基礎を身につけてから、ゲーム制作を始めた方が良かったであろうということは分かるのですが、ある時突然、プログラムの意味が分かったりするのは個人的に好きだったりしますf^_^;
…とは言え、リプレイの実装などについては、まだ理解が不十分なので、その段階まで制作が進んだら、質問させていただくことになると思います。
……おおっと
すいません何やら関係のない方向に話が;
とにかく、毎回この掲示板で親切なアドバイスを下さる皆さんには、いくら感謝をしてもしきれないです。これからもどうぞよろしくお願いしますm(- -)m
>組木紙織さん
はじめまして。
確かに三角関数は、三角比の発展のような感じですね。
ただ、三角比では、孤度法ではなく度数法を使っていたので、慣れるまで少し大変でしたが…
あ、センター試験、数学1・Aはやりましたf^_^
…出来の方は……うーん……
そのうち国・英もやらなくてはと思ってはいるのですがなかなかやる気が…
>あ~るさん
こんばんは~
単位円でしたら、授業でちらっとやりました。
ただ、あまり深くは習いませんでしたね…
第一象限とかはやりましたが、sinがY座標…とかいった事は授業では教えてもらえなかったです;
‐続きです(-.-;)‐
・・・・・できました。(なんとか、ゲーム完成のめどがつく位までは…)
基礎を身につけてから、ゲーム制作を始めた方が良かったであろうということは分かるのですが、ある時突然、プログラムの意味が分かったりするのは個人的に好きだったりしますf^_^;
…とは言え、リプレイの実装などについては、まだ理解が不十分なので、その段階まで制作が進んだら、質問させていただくことになると思います。
……おおっと
すいません何やら関係のない方向に話が;
とにかく、毎回この掲示板で親切なアドバイスを下さる皆さんには、いくら感謝をしてもしきれないです。これからもどうぞよろしくお願いしますm(- -)m
>組木紙織さん
はじめまして。
確かに三角関数は、三角比の発展のような感じですね。
ただ、三角比では、孤度法ではなく度数法を使っていたので、慣れるまで少し大変でしたが…
あ、センター試験、数学1・Aはやりましたf^_^
…出来の方は……うーん……
そのうち国・英もやらなくてはと思ってはいるのですがなかなかやる気が…
>あ~るさん
こんばんは~
単位円でしたら、授業でちらっとやりました。
ただ、あまり深くは習いませんでしたね…
第一象限とかはやりましたが、sinがY座標…とかいった事は授業では教えてもらえなかったです;