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

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

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

#1

投稿記事 by 白紙 » 6年前

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

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


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


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

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

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

main.cpp

コード:

#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

コード:

#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

コード:

#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

コード:

///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);
	}
}


アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

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

#2

投稿記事 by みけCAT » 6年前

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

白紙

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

#3

投稿記事 by 白紙 » 6年前

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

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

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

コード:

		///再生時間
		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);

白紙

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

#4

投稿記事 by 白紙 » 6年前

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


返信

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