タメショットについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Huzzy

タメショットについて

#1

投稿記事 by Huzzy » 16年前

お世話になっております;
横STGの製作をしており8割方完成して
もうゴールが見えている状況なのですが・・・;

自機の攻撃パターンにタメ技を加えようと考え
龍神録様のcshot.cppを改良し考えていたのですが
添付ファイルのような波を画くような動きを
してくれません。

自分としては下記の通常ショットもしくは、
ショットの移動計算を変更すればうまく行きそうな
気がしなくもありません。
tshot[k].angleのPIの値を弄ってみましたが
あまり変化が見られませんでした;;

誰かお分かりになる方が居られましたら
ご教授ください;;

後、これをタメショット(5秒間ボタンを押す→離すと発射!の様な)
にするにはどのような
手順を踏めばよいのでしょうか?

質問ばかりで恐縮なのですが、
教えていただけると幸いです。


//通常ショット登録
void ch0_tshot_pattern(){
int k,d,c1;
int n=tshot0num[ch.power<30?0:1];
for(int i=0;i<n;i++){
if((k=search_tshot())!=-1){
tshot[k].flag=1;
tshot[k].cnt=0;
tshot[k].angle=PI/2;
// tshot[k].vx=3;
// tshot[k].vy=0.5+cos(PI*(tshot.cnt+60.0f)/80.0f)*2.0f;
tshot[k].spd=10;
tshot[k].y=ch.y+tshot0pos_y;
tshot[k].x=ch.x+tshot0pos_x;
tshot[k].power= (n<2 ? 200 : 120) +ch.power/100;//2筋なら20,4筋なら12(50)
tshot[k].knd=0;
tshot[k].img=img_tshot[0];//画像番号代入(49)
}
}
}

//ショットの移動計算
void calc_tshot(){
for(int i=0;i<TSHOT_MAX;i++){
if(tshot.flag==1){
int dranx=tshot.spd+11/2,drany=tshot.spd+55/2;
if(tshot.knd==1)
tshot.y+=cos(tshot.angle)*tshot.spd;
tshot[i].x+=sin(tshot[i].angle)*tshot[i].spd;
tshot[i].cnt++;
if(tshot[i].y<-dranx || tshot[i].y>FMY+drany ||
tshot[i].x<-drany || tshot[i].x>FMX+dranx)//画面から外れたら
tshot[i].flag=0;
}
}
}

Huzzy

Re:タメショットについて

#2

投稿記事 by Huzzy » 16年前

すいません;
添付ファイルを載せるの忘れてました;;

さが

Re:タメショットについて

#3

投稿記事 by さが » 16年前

コードを記入するときは、< pre >< / pre >で囲ってください

とりあえず、波の部分のみ答えます。
まず、sin波の出し方ですが、中心が分かっていないと求め方が面倒なので
y座標の計算用として tshot に dy要素でも構造体に追加しておいてください。
そして、描画部分において
draw(tshot[/url].x,tshot[/url].y …)
となっているかと思われますが次のようにしてください。
draw(tshot[/url].x,tshot[/url].y + tshot[/url].dy …)

しかしこの場合、すべての弾においてdyをクリアしないといけないので、注意が必要です。
弾の初期値を記憶しておいて、tshot[/url].yに代入した方が良いかも知れません。
//通常ショット登録 
void ch0_tshot_pattern(){ 
int k,d,c1; 
int n=tshot0num[ch.power<30?0:1]; 
for(int i=0;i<n;i++){ 
   if((k=search_tshot())!=-1){ 
      tshot[k].flag=1; 
      tshot[k].cnt=0; 
      tshot[k].angle=0; 				/****/
      tshot[k].spd=2; 				/****/
      tshot[k].y=ch.y+tshot0pos_y; 
      tshot[k].x=ch.x+tshot0pos_x; 
      tshot[k].dy=0;				/****/
      tshot[k].power= (n<2 ? 200 : 120) +ch.power/100;//2筋なら20,4筋なら12(50) 
      tshot[k].knd=1; 				/****/
      tshot[k].img=img_tshot[0];//画像番号代入(49) 
   } 
} 
} 

//ショットの移動計算 
void calc_tshot(){ 
for(int i=0;i<TSHOT_MAX;i++){ 
   if(tshot.flag==1){ 
      int dranx=tshot.spd+11/2,drany=tshot.spd+55/2; 
      tshot.angle += tshot.spd;	/****/
      if(tshot.knd==1) 
         tshot.y+=cos(tshot.angle) * 10; /****/
      tshot[i].x++; 					/****/
      tshot[i].cnt++; 
      if(tshot[i].y<-dranx || tshot[i].y>FMY+drany || 
       tshot[i].x<-drany || tshot[i].x>FMX+dranx)//画面から外れたら 
         tshot[i].flag=0; 
   } 
} 
}


/****/が主な変更点です。試してないので正確に動作しない可能性もあります。

さが

Re:タメショットについて

#4

投稿記事 by さが » 16年前

色々間違ってましたが、携帯からだと編集出来ないので連投になってしまいます。すいません。


//*訂正*//
ショット移動計算の
tshot.angle += 0.01

tshot.y = sin(tshot.angle) * 10

tshot.x = tshot.spd


またdranyの値も異なって来ますが、携帯からだと限界なので、ここまで。

Tatu

Re:タメショットについて

#5

投稿記事 by Tatu » 16年前

龍神録プログラミングのコードを改変して
作っているということなので、60章のコードをどう変えたら
チャージショットを撃てるようになるか考えて、
テキストファイルにまとめてみました。

閉鎖

“C言語何でも質問掲示板” へ戻る