お世話になっております;
横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;
}
}
}
タメショットについて
Re:タメショットについて
コードを記入するときは、< 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に代入した方が良いかも知れません。
/****/が主な変更点です。試してないので正確に動作しない可能性もあります。
とりあえず、波の部分のみ答えます。
まず、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:タメショットについて
色々間違ってましたが、携帯からだと編集出来ないので連投になってしまいます。すいません。
//*訂正*//
ショット移動計算の
tshot.angle += 0.01
tshot.y = sin(tshot.angle) * 10
tshot.x = tshot.spd
またdranyの値も異なって来ますが、携帯からだと限界なので、ここまで。
//*訂正*//
ショット移動計算の
tshot.angle += 0.01
tshot.y = sin(tshot.angle) * 10
tshot.x = tshot.spd
またdranyの値も異なって来ますが、携帯からだと限界なので、ここまで。
Re:タメショットについて
龍神録プログラミングのコードを改変して
作っているということなので、60章のコードをどう変えたら
チャージショットを撃てるようになるか考えて、
テキストファイルにまとめてみました。
作っているということなので、60章のコードをどう変えたら
チャージショットを撃てるようになるか考えて、
テキストファイルにまとめてみました。