タイトルの作り方

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

タイトルの作り方

#1

投稿記事 by situmon » 16年前

今回、シューティングゲームの館でどうしてもタイトルを作りたいのですがどうしてもできません。
一応
void Title(){

    int x = 400,y = 256,state = 0;

    if(state == 0)
    DrawGraph(0,0,img_title[0],FALSE);

    while(state == 1){
        // メッセージ処理
        if( ProcessMessage() == -1 )
        {
             break ;    // エラーが発生したらループを抜ける
        }


    while( CheckHitKey( KEY_INPUT_RETURN ) == 0 ){

        if( ProcessMessage() == -1 )
        {
             break ;    
        }

    if(Key[KEY_INPUT_UP] == 1)
        y -= 48.0;
    if(Key[KEY_INPUT_DOWN] == 1)
        y += 48.0;

    if(y<254)
       y=304;
    if(y>305)
       y=256;

    }

    if(y == 256)
       state = 1;
    if(y == 304)
       DxLib_End() ;

    }

}

}
とタイトルは作ったのですが、
#include "DxLib.h"
#include "GlobalVariable.h"


int WINAPI WinMain( HINSTANCE hInstance, 
                   HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){


    
    extern void img_sound_load();
    extern void initialization();
    extern void SetColor();
    extern void Background();
    extern void PlayerShotCalc();
    extern void PlayerShotDisp();
    extern void PlayerControl();
    extern void EnemyControl();
    extern void EnemyCalcDisp();
    extern void EnemyShotControl();
    extern void EnemyShotCalcDisp();
    extern void CollisionDetection();
    extern void playerCollisionDetection();
    extern void Background2();
    extern void Background3();
    extern void FpsTimeFanction();
    extern void Title();
    int RefreshTime=0;

    ChangeWindowMode( TRUE ) ;
    if( DxLib_Init() == -1 ) return -1; 

    SetDrawScreen( DX_SCREEN_BACK ) ;           //裏画面を使用する。

    img_sound_load();
    initialization();
    SetColor();

    while(ProcessMessage() == 0 && GetHitKeyStateAll(Key) == 0){
        RefreshTime = GetNowCount();          //今の時間を取得
        ClearDrawScreen();                      //裏画面のデータを全て削除
        if( CheckSoundMem( sound_bgm[0] ) == 0 ){
        PlaySoundMem( sound_bgm[0], DX_PLAYTYPE_BACK ) ;
        }

        Background();

        PlayerShotCalc();
        
        PlayerShotDisp();

        PlayerControl();
        
        EnemyControl();

        EnemyCalcDisp();

        EnemyShotControl();

        EnemyShotCalcDisp();
        
        CollisionDetection();

        playerCollisionDetection();
        
        Background2();

        FpsTimeFanction();

        ScreenFlip() ;                          //裏画面データを表画面へ反映

        counter++;

        if(Key[KEY_INPUT_ESCAPE]==1)    break;  //Escapeが押されたら終了
        while(GetNowCount() - RefreshTime < 17);//1周の処理が17ミリ秒になるまで待つ
    }
        
    DxLib_End() ;
    return 0 ;
}
という構造の中に入れる方法がわかりません。
何回か入れてみたのですが、
無視されてしまいます。
タイトルはもともとどのように作成されているのでしょうか?

kazuoni

Re:タイトルの作り方

#2

投稿記事 by kazuoni » 16年前

Titleの{}の数合ってますか?
ちょっと気になったもので・・・。
タイトルの書き方は
http://dixq.net/g/#33
を参考にするのが手っ取り早いです。

今の書き方ではTitle()を呼び出してしまうと
そっちでループしてしまっています。
なのでyの操作をしていますが、ScreenFlip()
がメインに書いてあるため、
画面には何も反映されません。
よく見ていないのですが、この辺が原因かと。

あと個人的な意見ですが、
ProcessMessage()
DxLib_End()
などはなるべくmainのみに書くことをお勧めします。
自分はですが、どこを通っているか見失わないように
絶対にmain()に返ってくるようにしています。

以下のように、mainで条件分岐させると
見やすくなります。
switch(main_flag)
   case 0:
      if(Title()==1)
          main_flag=1;
      break;

   case 1:

      ....


ScreenFlip();
めちゃくちゃ適当ですけど、
今回はTitle()の戻り値で分岐させてやると楽です。
・なにも押されなければ0を返し続ける
・newでエンターが押されたら1、
 loadでエンターが押されたら2→この値を使って分岐していく
switchで分岐していますので、他の関数に入ることはないですし。

これは規模にもよって使いやすい、にくいが変わってきますが・・・。
(っというか使いづらいか・・・。。)

Mist

IoAttachDeviceToDeviceStack で

#3

投稿記事 by Mist » 16年前

Windowsのデバイスドライバに詳しい方がおられましたらお力をお貸しください。

環境:Windows Embedded FP2003
WINDDK:3790.1830

WDMでPCIデバイスドライバを作成しているのですがAddDevice関数内でIoAttachDeviceToDeviceStackを
実行するとブルースクリーンになってしまいます。
IoCreateDevicが成功していることは確認しています。
WINDDKに付属していたサンプルのPCIデバイスドライバでも確認してみたのですが同じようにIoAttachDeviceToDeviceStackでご臨終します。
こういう現象が発生する場合、原因と考えられる事柄、もしくはこういったところを調査してみるとよい
というのがあれば教えていただけませんでしょうか。


ポストリンク:http://pc11.2ch.net/test/read.cgi/tech/1063453024/822n-

JT

Re:IoAttachDeviceToDeviceStack で

#4

投稿記事 by JT » 16年前

参考になるかわからずおこがましいですがある人の記述です。
また本買っちゃいました。今度は「WDMデバイスドライバ Windows98/2000のための新しいドライバモデル」。いまどき2000とか書いてある本を買うのはちょっと抵抗あった(しかも高いうえに付近の本屋にないので中身を見ずに買うか決断しないといけなかった)けど、今回のターゲット用としてはかなり参考になりそう。で、結局、ドライバ関連の本は自分のと借り物をあわせると5冊も並んでたりする。

今回買った本に、HIDキーボードのドライバが付いてるんだけど、VMwareだとUSBキーボードはレガシーキーボードとしてエミュレートされるみたい。ターゲットであるジョイパッドはそのままHIDとして認識されるからいいんだけど、本についてたドライバが動くかの確認すらできない状況。ところで、WinXP SP2だと、デバイスマネージャのデバイスのプロパティの詳細タグで「クラス上フィルタ」ってのがあるのでこれは便利。VMwareのXPは無印なので詳細タグがないんですが。それにしても、「上フィルタ」「下フィルタ」って...upper filterとlower filterのことなんだろうけど、もっといい訳はないものか。

今回はキーボードかジョイスティックか、ってのを判別することまでできた。 !!本についてたドライバの段階でUSBパッドを接続するとブルースクリーンになってたんだけど、HidP_GetCapsの一つ目の引数にNULLを渡してたのが原因。!! このCD-ROMのデータはほんとに動くか確認したのか?元のコードだと100%確実にブルースクリーン直行だよ。あ、そういえば、本のほうにこのドライバはWindows2000ベータ2以降はほとんど動作しませんとか書いてあるよ。...実はもう1つの間違いも自分で直したんだけど、それも含めて原著の訂正ページに記載を発見。先に見とくんだった。
http://tmz.skr.jp/messages/msg0503.html

閉鎖

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