2面作成にあたって

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

2面作成にあたって

#1

投稿記事 by はね » 16年前

龍神録50章を利用して2面を作成してみようと思うのですが、
流れがよくわかりません。どんな感じの流れで
2面を作成すればいいかアドバイスがほしいです。
よろしくお願いします。

ひよこ

Re:2面作成にあたって

#2

投稿記事 by ひよこ » 16年前

一面が終わったら画像や敵情報やレーザーなどを初期化して敵情報の読み込み、ボスの弾幕をstageをつかって
分ければいいと思います。

はね

Re:2面作成にあたって

#3

投稿記事 by はね » 16年前

1面ボス撃破後に
一面クリアボーナスをつけたいのですが、
このタイミングはいつ、どのcpp内で、その後stageを+したらいいでしょうか?

Dixq (管理人)

Re:2面作成にあたって

#4

投稿記事 by Dixq (管理人) » 16年前

う~ん、2面を作ることについて、
何かの変数を少しいじればいいだけというわけにはいかないので、ここで全てあげることはできませんが、
一つ一つの処理の意味を考えていけば自ずと作り方が分かるのではないかと思います。

また、もう少し質問が具体的だと回答が得られやすいと思います。

そうですね~、とりあえずどこを変更すればいいのかを考え、わからないことが出てきたらその都度そこを限定して質問されてはいかがでしょうか?

はね

Re:2面作成にあたって

#5

投稿記事 by はね » 16年前

さっそく分からないことがあったので教えてください><
2面に移行するときに次のうち、必ず初期化するべきものってどれなんでしょうか?

memset(&ch,0,sizeof(ch_t));
memset(&bom,0,sizeof(bom_t));
memset(&bright_set,0,sizeof(bright_set_t));
memset(&dn,0,sizeof(dn_t));
memset(&boss,0,sizeof(boss_t));
memset(&stage_title,0,sizeof(stage_title_t));
memset(&area,0,sizeof(area_t));//(48)
memset(&boss_shot,0,sizeof(boss_shot_t));
memset(option_bb,0,sizeof(option_bb_t)*2);//(49)
memset(enemy,0,sizeof(enemy_t)*ENEMY_MAX);
memset(lazer,0,sizeof(lazer_t)*LAZER_MAX);
memset(enemy_order,0,sizeof(enemy_order_t)*ENEMY_ORDER_MAX);
memset(shot,0,sizeof(shot_t)*SHOT_MAX);
memset(cshot,0,sizeof(cshot_t)*CSHOT_MAX);
memset(effect,0,sizeof(effect_t)*EFFECT_MAX);
memset(del_effect,0,sizeof(del_effect_t)*DEL_EFFECT_MAX);
memset(child,0,sizeof(child_t)*CHILD_MAX);
memset(item,0,sizeof(item_t)*ITEM_MAX);

はね

Re:2面作成にあたって

#6

投稿記事 by はね » 16年前

もう一つ質問です。
2面用のstoryH1を読み込むには
どうしたらいいのでしょうか?

//敵の出現情報をエクセルから読み込んで格納する関数
void load_story(){
	int n,num,i,fp;
	char fname[32]={"../dat/csv/敵データ/storyH0.csv"};
	int input[64];
	char inputc[64];

	fp = FileRead_open(fname);//ファイル読み込み
	if(fp == NULL){
		printfDx("read error\n");
		return;
	}
	for(i=0;i<2;i++)//最初の2行読み飛ばす
		while(FileRead_getc(fp)!='\n');

	n=0 , num=0;
	while(1){
		for(i=0;i<64;i++){
			inputc=input=FileRead_getc(fp);//1文字取得する
			if(inputc=='/'){//スラッシュがあれば
				while(FileRead_getc(fp)!='\n');//改行までループ
				i=-1;//カウンタを最初に戻して
				continue;
			}
			if(input==',' || input=='\n'){//カンマか改行なら
				inputc='\0';//そこまでを文字列とし
				break;
			}
			if(input==EOF){//ファイルの終わりなら
				goto EXFILE;//終了
			}
		}
		switch(num){
			case 0:	enemy_order[n].cnt		=atoi(inputc);break;
			case 1:	enemy_order[n].pattern	=atoi(inputc);break;
			case 2:	enemy_order[n].knd		=atoi(inputc);break;
			case 3:	enemy_order[n].x		=atof(inputc);break;
			case 4:	enemy_order[n].y		=atof(inputc);break;
			case 5:	enemy_order[n].sp		=atof(inputc);break;
			case 6:	enemy_order[n].bltime	=atoi(inputc);break;
			case 7:	enemy_order[n].blknd	=atoi(inputc);break;
			case 8:	enemy_order[n].col		=atoi(inputc);break;
			case 9:	enemy_order[n].hp		=atoi(inputc);break;
			case 10:enemy_order[n].blknd2	=atoi(inputc);break;
			case 11:enemy_order[n].wait		=atoi(inputc);break;
			case 12:enemy_order[n].item_n[0]=atoi(inputc);break;
			case 13:enemy_order[n].item_n[1]=atoi(inputc);break;
			case 14:enemy_order[n].item_n[2]=atoi(inputc);break;
			case 15:enemy_order[n].item_n[3]=atoi(inputc);break;
			case 16:enemy_order[n].item_n[4]=atoi(inputc);break;
			case 17:enemy_order[n].item_n[5]=atoi(inputc);break;
		}
		num++;
		if(num==18){
			num=0;
			n++;
		}
	}
EXFILE:
	FileRead_close(fp);
}

