DXlibの起動時と起動後の挙動について

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

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: DXlibの起動時と起動後の挙動について

Re: DXlibの起動時と起動後の挙動について

#2

by みけCAT » 6年前

エミリア さんが書きました:
6年前
ctrl+F5を押した際に初期設定されているwindowのサイズの黒画面が出てきてそのあとに私が設定したサイズの画面が出てきて下記の処理が実行されています。
SetGraphMode関数をDxLib_Init()の前に呼び出すようにすると改善するでしょう。
エミリア さんが書きました:
6年前
実行してからしばらくすると処理が止まってしまい入力を受け付けずキャラが動かなくなってしまいます。
ここに載っていない関数があり、断定はできませんが、
各フレームで毎回画像を読み込まないようにする
(PlayerInit関数を毎フレーム呼ばず、ループに入る前で1度だけ呼ぶようにする)か、
宗教上の理由などでどうしても毎フレーム画像を読み込みたければ、
読み込んだ画像を毎フレームちゃんと削除してリークさせないようにすると改善するかもしれません。

DXlibの起動時と起動後の挙動について

#1

by エミリア » 6年前

ctrl+F5を押した際に初期設定されているwindowのサイズの黒画面が出てきてそのあとに私が設定したサイズの画面が出てきて下記の処理が実行されています。
実行してからしばらくすると処理が止まってしまい入力を受け付けずキャラが動かなくなってしまいます。
どうすれば2つの問題を解決できるのでしょうか。
main.cpp↓

コード:

#include "ALL.h"

int WINAPI WinMain(HINSTANCE h1, HINSTANCE hp, LPSTR lpC, int nC)
{
    // ウィンドウモードにする
    ChangeWindowMode(TRUE);

    // DXライブラリの初期化
    if (DxLib_Init() == -1)	return -1;
    SetGraphMode(1280, 720, 32);
    // 裏画面を描画対象にする
    SetDrawScreen(DX_SCREEN_BACK);

    // 正常にDXライブラリが処理されていて、ESCPEキーが押されているときのみループを脱出する
    while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0)
    {
        // 画面消去
        ClearDrawScreen();
        timer++;
        
        // この中に行いたい処理を書いていく
        
        //---------------------------------------------
        //初期化
        //---------------------------------------------
        BGInit();
        PlayerInit();
        


        //---------------------------------------------
        //更新
        //---------------------------------------------
        PlayerUpdate();
        

        //---------------------------------------------
        //描画
        //---------------------------------------------
        BGDraw();
        PLayerDraw(angle);
        

        
        // 画面入れ替え
        ScreenFlip();
    }

    // DXライブラリの終了処理
    DxLib_End();

    return 0;
}
Player.cpp↓

コード:

#include "ALL.h"
#include <math.h>
#define PAI 3.14
int P1Handle;
int P2Handle;
int wHandle;
int p1_pos_x = 170, p1_pos_y =420,Key;
int p2_pos_x = 820, p2_pos_y = 420, Key2;
int w_pos_x = 125, w_pos_y = 550;
char KeyState[256];
int XBuf, YBuf;
float angle = -90;
int X;
bool exist=true;
void PlayerInit(){
    P1Handle = LoadGraph("image//Player1.png");
    if (exist == true) {
        P2Handle = LoadGraph("image//Player2.png");
    };
    wHandle= LoadGraph("image//sword.png");
};
void PlayerUpdate() {
    GetJoypadAnalogInput(&XBuf, &YBuf, DX_INPUT_PAD1);
    GetHitKeyStateAll(KeyState);
    SetJoypadDeadZone(DX_INPUT_PAD1, 30.0);
    X = XBuf+330;
    int Y = YBuf;
    if (XBuf < 0) {
        XBuf = 0;
    };
    if (XBuf > 350) {
        XBuf = 350;
    };
    float radian = atan2f(Y, X);
    angle = radian;
    /*angle = radian;*/
    //player1
    // Dを押していたら右に進む
    if (KeyState[KEY_INPUT_D]) { 
        p1_pos_x += 7; 
        if (p1_pos_x >= 1130) {
            p1_pos_x = 1130;
        };
    }
    // Aを押していたら左に進む
    if (KeyState[KEY_INPUT_A]) {
        p1_pos_x -= 7;
        if (p1_pos_x < 0) {
            p1_pos_x = 0;
        };
    };
    //player2
    // 右を押していたら右に進む
    if (KeyState[KEY_INPUT_RIGHT]) {
        p2_pos_x += 7;
        if (p2_pos_x > 1280) {
            p2_pos_x = 1280;
        };
    };
    // 左を押していたら左に進む
    if (KeyState[KEY_INPUT_LEFT]) {
        p2_pos_x -= 7;
        if (p2_pos_x < 0) {
            p2_pos_x = 0;
        };
    };
    
};
void PLayerDraw(int angle) {
    if (X + 290>1100) {
        exist = false;
        DeleteGraph(P2Handle);
    }
    DrawGraph(p1_pos_x, p1_pos_y, P1Handle, TRUE);
    DrawGraph(p2_pos_x, p2_pos_y, P2Handle, TRUE);
    
    //DrawRotaGraph2(500, 500, 230, 420, 1.0, angle, wHandle, TRUE, FALSE);
    DrawGraph(XBuf+290, w_pos_y, wHandle, TRUE);
};


ページトップ