三角型の弾幕について・・・
-
situmon
三角型の弾幕について・・・
チェンやチルノ、龍神録の2面でも使われる、
2つ(ひとつはたぶん応用)のつくりはどうなっているのですか?
使いたいのですが、考えても計算式が思いつきません。
2つ(ひとつはたぶん応用)のつくりはどうなっているのですか?
使いたいのですが、考えても計算式が思いつきません。
-
チルチル
Re:三角型の弾幕について・・・
私も三角型の弾幕は作った事が無かったので効率悪いですが・・
V字型
float Angle=atan2( Player.y-Boss.y , Player.x-Boss.x );//とりあえず自機を狙う
for( j=-3;j<4;j++ ){//ショットfor文
for( i=0;i<MAX;i++ ){//ショットfor文
if( EnemyShot.flag==0 )break;
}
EnemyShot.flag=1;//フラグ
EnemyShot.x=Boss.x+cos(Angle-PI/2)*(j*15)+cos(Angle)*((3-fabs(j))*15);//X座標
EnemyShot.y=Boss.y+sin(Angle-PI/2)*(j*15)+sin(Angle)*((3-fabs(j))*15);//Y座標
EnemyShot.Angle=Angle;//角度
EnemyShot.Speed=3;//スピード
}//ショットfor文
ピラミット型
float Angle=atan2( Player.y-Boss.y , Player.x-Boss.x );//とりあえず自機を狙う
for( t=0;t<7;t++ ){//ショットfor文
for( j=-6+t;j<7-t;j+=2 ){//ショットfor文
for( i=0;i<MAX;i++ ){//ショットfor文
if( EnemyShot.flag==0 )break;
}
EnemyShot.flag=1;//フラグ
EnemyShot.x=Boss.x;//X座標
EnemyShot.y=Boss.y;//Y座標
EnemyShot[i].Angle=Angle+(float)j/20;//角度
EnemyShot[i].Speed=2+(float)t/2;//スピード
}//ショットfor文
}//ショットfor文ちなみにfabsは絶対値関数です。-
チルチル
Re:三角型の弾幕について・・・
私の作るコードはわかりにくいですからね・・
fabsを使うには<math.h>ヘッダをインクルードする必要がありますが シューティングだとサインとかコサインとかを使いますから、おそらくインクルードしてますよね。 とりあえずfabsがなぜ使えないのかを教えて下さい、 でもよく考えたらfabsは実数型ですが、今回は整数を使っているのでabs関数でよかったですね・・ abs関数もfabsと使い方は同じです、abs関数を使う場合は<stdlib.h>または<math.h>ヘッダをインクルードして下さい。 なぜ三角弾幕になるかと言うと、V字型の場合はカウンタの値を使って弾をV字型に配置して Angleの方向に同じ速度で飛ばしています。 EnemyShot.x=Boss.x+cos(Angle-PI/2)*(j*15)+cos(Angle)*((3-fabs(j))*15);//X座標 EnemyShot.y=Boss.y+sin(Angle-PI/2)*(j*15)+sin(Angle)*((3-fabs(j))*15);//Y座標 のBoss.x+はボスの座標なので発射点です、 cos(Angle-PI/2)*(j*15)は弾をAngleと直角に動かす式です、 Angle-PI/2でAngleと直角の角度にしています。 (j*15)は移動距離でもあり移動方向でもあります、 jはマイナスからプラスになるので0の時は発射点から動きません。 cos(Angle)*((3-fabs(j))*15)は弾をAngleの方向に動かす式です、 jは-3,-2,-1,0,+1,+2,+3と変化するので、 fabs関数で絶対値を求めると+3,+2,+1,0,+1,+2,+3になります、 この値を3から引いて反比例させると0,+1,+2,+3,+2,+1,0になるので、 これを移動距離にすれば真ん中に近いほど前に進み、端に行くほど動かないようになります。 この二つの動きを組み合わせるとV字型になります。 ピラミット型は最初は弾が全部発射点に重なっているんですが、 角度とスピードに差を付けることで進んでいくうちにピラミット型になります。 EnemyShot.Angle=Angle+(float)j/20;//角度 EnemyShot.Speed=2+(float)t/2;//スピード のスピードの方はtが0~6まで変化するので tが大きくなるほど弾のスピードが速くなるようになっています、 そのままだと差が大きすぎるしtが0の時はスピードも0になってしまうので、 2+(float)t/2としています、 角度の方なんですが、 -6 -5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5 +6 と言う数値の並びを想像して下さい、 jはこの範囲で変化します、 そしてこの数値を使って角度をAngleからずらしていきます、 j+=2としているので二個置きに変化します、 tが増えるごとにjの最小値と最大値が減っていきます、 tが0の時はjが-6 -4 -2 0 +2 +4 +6と変化して、 tが6の時はjは0で一回実行されて終わりです、 この二つを組み合わせることで上の段に行くと弾が一つ減りスピードが上がると言う変化を作ります。 私は説明も下手なので多分この説明じゃ不十分だと思うので、遠慮せずに聞いて下さい。
-
めいらる
Re:三角型の弾幕について・・・
人によって全く違うコードで実装されてて面白いですね~。勉強になります!
私のシューティングにもショットガン(ピラミッド型の速度差の付いた弾のことをそう呼んでます;)は実装されていて画像のような感じで弾を並べられます。
やっていることはチルチルさんとほとんど同じだと思いますが、私のシューティングでは一体の敵は一種類のnwayショットしか撃てない仕様のため、1フレームの間に一時的にway数と速度をいじくって複数回発射することによりムリヤリ三角に配置してます
私のシューティングにもショットガン(ピラミッド型の速度差の付いた弾のことをそう呼んでます;)は実装されていて画像のような感じで弾を並べられます。
やっていることはチルチルさんとほとんど同じだと思いますが、私のシューティングでは一体の敵は一種類のnwayショットしか撃てない仕様のため、1フレームの間に一時的にway数と速度をいじくって複数回発射することによりムリヤリ三角に配置してます
-
Dixq (管理人)
Re:三角型の弾幕について・・・
三角に発射する方法は大体3種類かなと思います。
・1点から同時に三角の向きに発射する
これは時間と共に大きくなります。
・最初から三角の形をつくり、等速、等角で飛ばす
これは大きさ固定ですが、突然でかい三角形が出てくるので演出が少し安っぽくなるかも
・上と同じ物を時間差で発射して同じ形になるようにする
ん~なかなか携帯で説明するのは難しい‥。
作りたい三角形は進行方向と垂直の向きに裾が広がるわけですから広がりを進行方向+90度で計算すればどうでしょう。
・1点から同時に三角の向きに発射する
これは時間と共に大きくなります。
・最初から三角の形をつくり、等速、等角で飛ばす
これは大きさ固定ですが、突然でかい三角形が出てくるので演出が少し安っぽくなるかも
・上と同じ物を時間差で発射して同じ形になるようにする
ん~なかなか携帯で説明するのは難しい‥。
作りたい三角形は進行方向と垂直の向きに裾が広がるわけですから広がりを進行方向+90度で計算すればどうでしょう。
-
Dixq (管理人)
Re:三角型の弾幕について・・・
作ってみました。これでどうでしょう?
WIDE010の値で弾の行の間隔を決められます。
発射時間を変更する事で弾の列の間隔を決められます(但しこの場合計算式も少々弄る必要あり)
上でも述べたとおり「進行方向と90度異なった方向に行が伸びる」考え方で作っています。
まず、同時に発射するのは進行方向と垂直な行成分ですよね。
ですから画像のsub1分だけまず一番端に座標をずらしてやり、
そこからsub2分(弾1つ分)だけずらしながら弾を置いていけばいいと思います。
WIDE010の値で弾の行の間隔を決められます。
発射時間を変更する事で弾の列の間隔を決められます(但しこの場合計算式も少々弄る必要あり)
上でも述べたとおり「進行方向と90度異なった方向に行が伸びる」考え方で作っています。
まず、同時に発射するのは進行方向と垂直な行成分ですよね。
ですから画像のsub1分だけまず一番端に座標をずらしてやり、
そこからsub2分(弾1つ分)だけずらしながら弾を置いていけばいいと思います。
//ただの円形発射
void boss_shot_bulletH010(){
#define TM010 180
#define WIDE010 20
int i,k,t=boss_shot.cnt%TM010,t2=boss_shot.cnt;
static double RemAngle;
if(t==0){//最初の角度を記憶
RemAngle = bossatan2();
}
//60カウント以下で10カウントに1回
if(t<60 && t%10==0){
for(i=0; i<t/10+1; i++){
if((k=search_boss_shot())!=-1){
double x_sub1 = cos(RemAngle+PI/2)*(WIDE010/2) * (t/10);
double y_sub1 = sin(RemAngle+PI/2)*(WIDE010/2) * (t/10);
double x_sub2 = cos(RemAngle+PI/2)*(WIDE010/2) * (i*2);
double y_sub2 = sin(RemAngle+PI/2)*(WIDE010/2) * (i*2);
boss_shot.bullet[k].col = 0;//弾の色
boss_shot.bullet[k].x = boss.x - x_sub1 + x_sub2;//座標
boss_shot.bullet[k].y = boss.y - y_sub1 + y_sub2;
boss_shot.bullet[k].knd = 8;//弾の種類
boss_shot.bullet[k].angle = RemAngle;//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 2;//スピード
se_flag[0]=1;
}
}
}
} -
situmon
Re:三角型の弾幕について・・・
みなさんありがとうございます。
しかしシューティングの館と構造が違うので、
上記のコードをなおしてるのですが・・・
シューティングの館の構造でできる方法はないものでしょうか?
しかしシューティングの館と構造が違うので、
上記のコードをなおしてるのですが・・・
シューティングの館の構造でできる方法はないものでしょうか?
-
通りすがり
Re:三角型の弾幕について・・・
理論もサンプルも示されているのに実現出来ないということは、
完全に答えを貰わないと実現出来ないということになりますね。
それでは上達しませんよ。
完全に答えを貰わないと実現出来ないということになりますね。
それでは上達しませんよ。
-
situmon
Re:三角型の弾幕について・・・
void enemy_shot_pat7(int i){
#define WIDE010 20
int h,t2=e_shot.count;
int t = e_shot.count;
int j = e_shot.count;
static double RemAngle;
if(t==0){//最初の角度を記憶
RemAngle = atan2(enemy.x-player.x,enemy.y-player.y);
}
//60カウント以下で10カウントに1回
if(t<60 && t%10==0){
for(h=0; h<t/10+1; h++){
double x_sub1 = cos(RemAngle+PI/2)*(WIDE010/2) * (t/10);
double y_sub1 = sin(RemAngle+PI/2)*(WIDE010/2) * (t/10);
double x_sub2 = cos(RemAngle+PI/2)*(WIDE010/2) * (h*2);
double y_sub2 = sin(RemAngle+PI/2)*(WIDE010/2) * (h*2);
e_shot.bullet[j].flag=1;
e_shot.bullet[j].x=enemy.x - x_sub1 + x_sub2;
e_shot.bullet[j].y=enemy.y - y_sub1 + y_sub2;
e_shot[i].bullet[j].img=5;
e_shot[i].bullet[j].col=3;
e_shot[i].bullet[j].spd=3.0f;
e_shot[i].bullet[j].angle=RemAngle;//角度
}
}
for(int j=0;j<200;j++){
e_shot[i].bullet[j].x+=e_shot[i].bullet[j].spd*cos(e_shot[i].bullet[j].angle);
e_shot[i].bullet[j].y+=e_shot[i].bullet[j].spd*sin(e_shot[i].bullet[j].angle);
}
}としたのですが・・・
-
チルチル
Re:三角型の弾幕について・・・
う~ん、私はシューティングの館のコードも龍神録のコードも理解できなかったので、
的確には答えられませんが、とりあえずどこがうまくいかないのか教えてくれれば、
わかる範囲で手伝いますが・・
的確には答えられませんが、とりあえずどこがうまくいかないのか教えてくれれば、
わかる範囲で手伝いますが・・
-
situmon
Re:三角型の弾幕について・・・
返事遅くてすいません。
失敗した原因・・・
boss_shotではないため
たくさんの配列を用意している。
・・・e_shot
#define TM010 180
#define WIDE010 20
などをつかっていない。
このコードを入れないければいけない・・・
どれがどの文字にあてはまるのかが複雑でわからなかった。
ことです。
あとひとつうつショットのコードは
です。
失敗した原因・・・
boss_shotではないため
たくさんの配列を用意している。
・・・e_shot
#define TM010 180
#define WIDE010 20
などをつかっていない。
このコードを入れないければいけない・・・
for(int j=0;j<200;j++){
e_shot.bullet[j].x+=e_shot.bullet[j].spd*cos(e_shot.bullet[j].angle);
e_shot.bullet[j].y+=e_shot.bullet[j].spd*sin(e_shot.bullet[j].angle);
}どれがどの文字にあてはまるのかが複雑でわからなかった。
ことです。
あとひとつうつショットのコードは
void enemy_shot_pat1_e(int i){
for(int j=0;j<1;j++){
if(e_shot.count==0){
e_shot.bullet[j].flag=1;
e_shot.bullet[j].x=e_shot[i].ex;
e_shot[i].bullet[j].y=e_shot[i].ey;
e_shot[i].bullet[j].img=5;
e_shot[i].bullet[j].col=j%6;
e_shot[i].bullet[j].spd=1.0f;
e_shot[i].bullet[j].angle=PI2/100*j+atan2(player.y-e_shot[i].bullet[j].y,player.x-e_shot[i].bullet[j].x);
PlaySoundMem( sound_effect[4] , DX_PLAYTYPE_BACK ) ;
}
}
for(int j=0;j<1;j++){
e_shot[i].bullet[j].x+=e_shot[i].bullet[j].spd*cos(e_shot[i].bullet[j].angle);
e_shot[i].bullet[j].y+=e_shot[i].bullet[j].spd*sin(e_shot[i].bullet[j].angle);
}
}です。
-
チルチル
Re:三角型の弾幕について・・・
void enemy_shot_pat1_e(int i){
static float Angle;
if( e_shot.count==0 )Angle=atan2(player.y-e_shot.bullet[j].y,player.x-e_shot.bullet[j].x);
static int j,t;
if( e_shot.count==0 )j=0;
if(e_shot.count<=20 && e_shot.count%5==0){
t=j+e_shot.count/5;
float p=(float)(t-j)/2;
for(;j<=t;j++){
e_shot.bullet[j].flag=1;
e_shot.bullet[j].x=e_shot.ex+cos(Angle+PI/2)*(float)(10*(t-j)-5*p);
e_shot[i].bullet[j].y=e_shot[i].ey+sin(Angle+PI/2)*(float)(10*(t-j)-5*p);
e_shot[i].bullet[j].img=5;
e_shot[i].bullet[j].col=j%6;
e_shot[i].bullet[j].spd=1.0f;
e_shot[i].bullet[j].angle=Angle;
}
PlaySoundMem( sound_effect[4] , DX_PLAYTYPE_BACK ) ;
}
for(int j=0;j<15;j++){
e_shot[i].bullet[j].x+=e_shot[i].bullet[j].spd*cos(e_shot[i].bullet[j].angle);
e_shot[i].bullet[j].y+=e_shot[i].bullet[j].spd*sin(e_shot[i].bullet[j].angle);
}
}こんな感じでしょうかね?私の所ではシューティングの館のコードは実行できないので
多分ちゃんと動かないでしょうね・・
アルゴリズムの設計を手伝うので
それを基にコードを作ってみてはどうですか?
すみません、頼りなくて・・
-
situmon
Re:三角型の弾幕について・・・
やってみましたが・・・
自機を向いてくれないのと
でjが定義されていないのでエラーが出ました。
static int j,t;を先においたらなんとかできましたが・・・
やはり自機を向いてくれないです・・・
自機を向いてくれないのと
if( e_shot.count==0 )Angle=atan2(player.y-e_shot.bullet[j].y,player.x-e_shot.bullet[j].x);
でjが定義されていないのでエラーが出ました。
static int j,t;を先においたらなんとかできましたが・・・
やはり自機を向いてくれないです・・・
-
チルチル
Re:三角型の弾幕について・・・
自機を向いてくれないのは多分
e_shot.bullet[j].angle=PI2/100*j+atan2(player.y-e_shot.bullet[j].y,player.x-e_shot.bullet[j].x);
を
Angle=atan2(player.y-e_shot.bullet[j].y,player.x-e_shot.bullet[j].x);
にしたからですね
改良すると
しかし自機を向いてくれないって事は
一応三角にはなったんでしょうか?
e_shot.bullet[j].angle=PI2/100*j+atan2(player.y-e_shot.bullet[j].y,player.x-e_shot.bullet[j].x);
を
Angle=atan2(player.y-e_shot.bullet[j].y,player.x-e_shot.bullet[j].x);
にしたからですね
改良すると
void enemy_shot_pat1_e(int i){
static float Angle;
static int j,t;
if( e_shot.count==0 ){
j=0;
Angle=PI2/100*j+atan2(player.y-e_shot.bullet[j].y,player.x-e_shot.bullet[j].x);
}
if(e_shot.count<=20 && e_shot.count%5==0){
t=j+e_shot[i].count/5;
float p=(float)(t-j)/2;
for(;j<=t;j++){
e_shot[i].bullet[j].flag=1;
e_shot[i].bullet[j].x=e_shot[i].ex+cos(Angle+PI/2)*(float)(10*(t-j)-5*p);
e_shot[i].bullet[j].y=e_shot[i].ey+sin(Angle+PI/2)*(float)(10*(t-j)-5*p);
e_shot[i].bullet[j].img=5;
e_shot[i].bullet[j].col=j%6;
e_shot[i].bullet[j].spd=1.0f;
e_shot[i].bullet[j].angle=Angle;
}
PlaySoundMem( sound_effect[4] , DX_PLAYTYPE_BACK ) ;
}
for(int j=0;j<15;j++){
e_shot[i].bullet[j].x+=e_shot[i].bullet[j].spd*cos(e_shot[i].bullet[j].angle);
e_shot[i].bullet[j].y+=e_shot[i].bullet[j].spd*sin(e_shot[i].bullet[j].angle);
}
}でしょうかね、しかし自機を向いてくれないって事は
一応三角にはなったんでしょうか?
-
チルチル
Re:三角型の弾幕について・・・
すいません、役に立たなくて・・
原理はそんなに難しくありません
弾を横に並べて行って、一番端までの長さの半分だけ逆方向にずらしています
つまり・・
△△△△△
○
こう並べて
△△△△△
__○
逆方向にずらす
実際は一個ごとにずらしています
(自機の方向に直角な角度)×(カウンタ×弾の間隔-(弾の間隔の半分×(弾の数-1)))
みたいな感じかな・・
弾を五個並べる場合
自機の方向に直角な方向にfor文で 角度×カウンタ×弾の間隔
みたいな感じで配置します
自機が前にいるなら、どちらでもいいですが、とりあえず右に伸ばすとして・・
弾の間隔が10として
発射点との距離が 0 10 20 30 40
最大値は40なので半分の20だけ左に戻すと・・
-20 -10 0 +10 +20
となります
これを数カウントごとに弾の数を増やしながら
やると三角になります
for文の式が浮かばなかったら
とりあえず呼ばれた回数でスイッチ文とかを
作って
一回目は0で一回
二回目は-5 +5で二回
三回目は-10 0 +10で三回
みたいに条件分岐してもいいかも・・
原理はそんなに難しくありません
弾を横に並べて行って、一番端までの長さの半分だけ逆方向にずらしています
つまり・・
△△△△△
○
こう並べて
△△△△△
__○
逆方向にずらす
実際は一個ごとにずらしています
(自機の方向に直角な角度)×(カウンタ×弾の間隔-(弾の間隔の半分×(弾の数-1)))
みたいな感じかな・・
弾を五個並べる場合
自機の方向に直角な方向にfor文で 角度×カウンタ×弾の間隔
みたいな感じで配置します
自機が前にいるなら、どちらでもいいですが、とりあえず右に伸ばすとして・・
弾の間隔が10として
発射点との距離が 0 10 20 30 40
最大値は40なので半分の20だけ左に戻すと・・
-20 -10 0 +10 +20
となります
これを数カウントごとに弾の数を増やしながら
やると三角になります
for文の式が浮かばなかったら
とりあえず呼ばれた回数でスイッチ文とかを
作って
一回目は0で一回
二回目は-5 +5で二回
三回目は-10 0 +10で三回
みたいに条件分岐してもいいかも・・
-
チルチル
Re:三角型の弾幕について・・・
よく考えたらV字型の方が簡単かも・・
アルゴリズムは・・
一回目は自機の方向を記録して
その角度に一発だけ発射
二回目以降は
-1→+1みたいなfor文で
記録した角度と直角な方向に
弾幕のカウンタ×for文のカウンタ
だけ進めた位置に
記録した角度を弾の角度にして登録
みたいな感じかな・・
アルゴリズムは・・
一回目は自機の方向を記録して
その角度に一発だけ発射
二回目以降は
-1→+1みたいなfor文で
記録した角度と直角な方向に
弾幕のカウンタ×for文のカウンタ
だけ進めた位置に
記録した角度を弾の角度にして登録
みたいな感じかな・・
-
Ma
Re:三角型の弾幕について・・・
質問者ではないのですが、私も三角形弾幕を導入しようとして、上手くいっていないので質問させてください。
(新しく投稿したほうが良かったら教えてください。出直します。)
私は龍神録のプログラムではない独自の物を作っているため、
事情が変わり勝手に勘違いをしているかもしれませんが
できるかぎり私が考えている事を伝えられるよう努力します。
私の疑問としては、静的変数がどうして維持できるか という点にあります。
みなさんのコードを見ていると、
>static float Angle;
>static double RemAngle;
のように、角度を保存するために静的変数が使われていますが、
いくつかの敵がこの同じショットを同時に行った場合、
すなわちこの関数が複数の敵に同時に呼ばれた場合、静的変数 がふたつ以上の敵によって操作されるので
変数の中身が変わってしまうのではないのですか?
龍神録のプログラムを一部しか見ていないので、勝手な勘違いをしているのかもしれませんが
私の想像では、どこかの cpp ファイル(shotH.cpかな?)にこの関数が宣言されていて、
その関数をどの敵でも呼び出せるようにしているのですよね?
ならば、「static が書き換えられてしまうのではないか?」と思ったのです。
よろしくお願いします。<(_ _)>
(新しく投稿したほうが良かったら教えてください。出直します。)
私は龍神録のプログラムではない独自の物を作っているため、
事情が変わり勝手に勘違いをしているかもしれませんが
できるかぎり私が考えている事を伝えられるよう努力します。
私の疑問としては、静的変数がどうして維持できるか という点にあります。
みなさんのコードを見ていると、
>static float Angle;
>static double RemAngle;
のように、角度を保存するために静的変数が使われていますが、
いくつかの敵がこの同じショットを同時に行った場合、
すなわちこの関数が複数の敵に同時に呼ばれた場合、静的変数 がふたつ以上の敵によって操作されるので
変数の中身が変わってしまうのではないのですか?
龍神録のプログラムを一部しか見ていないので、勝手な勘違いをしているのかもしれませんが
私の想像では、どこかの cpp ファイル(shotH.cpかな?)にこの関数が宣言されていて、
その関数をどの敵でも呼び出せるようにしているのですよね?
ならば、「static が書き換えられてしまうのではないか?」と思ったのです。
よろしくお願いします。<(_ _)>
-
チルチル
Re:三角型の弾幕について・・・
そういえばそうですよね・・
私も龍神録のプログラムが理解できなかったので
独自の処理を行っています
なのでよくわかりませんが
そのうち誰かが来て答えてくれるんじゃないでしょうか・・
ちなみにMaさんの作っているゲームはどんな感じですか?
私も龍神録のプログラムが理解できなかったので
独自の処理を行っています
なのでよくわかりませんが
そのうち誰かが来て答えてくれるんじゃないでしょうか・・
ちなみにMaさんの作っているゲームはどんな感じですか?
-
Ma
Re:三角型の弾幕について・・・
>チルチル 様
宣伝になってしまわないか心配ですが^^;
トップビューの2Dシューティングを製作しています。
公式:
http://cielsorciere.web.fc2.com/index.html
宣伝になってしまわないか心配ですが^^;
トップビューの2Dシューティングを製作しています。
公式:
http://cielsorciere.web.fc2.com/index.html
-
Justy
Re:三角型の弾幕について・・・
>ならば、「static が書き換えられてしまうのではないか?」と思ったのです。
このスレの頭から読んでちゃんと理解しているわけではないので推測ですが、
いくつかの敵がこの同じショットを同時に行った場合は書き換えられてしまうので、
誤動作するでしょう。
最初にこのスレで staticが出てきたのは No:33236の Dixqさんのコードですが
こちらはボスのショットを前提としているように見えます。
龍神録のプログラムではボスは同時には1体しか出ませんし、
そのボスがこのショットを同時に使わなければ問題は出ない、ということで
staticにしたのでしょう。
-
チルチル
Re:三角型の弾幕について・・・
Maさんはかなり本格的にゲームを製作しているようですね
これは私も負けていられませんね
そういえば上に書いたコードがうまく動かないのって
staticが変更されてたからなのかな?
見るからに複数の敵に呼ばれてるし・・
でもそれならもっとぐちゃぐちゃになるかな?
これは私も負けていられませんね
そういえば上に書いたコードがうまく動かないのって
staticが変更されてたからなのかな?
見るからに複数の敵に呼ばれてるし・・
でもそれならもっとぐちゃぐちゃになるかな?
-
Dixq (管理人)
Re:三角型の弾幕について・・・
Justyさんの仰るとおり、ボスが一体しかいないので、staticを使いました。
このstatic変数はini関数で変数諸々初期化する時に一緒に初期化されないので、少々危険ではありますが、
(途中でゲームをやめて再スタートした時などに再度呼ばれるとバグが出る可能性がある)
必ずこの関数が初めて呼ばれる時は初期化されるように気をつけて使っていました。
雑魚的などでこれと同じ事をする時は、雑魚的の変数構造体の中に入れてやるようにしています。
統一した方がよかったですね、すみません。
初期化漏れの可能性もあり、うまく動いているように見えるのにリプレイを動かしてみるとうまくいかないといった原因解明の難しいバグが生まれる可能性があるので、
static変数の乱用はしない方がいいかもしれません。
このstatic変数はini関数で変数諸々初期化する時に一緒に初期化されないので、少々危険ではありますが、
(途中でゲームをやめて再スタートした時などに再度呼ばれるとバグが出る可能性がある)
必ずこの関数が初めて呼ばれる時は初期化されるように気をつけて使っていました。
雑魚的などでこれと同じ事をする時は、雑魚的の変数構造体の中に入れてやるようにしています。
統一した方がよかったですね、すみません。
初期化漏れの可能性もあり、うまく動いているように見えるのにリプレイを動かしてみるとうまくいかないといった原因解明の難しいバグが生まれる可能性があるので、
static変数の乱用はしない方がいいかもしれません。
-
Ma
Re:三角型の弾幕について・・・
>チルチル 様
初心者には違いありませんので、がんばりたいと思います^^;
管理人様、返信ありがとうございます。
そうですね、やはり構造体の中でデータを保存した方が良いのでしょう。
△弾幕が上手くできないのはこの方法で解決しました。
static の使用はできるだけ避けた方がよさそうですね。
ありがとうございました。
初心者には違いありませんので、がんばりたいと思います^^;
管理人様、返信ありがとうございます。
そうですね、やはり構造体の中でデータを保存した方が良いのでしょう。
△弾幕が上手くできないのはこの方法で解決しました。
static の使用はできるだけ避けた方がよさそうですね。
ありがとうございました。
-
チルチル
Re:三角型の弾幕について・・・
いや~しかしMaさんのゲームは普通のオンラインゲームと同じぐらいの存在感がありますね、
完成したらぜひやらせていただきます。
それにしても、皆さんかなり真剣にゲームを製作しているようですね、
何か真面目に作ってても無意識のうちに手を抜いちゃう自分が恥ずかしい・・
完成したらぜひやらせていただきます。
それにしても、皆さんかなり真剣にゲームを製作しているようですね、
何か真面目に作ってても無意識のうちに手を抜いちゃう自分が恥ずかしい・・
-
Ma
Re:三角型の弾幕について・・・
>チルチル 様
ありがとうございます。期待にこたえられるように、がんばりたいと思います。
それでは、これ以上トピックに関連のないことであげてしまうのは申し訳ないので、
もう書き込まないようにします。
ありがとうございます。期待にこたえられるように、がんばりたいと思います。
それでは、これ以上トピックに関連のないことであげてしまうのは申し訳ないので、
もう書き込まないようにします。