ボスの溜め動作について
-
yrao
ボスの溜め動作について
ボスのエフェクトについての質問です。
東方では、ボスが弾幕やアシストを出すときに『溜め動作』のような事をすることがあると思います。(光がボスに向かって集まっていくようなエフェクトです)
あのエフェクトはどのように実装されているのでしょうか?
東方では、ボスが弾幕やアシストを出すときに『溜め動作』のような事をすることがあると思います。(光がボスに向かって集まっていくようなエフェクトです)
あのエフェクトはどのように実装されているのでしょうか?
-
あ~る
Re:ボスの溜め動作について
龍神録のコードでゲームを作ってますか?
もしそうならエフェクトについては、ボムのエフェクトや敵の消滅するエフェクトで作り方を理解していれば簡単に実装出来る筈です
どっちにせよ、考え方としてはボスの座標から規定(若しくはランダム)の距離離れた場所にエフェクトの画像を表示して、あとはatan関数なんかを使ってボスへの角度を求めてやればいいと思います
その時最初大きめに描画して、だんだん小さくなるようにしてやれば、それっぽくなります
もしそうならエフェクトについては、ボムのエフェクトや敵の消滅するエフェクトで作り方を理解していれば簡単に実装出来る筈です
どっちにせよ、考え方としてはボスの座標から規定(若しくはランダム)の距離離れた場所にエフェクトの画像を表示して、あとはatan関数なんかを使ってボスへの角度を求めてやればいいと思います
その時最初大きめに描画して、だんだん小さくなるようにしてやれば、それっぽくなります
-
yrao
Re:ボスの溜め動作について
了解しました
エフェクト処理を書いていってみようと思います。
プログラムの書き方について疑問が出てきたら、また質問させて下さい。
ありがとうございましたm(__)m
エフェクト処理を書いていってみようと思います。
プログラムの書き方について疑問が出てきたら、また質問させて下さい。
ありがとうございましたm(__)m
-
あ~る
Re:ボスの溜め動作について
一応僕が作ったのがあります
ありますが、自分で作った方がその人の為にもなるかなぁ?って思ってコードは乗せませんでした
で、今要望があるなら書こうかなぁって思ったんですが、なんかサイトにパソコンからアクセスしようと思ったら出来ないみたいなんで……
なんででしょう?僕のパソコンだけでしょうか?携帯でも出来なかったんですけど……
ありますが、自分で作った方がその人の為にもなるかなぁ?って思ってコードは乗せませんでした
で、今要望があるなら書こうかなぁって思ったんですが、なんかサイトにパソコンからアクセスしようと思ったら出来ないみたいなんで……
なんででしょう?僕のパソコンだけでしょうか?携帯でも出来なかったんですけど……
-
あ~る
なんちゃって龍神録プログラミングの館 番外4章 ボスのチャージエフェクト
すいません遅れました;;
コード載せます。
-----------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------
多分これでOKのはずです。
画像は自分で適当な物を用意してください(僕は21*21のサイズの画像を使ってます)
ボスの所に集まるように移動させる、角度の求め方を失敗して面倒臭くなっちゃったんで、なんか変な移動のさせ方してますが悪しからず。。。
もうちょっと良いやり方があるような気がするんですが、結構前に1~2時間程度でちょちょいっと作ったものなんで、まぁ参考程度にしてもらえれば光栄です。
コード載せます。
-----------------------------------------------------------------------------------------
☆function.hに以下を追加
//effect.cpp
GLOBAL void enter_charge();
☆effect.cppのcalc_effect関数内に以下を追加
case 5://魔力チャージエフェクト
effect.cnt++;
effect.r-=0.07;//段々小さく
if(effect.cnt>30)
effect.flag=0;//30カウントで消す
effect.x-=((effect.x-boss.x)/30);
effect.y-=((effect.y-boss.y)/30);
break;
☆effect.cppに以下の関数を追加
//適当な位置
double random_pos(int i){//iが0の時はx座標、1の時はy座標を返す
double pos,pos_x,pos_y;
double ang=rang(PI2);
pos=100+(GetRand(100));
pos_x=pos*cos(ang);
pos_y=pos*sin(ang);
if(i==0)return pos_x;
if(i==1)return pos_y;
}
//溜めエフェクト登録
void enter_charge(){
int k;
if(boss_shot.cnt%3==0){//3カウントに一個
if((k=search_effect())!=-1){
effect[k].flag=1;
effect[k].x=boss.x+random_pos(0);
effect[k].y=boss.y+random_pos(1);
effect[k].cnt=0;
effect[k].knd=5;
effect[k].brt=255;
effect[k].spd=0;
effect[k].r=2.8;//最初は少し大きめに描画
effect[k].img=img_etc[49];
effect[k].eff=0;
}
}
}
☆graph.cppのgraph.main内に以下を追加
graph_effect(5);
☆サンプル弾幕
void boss_shot_bulletH020(){
#define TM020 200
int k,i,t=boss_shot.cnt,t2=boss_shot.cnt%TM020;
if(t2<80)enter_charge();
if(t2==100){
for(i=0;i<36;i++){
if((k=search_boss_shot())!=-1){
boss_shot.bullet[k].knd=0;
boss_shot.bullet[k].col=0;
boss_shot.bullet[k].flag=1;
boss_shot.bullet[k].angle=PI2/36*i;
boss_shot.bullet[k].x=boss.x;
boss_shot.bullet[k].y=boss.y;
boss_shot.bullet[k].cnt=0;
boss_shot.bullet[k].spd=3;
boss_shot.bullet[k].state=0;
}
}
}
}--------------------------------------------------------------------------------------
多分これでOKのはずです。
画像は自分で適当な物を用意してください(僕は21*21のサイズの画像を使ってます)
ボスの所に集まるように移動させる、角度の求め方を失敗して面倒臭くなっちゃったんで、なんか変な移動のさせ方してますが悪しからず。。。
もうちょっと良いやり方があるような気がするんですが、結構前に1~2時間程度でちょちょいっと作ったものなんで、まぁ参考程度にしてもらえれば光栄です。
-
yrao
Re:なんちゃって龍神録プログラミングの館 番外4章 ボスのチャージエフェクト
あ~るさんありがとうございます。
自分も手詰まりになってしまって、質問しようと思っていたところだったのですが、サンプルまで作って頂いていたとは…
助かりました<(__)>
自分も手詰まりになってしまって、質問しようと思っていたところだったのですが、サンプルまで作って頂いていたとは…
助かりました<(__)>
-
あ~る
Re:ボスの溜め動作について
いえいえ、夏休みに作ったのにコメント書いてコピペしただけですので(^-^)
今見直してみたら、ちょっと数が多過ぎたかもしれません;;
まぁスピードとか数は好みで弄ってやって下さい
今見直してみたら、ちょっと数が多過ぎたかもしれません;;
まぁスピードとか数は好みで弄ってやって下さい
-
ももた
Re:ボスの溜め動作について
分からないことがあったのですが、
サンプルを試してみたのですが、なぜか描画されません。
enter_charge内のeffect[k].imgは直したのですが、どうやら
そこが原因ではないようで困ってます。
また、double random_pos(int i)内で
warning C4715: 'random_pos' : 値を返さないコントロール パスがあります。
という警告が発生し、消したいのですがどうしたら消えるか、誰かアドバイスお願いします。
サンプルを試してみたのですが、なぜか描画されません。
enter_charge内のeffect[k].imgは直したのですが、どうやら
そこが原因ではないようで困ってます。
また、double random_pos(int i)内で
warning C4715: 'random_pos' : 値を返さないコントロール パスがあります。
という警告が発生し、消したいのですがどうしたら消えるか、誰かアドバイスお願いします。
-
あ~る
Re:ボスの溜め動作について
もしかしたらコンパイラが違うからかもしれません
僕が使ってるコンパイラはBorlandC++なんで、そのせいかもしれません
原因の方はわかりません…すいません…
僕が使ってるコンパイラはBorlandC++なんで、そのせいかもしれません
原因の方はわかりません…すいません…
-
Justy
Re:ボスの溜め動作について
>という警告が発生し、消したいのですがどうしたら消えるか
メッセージの通りです。
random_pos関数で i=0と i=1の時は returnで値を戻していますが、
それ以外の時はどうしていますか?
-
ももた
Re:ボスの溜め動作について
なるほど
return -1;
を付け加えたら警告が消えました。ありがとうございます。
それとvoid enter_charge()内の
int iは意味はあるのでしょうか?一度も使われていないという警告が出たので
消したのですが、もしかして必要だったのでしょうか?
return -1;
を付け加えたら警告が消えました。ありがとうございます。
//適当な位置
double random_pos(int i){
double pos,pos_x,pos_y;
double ang=rang(PI2);
pos=100+(GetRand(100));
pos_x=pos*cos(ang);
pos_y=pos*sin(ang);
if(i==0){
return pos_x;
}
if(i==1){
return pos_y;
}
return -1;
}
描画されないのは何が原因なのでしょうか?それとvoid enter_charge()内の
int iは意味はあるのでしょうか?一度も使われていないという警告が出たので
消したのですが、もしかして必要だったのでしょうか?
-
あ~る
Re:ボスの溜め動作について
なるほど!
じゃあ
if(i==0){
return pos_x;
}else if(i==1){
return pos_y;
}else{
printfDx("引数error");
}
というようにしてやれば大丈夫でしょうか?
引数は自分で入力するものだからと安心して想定外の数字の場合の処理をしてませんでした、申し訳無いです…
というかコメントで引数の意味を書いとけば良かったですね、すいません、直しときます
携帯からなんで↑のプログラムが変になってたらすいません
じゃあ
if(i==0){
return pos_x;
}else if(i==1){
return pos_y;
}else{
printfDx("引数error");
}
というようにしてやれば大丈夫でしょうか?
引数は自分で入力するものだからと安心して想定外の数字の場合の処理をしてませんでした、申し訳無いです…
というかコメントで引数の意味を書いとけば良かったですね、すいません、直しときます
携帯からなんで↑のプログラムが変になってたらすいません
-
あ~る
Re:ボスの溜め動作について
ありゃ、被ったorz
iは意味無いですね、癖で使うかもしれない変数を最初に宣言して掲示板に書く時に消すの忘れてました
描画され無い事についてはよくわかりませんが、ロードが上手く出来てない、若しくはハンドルが間違ってたりはしませんか?
iは意味無いですね、癖で使うかもしれない変数を最初に宣言して掲示板に書く時に消すの忘れてました
描画され無い事についてはよくわかりませんが、ロードが上手く出来てない、若しくはハンドルが間違ってたりはしませんか?
-
ももた
Re:ボスの溜め動作について
間違ってないです・・
ちょっと聞きたいのですが、あ~るさんは
effect[k].eff=0;のとき
graph.cpp内のvoid graph_effectの中はどうなっているのでしょうか?
ちょっと聞きたいのですが、あ~るさんは
effect[k].eff=0;のとき
graph.cpp内のvoid graph_effectの中はどうなっているのでしょうか?
-
ももた
Re:ボスの溜め動作について
そうですか。あとは念のため聞きたいのですが
void boss_shot_bulletH020()についてですが
これはeffect.cpp内に記述するのではなく
boss_shotH.cpp内に記述するんですよね?
void boss_shot_bulletH020()についてですが
これはeffect.cpp内に記述するのではなく
boss_shotH.cpp内に記述するんですよね?
-
あ~る
Re:ボスの溜め動作について
あと、enter_charge関数の中で、printfDxで何か文字を書くとかして、enter_charge関数が呼ばれているかどうかも調べてみて下さい
-
ももた
Re:ボスの溜め動作について
そうです。
修正したのはあと、enter_charge()内の
if(boss_shot_cnt%3==0){//3カウントに一個
の部分ですがboss_shot_cntは定義してなかったので
boss_shot.cntに直したくらいです。
念のためse_flag[14]=1;//キュイーン音を
追加してみましたところ、ボスが弾幕発射するとき、
音は鳴りましたので、描画だけ何かおかしいと・・
修正したのはあと、enter_charge()内の
if(boss_shot_cnt%3==0){//3カウントに一個
の部分ですがboss_shot_cntは定義してなかったので
boss_shot.cntに直したくらいです。
念のためse_flag[14]=1;//キュイーン音を
追加してみましたところ、ボスが弾幕発射するとき、
音は鳴りましたので、描画だけ何かおかしいと・・
//溜めエフェクト登録
void enter_charge(){
int k;
if(boss_shot.cnt%3==0){//3カウントに一個
if((k=search_effect())!=-1){
effect[k].flag=1;
effect[k].x=boss.x+random_pos(0);
effect[k].y=boss.y+random_pos(1);
effect[k].cnt=0;
effect[k].knd=5;
effect[k].brt=255;
effect[k].spd=0;
effect[k].r=1.5;//最初は少し大きめに描画
effect[k].img=img_eff_bom[0];
effect[k].eff=0;
se_flag[14]=1;//キュイーン音
}
}
}-
あ~る
Re:ボスの溜め動作について
わかりました!
多分、graph_mainにgraph_effect(5)を書いてないと思います
これを適当な場所に書けば描画されると思います
追加に書き忘れてました、本当に申し訳無いです…
多分、graph_mainにgraph_effect(5)を書いてないと思います
これを適当な場所に書けば描画されると思います
追加に書き忘れてました、本当に申し訳無いです…
-
あ~る
Re:ボスの溜め動作について
さっきももたさんが載っけたコードの中で倍率を弄っるみたいなんで、case文の中にあるだんだん小さくする値を変えるか、速さを変えないと、ボスの中心座標に辿り着く前に消えちゃうと思います
-
ももた
Re:ボスの溜め動作について
すみません。よくみたら中心に向かってました。
ありがとうございます。
ただ、一つ気になったのですが
ボスの中心の"周り"に集まって消えるのですが、
これを
完璧にボスの座標中心に集まってから消えるようにする方法とかないでしょうか?
ありがとうございます。
ただ、一つ気になったのですが
ボスの中心の"周り"に集まって消えるのですが、
これを
完璧にボスの座標中心に集まってから消えるようにする方法とかないでしょうか?
-
ももた
Re:ボスの溜め動作について
effect.x-=((effect.x-boss.x)/40);
effect.y-=((effect.y-boss.y)/40);
の40の値を小さくしたらいけました!
ほんとあ~るさんに感謝です。
ありがとうございました!
effect.y-=((effect.y-boss.y)/40);
の40の値を小さくしたらいけました!
ほんとあ~るさんに感謝です。
ありがとうございました!
-
あ~る
Re:ボスの溜め動作について
喜んで貰えてなによりです(^-^)
僕のミスで無駄な時間を使わせてしまってほんと申し訳無いです
僕も今回色々と自分のプログラムの粗いところがわかりました…
これからも精進していくんでお互い頑張りましょう!
僕のミスで無駄な時間を使わせてしまってほんと申し訳無いです
僕も今回色々と自分のプログラムの粗いところがわかりました…
これからも精進していくんでお互い頑張りましょう!