ページ 11

龍神録プログラミング17章での画像の入れ替え

Posted: 2008年10月13日(月) 03:18
by SH
度重なる質問、すみません・・・

龍神録プログラミング17章にて、自機からは一度に4つの弾が発射されることになります。
このとき、外側二つの弾の画像を別のものに変えたいときどうすればよいのでしょうか?

Re:龍神録プログラミング17章での画像の入れ替え

Posted: 2008年10月13日(月) 15:32
by array
多分大丈夫だと思うので42章を見て書くのでかみ合わない部分があるかもしれません。

ショット描画部分、イメージロードは既に記述されてたので以下の部分のみで大丈夫だと思います。

本文
弾の種類はcshot[○].kndがそれになります。

なので
--- cshot.cpp ---
//通常ショット登録
 void ch0_shot_pattern()
及び
/低速通常ショット登録
 void ch1_shot_pattern()

の中にある
 cshot[k].knd=0;
を変更してください。

例)
cshot[k].knd= (i<2 ? 0:1);

Re:龍神録プログラミング17章での画像の入れ替え

Posted: 2008年10月13日(月) 17:37
by 管理人
もしダメージ量も当たり判定も全部性質が同じで画像だけ違うのなら
.img
というデータを構造体に追加して、画像を表示し分けてはいかがでしょうか?

Re:龍神録プログラミング17章での画像の入れ替え

Posted: 2008年10月13日(月) 17:42
by SH
arrayさん有難うございました。
必死にgraph.cppの方弄っていたんですが、問題はcshotの方だったんですね・・・


現在、自機から発射できる弾の数を増やそうとしています。
プログラミングの館の方ではパワー200以上か、以下かを判別してそれによって
弾を二発撃つか、それとも四発撃つのかを判定していました。
しかし、パワーを200以下なら二発。400以下なら四発。600以下なら六発とするとき、
?の演算子が使えません。

この場合、ch.powerが400以下の時に従来のやり方でパワー200以下か、それ以上かを判別し、
パワー200以下なら二発、それ以上なら四発とし、
ch.powerが400以下でない時に六発撃つようにすればいいのでしょうか。

Re:龍神録プログラミング17章での画像の入れ替え

Posted: 2008年10月13日(月) 17:44
by 管理人
?の演算子は単にifとelseをまとめただけのものなので、

if(){
}
else if(){
}
else if(){
}
....

と書けば延々と続けられます。またはスイッチ文を使うとよいでしょう。

Re:龍神録プログラミング17章での画像の入れ替え

Posted: 2008年10月13日(月) 17:48
by 管理人
具体的にはこんな感じでしょうか?
if(ch.power>=400){
	//400以上のショット
}
else if(ch.power>=200){
	//200~399のショット
}
else{
	//0~199のショット(マイナスになってもここにはいる)
}

スイッチ文で書くと

switch(ch.power/200){
	case 0:
		//0~199のショット
		break;
	case 1:
		//200~299のショット
		break;
	default:
		//400以上のショット(マイナスになってもここにはいる)
		break;
}

Re:龍神録プログラミング17章での画像の入れ替え

Posted: 2008年10月13日(月) 19:08
by SH
管理人さん有難うございました。
無事に3パターンに分けることができました。

例えば、外側の弾の当たり判定や威力を変える場合、
ch2_shot_patternなどの関数を新たに用意し、(ch0_shot_patternは内側、ch1_...は内側且つ低速用)
そこで弾の画像や威力を変えれば良いのでしょうか。
…この場合、新しく構造体を追加し、内側の弾と外側の弾では別に処理することになりますよね…

Re:龍神録プログラミング17章での画像の入れ替え

Posted: 2008年10月13日(月) 20:40
by 管理人
arrayさんが仰っているようにkndの値を変えて、ダメージ計算式を変える必要があるでしょう。
17章ではまだ当たり判定が無いので、今は意識しなくてもいいと思いますが。
当たり判定はout.cppに追加していく事になると思います。

cshot_tにimgを追加し、ショット登録時に画像番号も指定しておけば、
描画関数で条件分岐することなく描画出来ると思います。

Re:龍神録プログラミング17章での画像の入れ替え

Posted: 2008年10月13日(月) 22:27
by SH
(実はもう21章まで進んでいるんですが…)

kndについて iが2未満の時、kndが0に、そうでないならkndが1にという設定なので、
powerはkndが0の時には30、kndが1の時には15と設定すれば…

int cshot_range[CSHOT_RANGE_MAX]={6,};
これのもう一方に3あたりを入れた時、
cshot_range[cshot.knd]の[/url]内の値は0か1なので
0の時は6が、 1の時は3が当たり判定として出てきますよね…?

書いていて自分がもの凄い勘違いをしているような気がしてきてるんですけど・・・

Re:龍神録プログラミング17章での画像の入れ替え

Posted: 2008年10月13日(月) 23:35
by 管理人
>cshot_range[cshot.knd]の[/url]内の値は0か1なので
>0の時は6が、 1の時は3が当たり判定として出てきますよね…?

そのもう一方とは・・・?
int cshot_range[CSHOT_RANGE_MAX]={6,3};
であり、
もしその追加したい弾の当たり判定が館で紹介しているものの半分ならそれでいいですよ。

Re:龍神録プログラミング17章での画像の入れ替え

Posted: 2008年10月14日(火) 14:26
by 管理人
館の49章に自機の異なった弾の追加方法について記載しましたのでよければご覧下さい。

Re:龍神録プログラミング17章での画像の入れ替え

Posted: 2008年10月14日(火) 20:27
by SH
管理人さん何度もお助けいただき本当に有り難う御座いました。
オプションからホーミングまで、とても勉強になりました…