#1
by にほ » 5年前
どうも、いつもお世話になっております。
今回、DXライブラリでゲームを作っているのですが、画像処理で不具合が発生しています。
LoadGraph関数で読み込んだ画像のハンドルを、Imageクラスのマップに格納して扱うのですが、このマップから取得したハンドルでDrawGraph関数を呼び出しても画像が描画されません。
以下コードです。
コード:
#include <DxLib.h>
#include "Image.h"
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
ChangeWindowMode(TRUE);
DxLib_Init();
Image::Instance()->Load();
DrawGraph(0, 0, Image::Instance()->getImage("bar"), TRUE);
WaitKey();
DxLib_End();
}
コード:
#pragma once
#include <string>
#include <map>
#include <string.h>
using namespace std;
class Image {
private:
map<string, int> mImageMap;
Image() = default;
~Image() = default;
int allLoadNum = 0;
void MyLoadGraph(const char *fileName, string tag);
public:
static Image *Instance();
void Load();
int getAllLoadNum();
int getImage(string key);
};
コード:
#include <DxLib.h>
#include "Image.h"
Image* Image::Instance() {
static Image ins;
return &ins;
}
void Image::MyLoadGraph(const char *fileName, string tag) {
char str[64] = "image\\";
strcat_s(str, fileName);
ErrorLogAdd(str);
ErrorLogAdd("\n");
int HANDLE = LoadGraph(str);
mImageMap[tag] = HANDLE;
allLoadNum++;
}
int Image::getAllLoadNum() {
return allLoadNum;
}
int Image::getImage(string key) {
auto it = mImageMap.find(key);
if (mImageMap.end() == it) {
return -1;
}
else {
it->second;
}
}
void Image::Load() {
char str[32];
MyLoadGraph("loadBar.png", "bar");
MyLoadGraph("image.png", "image.image");
MyLoadGraph("image - コピー.png", "image.copy");
for (int i = 0; i < 100; i++) {
sprintf_s(str, "image - コピー (%d).png", i);
MyLoadGraph(str, "image.copy." + i);
}
}
マップを使ってデータを管理するのは今回が初めてのため、なにかやってはいけない処理をしてしまっているのでしょうか?
ご教授いただけると幸いです。
どうも、いつもお世話になっております。
今回、DXライブラリでゲームを作っているのですが、画像処理で不具合が発生しています。
LoadGraph関数で読み込んだ画像のハンドルを、Imageクラスのマップに格納して扱うのですが、このマップから取得したハンドルでDrawGraph関数を呼び出しても画像が描画されません。
以下コードです。
[code]#include <DxLib.h>
#include "Image.h"
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
ChangeWindowMode(TRUE);
DxLib_Init();
Image::Instance()->Load();
DrawGraph(0, 0, Image::Instance()->getImage("bar"), TRUE);
WaitKey();
DxLib_End();
}[/code]
[code]#pragma once
#include <string>
#include <map>
#include <string.h>
using namespace std;
class Image {
private:
map<string, int> mImageMap;
Image() = default;
~Image() = default;
int allLoadNum = 0;
void MyLoadGraph(const char *fileName, string tag);
public:
static Image *Instance();
void Load();
int getAllLoadNum();
int getImage(string key);
};[/code]
[code]#include <DxLib.h>
#include "Image.h"
Image* Image::Instance() {
static Image ins;
return &ins;
}
void Image::MyLoadGraph(const char *fileName, string tag) {
char str[64] = "image\\";
strcat_s(str, fileName);
ErrorLogAdd(str);
ErrorLogAdd("\n");
int HANDLE = LoadGraph(str);
mImageMap[tag] = HANDLE;
allLoadNum++;
}
int Image::getAllLoadNum() {
return allLoadNum;
}
int Image::getImage(string key) {
auto it = mImageMap.find(key);
if (mImageMap.end() == it) {
return -1;
}
else {
it->second;
}
}
void Image::Load() {
char str[32];
MyLoadGraph("loadBar.png", "bar");
MyLoadGraph("image.png", "image.image");
MyLoadGraph("image - コピー.png", "image.copy");
for (int i = 0; i < 100; i++) {
sprintf_s(str, "image - コピー (%d).png", i);
MyLoadGraph(str, "image.copy." + i);
}
}[/code]
マップを使ってデータを管理するのは今回が初めてのため、なにかやってはいけない処理をしてしまっているのでしょうか?
ご教授いただけると幸いです。