龍神録プログラミングの館 45章 ボスを倒しても画面が揺れない

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

龍神録プログラミングの館 45章 ボスを倒しても画面が揺れない

#1

投稿記事 by kirin » 12年前

http://dixq.net/rp/45.html
龍神録プログラミングの館45章で詰まってしまいました・・・

上記アドレスの動画だと、ボムを使ったり、ボスを撃破した瞬間に画面が揺れるのですが、
ボム使用時は画面がちゃんと揺れるのですが、ボスを倒した時に画面が揺れてくれません。

上記アドレスのenter_dn()関数の中にsizeとtimeの値がきちんと入っているのは、ボム使用時もボス撃破時もprintfDx関数で確認しました。
dn_calc()関数の中身も、ボム時もボス撃破時共に数字を確認しましたが、dn.flag、dn.x、dn.y、dn.cntも正常値でした。
ボム時もボス撃破時もdn.flagには1が入っています。


画面の揺れを表示する関数が

コード:

void graph_effect(int knd){
    for(int i=0;i<EFFECT_MAX;i++){
        if(effect[i].flag>0 && effect[i].knd==knd){                                       // ①

            if(effect[i].eff==1)//エフェクトが光エフェクトなら
                SetDrawBlendMode( DX_BLENDMODE_ADD, effect[i].brt) ;
			if(effect[i].eff==2)//エフェクトがαエフェクトなら
				SetDrawBlendMode( DX_BLENDMODE_ALPHA,effect[i].brt);
			
			//printfDx("%d ",knd);    //ボス倒した時はここ通ってない
			//dnはボムがヒットした場合の揺れ幅
            DrawRotaGraphF(float(effect[i].x+FX+dn.x),float(effect[i].y+FY+dn.y),effect[i].r,effect[i].ang,effect[i].img,TRUE);

            if(effect[i].eff==1 || effect[i].eff==2)
                SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0) ;
			
        }
    }
}
こちらなのですが、ボムを使った時はこのDrawRotaGraphF関数まで到達しているのですが、
ボス撃破時は①の条件を抜けられず、DrawRotaGraphF関数を通っていませんでした。

そこで、とりあえず ① の条件式を外して、このDrawRotaGraphF関数を通したのですが、
それでも画面が揺れず、他にどうすればいいのか分からず今に至ります。

原因に心当たりのある方がおられましたらよろしくお願いします・・・

kirin

Re: 龍神録プログラミングの館 45章 ボスを倒しても画面が揺れない

#2

投稿記事 by kirin » 12年前

自己解決。graph_effect関数の中で画面を揺らしてると思っていたのは勘違いで、
画面を揺らしていたのはgraph_back00と01関数。その中身のDrawGraph関数に、揺れ幅を指定するdn構造体のx,y値が加算されて
いないことが原因でした。
自分のように手打ちで1から入力して勉強してる人はハマりそうな箇所なので一応書いておきます。
おそらく①の部分を改正できてないor記述してないと思われますので・・・

コード:

void graph_back00(){              //通常背景 
	SetDrawArea(32,16,416,464);   //描画可能エリアを設定
	DrawGraph(FX+dn.x,count%700+FY-700+dn.y,img_back[0],FALSE);              //①
	DrawGraph(FX+dn.x,count%700+FY+dn.y    ,img_back[0],FALSE);              //①
	SetDrawArea(0,0,640,480);     //エリアを戻す
}

void graph_back01(){              //スペルカード用背景
    SetDrawArea( 32 , 16 , 416 , 464 ) ;//描画可能エリアを設定

    //ここにスペルカード用の背景を描く
	DrawGraph(FX+dn.x,FY-count%480+dn.y,img_back[11],FALSE);              //①
	DrawGraph(FX+dn.x,FY-count%480+480+dn.y,img_back[11],FALSE);              //①
	DrawGraph(FX+dn.x,FY+dn.y,img_back[10],TRUE);              //①

    SetDrawArea( 0, 0, 640, 480);//エリアを戻す
}

閉鎖

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