弾幕のスペルの表示

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

弾幕のスペルの表示

#1

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

弾幕はスペルが右上に表示されますが、どうやって表示すればいいのでしょうか?

チルチル

Re:弾幕のスペルの表示

#2

投稿記事 by チルチル » 16年前

スペルってスペル名のことですか?

スペル名を書いた画像を描画するか、
DrawString関数やDrawFormatString関数などの文字出力系関数に
GetDrawStringWidth関数など組み合わせて表示すればいいと思います。

ひよこ

Re:弾幕のスペルの表示

#3

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

すみません。わかりずらいですね。
スペル名を表示させようと思ったら
表示されないということなんですが。どうしてでしょうか。
別トピの流星書記のゲームです。

yu

Re:弾幕のスペルの表示

#4

投稿記事 by yu » 16年前

あまりにも情報が少ないと思います・・・

具体的にどのような処理をしているのかが分からないので
答えようが無いと思います。

上手くいかないところのソースコードを見せてくださったら
何か分かるかもしれません。

ひよこ

Re:弾幕のスペルの表示

#5

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

そうですね。きっぱりと決心しました。
こちらがうまくいかなかったソースです。
void boss_shot_bulletH012(){
DrawString( 190 , 40, "虹符 カラフルドロップ" ,GetColor( 255 , 255 , 255 ) );
	#define TM000 120
    int i,k,t=boss_shot.cnt%TM000,t2=boss_shot.cnt;
    double angle;
    //60カウント以下で10カウントに1回
    if(t<60 && t%10==0){
        angle=bossatan2();//自機とボスとの成す角
        for(i=0;i<30;i++){
            if((k=search_boss_shot())!=-1){
                boss_shot.bullet[k].col      = GetRand(1);//弾の色
                boss_shot.bullet[k].x     = boss.x;//座標
                boss_shot.bullet[k].y     = boss.y;
                boss_shot.bullet[k].knd   = 5;//弾の種類
                boss_shot.bullet[k].angle = angle+PI2/30*i;//角度
                boss_shot.bullet[k].flag  = 1;
                boss_shot.bullet[k].cnt      = 0;
                boss_shot.bullet[k].spd      = 3;//スピード
                se_flag[0]=1;
            }
        }
    }
	if(t<60 && t%10==0){
        angle=bossatan2();//自機とボスとの成す角
        for(i=0;i<30;i++){
            if((k=search_boss_shot())!=-1){
                boss_shot.bullet[k].col      = GetRand(5);//弾の色
                boss_shot.bullet[k].x     = 200+i*5;//座標
                boss_shot.bullet[k].y     = boss.y;
                boss_shot.bullet[k].knd   = 1;//弾の種類
                boss_shot.bullet[k].angle =  bossatan3(k, boss_shot.bullet[k].x, boss_shot.bullet[k].y);//角度
                boss_shot.bullet[k].flag  = 1;
                boss_shot.bullet[k].cnt      = 0;
                boss_shot.bullet[k].spd      = 3;//スピード
                se_flag[0]=1;
            }
        }
    }
if(t<60 && t%10==0){
        angle=bossatan2();//自機とボスとの成す角
        for(i=0;i<30;i++){
            if((k=search_boss_shot())!=-1){
                boss_shot.bullet[k].col      = GetRand(5);//弾の色
                boss_shot.bullet[k].x     = 100+i*5;//座標
                boss_shot.bullet[k].y     = boss.y;
                boss_shot.bullet[k].knd   = 1;//弾の種類
                boss_shot.bullet[k].angle =  bossatan3(k, boss_shot.bullet[k].x, boss_shot.bullet[k].y);//角度
                boss_shot.bullet[k].flag  = 1;
                boss_shot.bullet[k].cnt      = 0;
                boss_shot.bullet[k].spd      = 3;//スピード
                se_flag[0]=1;
            }
        }
    }
}
よろしくおねがいします。

yu

Re:弾幕のスペルの表示

#6

投稿記事 by yu » 16年前

龍神録の場合だったらですが

計算部
 ↓
描画部


の順ですから



スペル名描画
   ↓
  背景描画


になってしまって
文字が背景に潰されているんじゃないですか?

ひよこ

Re:弾幕のスペルの表示

#7

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

