ロゴを表示させた後の処理

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kiritani
記事: 2
登録日時: 11年前

ロゴを表示させた後の処理

#1

投稿記事 by kiritani » 11年前

皆さま、はじめまして。つい最近、アクションゲームを作ろうと思って模索していたらDXライブラリを使えばなんとかなると聞いてここへやってきました。

まだ初歩の段階なのですが...。

※ソースコードなどは、各サイト様から転載させていただいてます。
1.画像のフェードイン・フェードアウト
http://karetta.jp/book/game-programming/235058

今回、何が分からないのか ですが

画像のフェードイン、フェードアウトが終了した後、画面に次の工程が表れないんです。

※ファイルは全3ファイルのみです。

main.cpp

コード:

#include "DxLib.h"
#include "zairyou.h"
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
        if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了 
 
 
        int White;
        White   = GetColor( 255 , 255 , 255 ) ; // 白色の値を取得
        logo_test();
        
		
		DrawString(  0,  0, "ようこそ!" , White);            //文字列表示
        DrawString(100,100, "カレーの材料を買いましょう" , White);//文字列表示

        jyaga();
		ninjin();
		gyuu();
 
        WaitKey() ;                     // キーの入力待ち(『WaitKey』を使用)
        DxLib_End() ;                   // DXライブラリ使用の終了処理
        return 0 ;                      // ソフトの終了
}
zairyou.h

コード:

#pragma once

//ロゴを表示させる
void logo_test();

//にんじんを買う
void ninjin();

//じゃがいもを買う
void jyaga();

//牛肉を買う
void gyuu(); 
zairyou.cpp

コード:

#include "DxLib.h"
#include "zairyou.h"

// ロゴ表示のテスト
void logo_test(){
	    int i;
        int graphicHandle;
        // 描画先を裏画面にセット
        SetDrawScreen( DX_SCREEN_BACK );

        //画像読み込み
        graphicHandle = LoadGraph("./pic/Original_220x75.png");

        //フェードイン
        for(i = 0; i < 255; i++ ) {
                //輝度をだんだんあげていく
                SetDrawBright(i, i, i);
                //画像描画
                DrawGraph(190,190, graphicHandle, TRUE);
                ScreenFlip();
        }

        //フェードアウト
        for(i = 255; i >= 0; i--) {
                //輝度をだんだんさげていく
                SetDrawBright(i, i, i);
                //画像描画
                DrawGraph(190,190, graphicHandle, TRUE);
                ScreenFlip();
        }
}

// ニンジンを買う
void ninjin(){
        DrawString(100,170, "にんじんを買いました!" ,GetColor(255,255,255));//文字列表示
}

// じゃがいもを買う
void jyaga(){
        DrawString(100,210, "じゃがいもを買いました!" ,GetColor(255,255,255));//文字列表示
}

// 牛肉を買う
void gyuu(){
        DrawString(100,250, "牛肉を買いました!" ,GetColor(255,255,255));
}
※これはテスト用のプログラムなんで滅茶苦茶な内容ですがお許しください^^;

ロゴをフェードインさせ、フェードアウトさせた後、次のninjin();から下が画面に表示されず、WaitKey();は認識というか、機能するんです。

本当はロゴをフェードインさせ、フェードアウトさせた後にninjin();とjyaga();gyuu();の内容(文字)を表示させたいのです。
これに限らず、ロゴ表示の後の関数を表示させたいのです(未だに関数という使い方が間違ってないか怖いですが)
エラーは全く吐いてくれません。
どこが間違っているか、教えていただければ幸いです。

コンパイラ名 : Microsoft Visual Studio 2010
Version 10.0.30319.1 RTMRel
Microsoft .NET Framework
Version 4.0.30319 RTMRel

アバター
usao
記事: 1889
登録日時: 11年前

Re: ロゴを表示させた後の処理

#2

投稿記事 by usao » 11年前

DXライブラリは知らないのですが,
SetDrawBright()をググってみた感じだと,これで設定した影響は以降ずっと続くのではないでしょうか.
すなわち,フェードアウト を終えた時点で 描画輝度(?)が(0,0,0)に設定されていることが,
その後の ninjin() 等で行う描画にも影響を与えていて,結果として描画結果が見えていないのだと推測します.

…と思ったら,それだとしたら14行目の表示から見えないことになってないとダメですね.違いそう.
WaitKey(); の前に ScreenFlip(); が要るのかも?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: ロゴを表示させた後の処理

#3

投稿記事 by softya(ソフト屋) » 11年前

はじめまして。DXライブラリ自体と言うよりゲームプログラミング自体が始めてだと思って良いでしょうか。
さて、DXライブラリのWaitKey()は、サンプルなど特殊用途でしか使わないと覚えておいてください。

こちらの様な形が基本系になります。
「新・C言語 ~ゲームプログラミングの館~ [DXライブラリ] 1.9章 ゲームプログラムの骨格の完成」
http://dixq.net/g/01_09.html

つまり、SetDrawScreen( DX_SCREEN_BACK );で裏画面への毎フレームの描画を前提として
(1)ScreenFlip() → (2)ProcessMessage() → (3)ClearDrawScreen() → (4)描画処理
の形を守るようにしてください。
特に、この中の3大処理である(1)(2)(3)はプログラムに一度だけしか登場するようにしないと思わぬバグを産みます。
ここら辺はコンソールプログラムと考えたをチェンジする必要のある重要ポイントです。

今回のプログラムは(1)の多用やWaitKey() ;の利用など問題が色々とありますので整理が必要です。
状態遷移と言う考え方が必要になるので、こちらとか参考になるでしょう。
「タイトル画面について • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3&t=10444
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

kiritani
記事: 2
登録日時: 11年前

Re: ロゴを表示させた後の処理

#4

投稿記事 by kiritani » 11年前

お二人とも早々の対応ありがとうございました。

後でロゴのフェードイン・アウトのソースをゆっくりと整理してみます。
整理が出来次第、また問題があればここに書くことになりますが、その時もまたよろしくお願いします。

貴重なお時間を割いていただき、本当にありがとうございました。

頑張ります。

閉鎖

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