はね

Re:2面作成にあたって

#7

投稿記事 by はね » 16年前

すみません。
2面用のstoryH1を読み込む処理は自己解決しました。

はね

Re:2面作成にあたって

#8

投稿記事 by はね » 16年前

1面から2面に切り替わるとき、
一瞬、全画面が暗くなるのですが、
暗くならない方法は皆さんはどうしてるのでしょうか?
よろしければ教えてください。

さめ

Re:2面作成にあたって

#9

投稿記事 by さめ » 16年前

切り替わらないようにする

Dixq (管理人)

Re:2面作成にあたって

#10

投稿記事 by Dixq (管理人) » 16年前

えぇとまず初期化しないといけないものですが

memset(&ch,0,sizeof(ch_t));
これって自機のデータですよね。
自機の残り残機数などもここに含まれるのでは無いでしょうか?
ということは、2面になると残機数がリセットされるような仕様では無い限りまずいのでは?

memset(&bom,0,sizeof(bom_t));
残りボム使用回数などをここに持たせていないのなら初期化しても大丈夫かと。

後のはざっと見た感じ大丈夫なのでは無いかと思います。
要はデータを2面に引き継ぎたいものを初期化しなければいいのです。

スコアデータとか、アイテム取得数とか、残機数とか・・。
敵を倒した回数みたいな要素を追加したとしたらそういうのも初期化するべきではないでしょう。

初期化しないものはしないものでまとめて、
後はすっきり初期化できるようにプログラムを組んだ方がいいかもしれませんね。

後、1面から2面に変わるとき一瞬画面が暗くなると言う事は無いと思いますよ。
1面の終わりで画像データを解放し、2面にさしかかるときにロードしているとすれば、
その間の1フレームは画像データが無いことになるので(しかもロード中は真っ暗)、
そういう意味で暗いのではないでしょうか?
画像を解放し、かつ暗くしない方法としては「画面を消さない」かもしくは
「解放する前の画面をキャプチャして保存し、それを描画し続ける」とかでしょうか。

どのような構造でプログラムを組まれているかわかりませんが・・。

Justy

Re:2面作成にあたって

#11

投稿記事 by Justy » 16年前


>2面に移行するときに次のうち、必ず初期化するべきものってどれなんでしょうか?

 この質問がでるということは各構造体や変数の役割を把握していない、
ということになります。

 まぁなんとなく動けばそれでいいのかもしれませんが、ここはじっくりと腰を据えて
構造体や変数の役割や意味、それがどこでどう使われているのかを把握することに
努めた方がいいのではないでしょうか。

 そこが把握できればこの問題は解決したも同然ですし、後々の修正や改良が
し易くなると思います。

はね

Re:2面作成にあたって

#12

投稿記事 by はね » 16年前

一日中考えた結果、
無事、自己解決しました。
一瞬画面が暗くなる原因は
func_stateに新しく200を新規で作成して、そこで新しい処理を追加してたので原因でした。

ただ、一つだけ解決できなかったことがあるのですが、
音楽のfadeoutってどうやるのでしょうか?
1面終了時に実装してみようと思いましたが、SEと違って
ChangeVolumeSoundMem( 32, sound_se[0] ) ;
みたいに音量自体、設定もできないので困ってます。

かつのり

Re:2面作成にあたって

#13

投稿記事 by かつのり » 16年前

あれ?メイン音楽も
ChangeVolumeSoundMem( 32, sound_se[0] ) ;
でいいんじゃないですか?

はね

Re:2面作成にあたって

#14

投稿記事 by はね » 16年前

いえ、ChangeVolumeSoundMem( 32, sound_se[0] ) ;
自体ないですけど・・

閉鎖

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