よくわかりませんが、今わかるのは、成功する、成功しないソースがあることと
graph.cpp
void graph_main(){

	if(bright_set.brt!=255)SetDrawBright(bright_set.brt,bright_set.brt,bright_set.brt);

	graph_back_main();//背景描画メイン
	graph_effect(0);//敵が死ぬエフェクト

	if(bright_set.brt!=255)SetDrawBright(255,255,255);

	graph_effect(4);//喰らいボムのエフェクト

	if(bright_set.brt!=255)SetDrawBright(bright_set.brt,bright_set.brt,bright_set.brt);

	graph_child();//ボスのアシスト描画
	graph_item();//アイテム描画
	graph_boss();//ボス描画
	graph_enemy();//敵の描画
	graph_cshot();//自機ショットの描画

	if(bright_set.brt!=255)SetDrawBright(255,255,255);

	graph_ch();//自機の描画

	if(bright_set.brt!=255)SetDrawBright(bright_set.brt,bright_set.brt,bright_set.brt);
	
	graph_lazer();//レーザーの描画
	

	if(bright_set.brt!=255)SetDrawBright(255,255,255);

	graph_effect(1);//ボムのエフェクト
	graph_effect(2);//ボム線のエフェクト
	graph_effect(3);//ボムキャラのエフェクト
	graph_stage_title();//タイトルの表示
	graph_board();//ボードの描画
	graph_flash();//フラッシュ描画
graph_bullet();//弾の描画
	graph_develop();
	draw_fps(565,465);//fps描画
	//draw_func_tm(450,250);//処理時間描画
}
main.cpp
case 7://通常処理
								 enter_func_tm("最初");
				calc_ch();       enter_func_tm("キャラ計算");
				ch_move();       enter_func_tm("キャラ移動");
				cshot_main();    enter_func_tm("自機ショットメイン");
				enemy_main();	 enter_func_tm("敵処理メイン");
				boss_shot_main();enter_func_tm("ボスショットメイン");
				shot_main();	 enter_func_tm("ショットメイン");
				out_main();  	 enter_func_tm("当たり判定");
				effect_main();   enter_func_tm("エフェクトメイン");
				calc_main();	 enter_func_tm("計算メイン");
				graph_main();    enter_func_tm("描画メイン");
				if(boss.flag==0)
					stage_count++;
				break;
というソースが書いてあることです。

BEMANI

Re:弾幕のスペルの表示

#8

投稿記事 by BEMANI » 16年前

>>ひよこさん
>よくわかりませんが・・・
yuさんが仰っていることは関数を呼ぶ順番が違うのではないかと言う事です。

スペル名描画();
背景描画();

としてしまうと、スペル名を描画した後に背景が描画されてしまうので、
結果、文字が背景の下に隠れてしまいます。
ですので、文字を描画する関数を背景描画の関数の後に入れてみましょう。



ちょっと気になったのですが、
boss_shot_bulletH012 という関数の中でスペル名を表示させているのでしょうか?

DrawString( 190 , 40, "虹符 カラフルドロップ" ,GetColor( 255 , 255 , 255 ) );

これが多分スペル名を描画しているのだと思いますが、
この boss_shot_bulletH012 という関数がどこにも見当たらないのですが
この関数をどこかで呼んでいますか?

ひよこ

Re:弾幕のスペルの表示

#9

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

そういうことなんですか。というより順番を変えてなくても表示された例があるので・・・
boss_shot_bulletH012 はひとつの弾幕をあらわしています。
龍神録の館の「1面を作って見よう」を改良したので呼ばれていると思います。
いちおうfunc.hをのせておきます。
extern void boss_shot_bulletH000();
extern void boss_shot_bulletH001();
extern void boss_shot_bulletH002();
extern void boss_shot_bulletH003();
extern void boss_shot_bulletH004();
extern void boss_shot_bulletH005();
extern void boss_shot_bulletH006();
extern void boss_shot_bulletH007();
extern void boss_shot_bulletH008();
extern void boss_shot_bulletH009();
extern void boss_shot_bulletH010();
extern void boss_shot_bulletH011();
extern void boss_shot_bulletH012();
extern void boss_shot_bulletH013();
extern void boss_shot_bulletH014();
extern void boss_shot_bulletH015();
extern void boss_shot_bulletH016();
extern void boss_shot_bulletH017();
extern void boss_shot_bulletH018();
extern void boss_shot_bulletH019();
extern void boss_shot_bulletH020();
extern void boss_shot_bulletH021();
extern void boss_shot_bulletH022();
extern void boss_shot_bulletH023();
extern void boss_shot_bulletH024();
extern void boss_shot_bulletH025();

void (*boss_shot_bullet[DANMAKU_MAX])() =
{
//中ボス
		
        boss_shot_bulletH005,//ノーマル
        boss_shot_bulletH001,//遊符 宇宙の奥までつながる道
		
//ラスボス
		boss_shot_bulletH011,
        boss_shot_bulletH004,//宇宙の奥
		boss_shot_bulletH010,
		boss_shot_bulletH002,//宇宙にて開く花
        boss_shot_bulletH012,//虹符 カラフルドロップ
		boss_shot_bulletH007,//大風車
        boss_shot_bulletH003,//流星雨
//終り

        boss_shot_bulletH000,//ぬるぽ回避用(この弾幕は出てこない)
};

閉鎖

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