合計 昨日 今日

ボード画像が表示されない

[このトピックは解決済みです]

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Name: 白紙
[URL]
Date: 2017年9月03日(日) 18:08
No: 1
(OFFLINE)

 ボード画像が表示されない

フォーラム初参加・初質問です。よろしくおねがいします。

龍神録プログラミングの館にあるコードを使用しながら、東方型STGをC++で自作しています。
また、自機の作成においてMMDを使用した形にしています。
※関数の名前など一部違う箇所はありますが、基本的には龍神録プログラミングの館のものに沿ってコードを書いています。


【開発環境】
・Win7 Ultimate
・Visual Studio 2015 (C++)


現在、7章まで進めた所なのですが、プログラムを実行した所ボード画像が表示されません。
(成功ならばボードとMMDモデルが表示されるはずがMMDモデルだけが表示される)
画像

参照違いも検討したりしましたが、結果目立ったエラーが見当たらず詰まっています。

関連するコードを下記にしるしました。
解決策わかる方がいましたらよろしくおねがいします。

main.cpp
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#define GLOBAL_INSTANCE 
#include <DxLib.h>
#include "global.h"
 
///ループ処理
int Process_Loop(){
    if(ProcessMessage() != 0) return -1;        //プロセス処理エラー時
    if (ClearDrawScreen() != 0)return -1;       //画面クリア処理エラー時
    GetHitKeyStateAll_2();                      //キー入力処理を行う
 
    return 0;
}
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR IpCmdLine, int nCmdShow) {
   
    ChangeWindowMode(TRUE);                     //ウィンドウモード
 
    ///初期化と裏画面化
    if(DxLib_Init() == -1 || SetDrawScreen(DX_SCREEN_BACK) != 0)
        return -1;
 
    while (Process_Loop() == 0) {//メインループ
        switch (func_state) {
           
            case 0:
                load();         //ロード
                first_ini();    //初期化
                func_state = 100;
                break;
            case 100:
                graph_main();   //描画
                break;
            default:
                printfDx("不明なfunc_state\n");
                break;         
        }
        if (CheckStateKey(KEY_INPUT_ESCAPE) == 1)   break;
        ///裏画面反映
        ScreenFlip;
    }
 
    DxLib_End();
    return 0;
}



load.cpp
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
#include "global.h"
 
void load() {
    ///MMDモデル読み込み
    MMDHandle = MV1LoadModel("Material/MMD/アールビット風博麗霊夢Ver2.1/アールビット風博麗霊夢 Type-Nlong.pmx");
 
    ///ボード画像読み込み
    img_board[10] = LoadGraph("Material/Pic/board/10.png");
    img_board[11] = LoadGraph("Material/Pic/board/11.png");
    img_board[12] = LoadGraph("Material/Pic/board/12.png");
    img_board[20] = LoadGraph("Material/Pic/board/20.png");
}


graph.cpp
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "global.h"
 
void graph_mmd() {
    MMD();
}
 
void graph_board() {
    DrawGraph(  0,   0, img_board[10], FALSE);
    DrawGraph(  0,  16, img_board[11], FALSE);
    DrawGraph(  0, 464, img_board[12], FALSE);
    DrawGraph(416,   0, img_board[20], FALSE);
}
 
void graph_main() {
    graph_board();
    graph_mmd();
}



MMD.cpp
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
///MMDモデル制御
#include <DxLib.h>
#include "global.h"
 
void MMD(){
 
    int AttachIndex;
    int angleX = 0, angleY = 0;
   
    float TotalTime, PlayTime;
 
    ///カメラ範囲(0.1~100)
    SetCameraNearFar(0.1f, 300.f);
 
    ///カメラ設置
    SetCameraPositionAndTarget_UpVecY(VGet(0, 10, -150), VGet(0.0f, 20.0f, 50.0f));
 
    ///アニメーションアタッチ
    AttachIndex = MV1AttachAnim(MMDHandle, 0, -1, FALSE);
 
    ///アニメーションの時間を取得、初期化
    TotalTime = MV1GetAnimTotalTime(MMDHandle, AttachIndex);
    PlayTime = 30.0f;
 
 
    while (!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen()) {
 
        ///再生時間
        PlayTime += 0.2f;
        if (PlayTime >= TotalTime)  PlayTime = 30.0f;
        MV1SetAttachAnimTime(MMDHandle, AttachIndex, PlayTime);
 
        ///モデル角度調整
        angleY = 135;
        MV1SetRotationXYZ(MMDHandle, VGet(0, angleY, 0));
 
        ///自機MMD配置
        //MV1SetPosition(MMDHandle, VGet(ch.x, ch.y, 0));
 
        //モデル描画
        MV1DrawModel(MMDHandle);
    }
}

Name: みけCAT
[URL]
伝説なるハッカー(680,549 ポイント)
Date: 2017年9月03日(日) 19:06
No: 2
(ONLINE)

 Re: ボード画像が表示されない

「あちこちにDXライブラリ3大処理がある」という書いてはいけない処理をしていますね。
MMD関数の中だけでループが回っているので、その外にあるボードの描画は実行されていません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Name: 白紙
[URL]
Date: 2017年9月03日(日) 21:30
No: 3
(OFFLINE)

 Re: ボード画像が表示されない

MMD関数中にある3大処理と重複していたwhile文を見落としていました。

主題の質問については解決しましたが、別の件についてお伺いしたいです。
下のコードの部分をどうにかループさせたいのですが、条件付けをどうしようかと悩んでいます。
ループを外した状態だとMMDモデルが上に吹っ飛んでいく羽目になりました。

while文でループさせようと考えています。(for文だとややこしくなりそう?)


コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        ///再生時間
        PlayTime += 0.2f;
        if (PlayTime >= TotalTime)  PlayTime = 30.0f;
        MV1SetAttachAnimTime(MMDHandle, AttachIndex, PlayTime);
 
        ///モデル角度調整
        angleY = 135;
        MV1SetRotationXYZ(MMDHandle, VGet(0, angleY, 0));
 
        ///自機MMD配置
        //MV1SetPosition(MMDHandle, VGet(ch.x, ch.y, 0));
 
        //モデル描画
        MV1DrawModel(MMDHandle);

Name: 白紙
[URL]
Date: 2017年9月04日(月) 01:18
No: 4
(OFFLINE)

 Re: ボード画像が表示されない

自己解決できました。
MMD.cppのコードを分けて、前半部分をload.cpp、後半部分(上記コード)をgraph.cppに配置したらうまくいきました。

Name: 白紙
[URL]
Date: 2017年9月04日(月) 01:18
No: 5
(OFFLINE)

 Re: ボード画像が表示されない

[解決!]

(解決タグ設置)


Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[12人]