#1
by もんの » 1年前
現在Dxライブラリを用いてSTGを制作しています。言語はC++です。
画像を描画できないという質問は検索したところ多く見られましたが、自分の場合はそれらとは少し状況が異なるため質問させていただきました。具体的には、新しく保存した画像がDrawGraphなどで描画できなくなってしまいました。これまで(11月末)にファイルに保存しておいた画像は描画できるのですが、同じファイル内に新しく保存した画像は全く描画できません。拡張子は間違えていないで、画像に問題があるのかと思い、以前保存した画像と同じものを名前を変えて同じファイル内に保存したのですが、それも描画できません。以前から保存しておいた画像は描画できるので、コード自体に誤りはないと思うのですが、何が原因で描画できないのか分かりません。ご助言をいただけると幸いです。
コード:
#include "DxLib.h"
#include "ENEMY.h"
#include "define.h"
#include "CONTROLALL.h"
#include <math.h>
ENEMY::ENEMY() {
LoadDivGraph("enemy2.png", 12, 3, 4, 32, 32, gh);
esgh = LoadGraph("star3.png"); //
}
void ENEMY::MOVE() {
CONTROL& ControL = CONTROL::GetInstance();
double px, py, psx, psy;
ControL.GetPLAYERPosition(&px, &py);
if (in_time < g_count && g_count < stop_time && deadflag == false) {
if (x < px) x += 1, result = 6;
if (x > px) x -= 1, result = 3;
if (y < py) y += 1, result = 0;
if (y > py) y -= 1, result = 9;
}
}
void ENEMY::SHOT() {
CONTROL& ControL = CONTROL::GetInstance();
double px, py;
escounter++;
if (esflag == 0) {
if (escounter%6==0 && deadflag == false) {
ControL.GetPLAYERPosition(&px, &py);
esx = x + 15; //弾の初期x座標
esy = y + 15; //弾の初期y座標
sx = (x + 32) / 2;
sy = (y + 32) / 2;
bx = (px + 32) / 2;
by = (py + 32) / 2;
sbx = bx - sx;
sby = by - sy;
sb = sqrt(sbx * sbx + sby * sby);
ESX = sbx / sb * 4;
ESY = sby / sb * 4;
esflag = 1;
}
}
}
void ENEMY::DRAW() {
CONTROL& ControL = CONTROL::GetInstance();
double px, py;
ControL.GetPLAYERPosition(&px, &py);
if (esflag == 1) {
esx += ESX;
esy += ESY;
if (esy < -150 || esy > 450 || esx < -150 || esx > 450) {
esflag = 0;
}
else if (((esx > px && esx < px + 32) || (esx - 16 < px && esx + 16 > px)) &&
((esy - 16 > py && esy < py + 48) || (esy - 16 < py && esy + 16 > py))) {
esflag = 0;
life--;
}
DrawRotaGraph(esx, esy, 0.1, 0.0, esgh, TRUE);
}
int Green = GetColor(0, 255, 0); // 緑の色コードを取得
DrawFormatString(500, 100, Green, "LIFE[% d]", life); // 文字を描画する
if (in_time < g_count && g_count <= out_time && deadflag == false) {
DrawGraph(x, y, gh[result], TRUE);
}
else if (g_count > out_time && deadflag == false) {
DrawGraph(x, y, gh[10], TRUE);
}
}
void ENEMY::GetPosition(double* ex, double* ey) {
*ex = this->x;
*ey = this->y;
}
bool ENEMY::ALL() {
MOVE();
DRAW();
SHOT();
count++;
return endflag;
}
現在Dxライブラリを用いてSTGを制作しています。言語はC++です。
画像を描画できないという質問は検索したところ多く見られましたが、自分の場合はそれらとは少し状況が異なるため質問させていただきました。具体的には、新しく保存した画像がDrawGraphなどで描画できなくなってしまいました。これまで(11月末)にファイルに保存しておいた画像は描画できるのですが、同じファイル内に新しく保存した画像は全く描画できません。拡張子は間違えていないで、画像に問題があるのかと思い、以前保存した画像と同じものを名前を変えて同じファイル内に保存したのですが、それも描画できません。以前から保存しておいた画像は描画できるので、コード自体に誤りはないと思うのですが、何が原因で描画できないのか分かりません。ご助言をいただけると幸いです。
[code]
#include "DxLib.h"
#include "ENEMY.h"
#include "define.h"
#include "CONTROLALL.h"
#include <math.h>
ENEMY::ENEMY() {
LoadDivGraph("enemy2.png", 12, 3, 4, 32, 32, gh);
esgh = LoadGraph("star3.png"); //
}
void ENEMY::MOVE() {
CONTROL& ControL = CONTROL::GetInstance();
double px, py, psx, psy;
ControL.GetPLAYERPosition(&px, &py);
if (in_time < g_count && g_count < stop_time && deadflag == false) {
if (x < px) x += 1, result = 6;
if (x > px) x -= 1, result = 3;
if (y < py) y += 1, result = 0;
if (y > py) y -= 1, result = 9;
}
}
void ENEMY::SHOT() {
CONTROL& ControL = CONTROL::GetInstance();
double px, py;
escounter++;
if (esflag == 0) {
if (escounter%6==0 && deadflag == false) {
ControL.GetPLAYERPosition(&px, &py);
esx = x + 15; //弾の初期x座標
esy = y + 15; //弾の初期y座標
sx = (x + 32) / 2;
sy = (y + 32) / 2;
bx = (px + 32) / 2;
by = (py + 32) / 2;
sbx = bx - sx;
sby = by - sy;
sb = sqrt(sbx * sbx + sby * sby);
ESX = sbx / sb * 4;
ESY = sby / sb * 4;
esflag = 1;
}
}
}
void ENEMY::DRAW() {
CONTROL& ControL = CONTROL::GetInstance();
double px, py;
ControL.GetPLAYERPosition(&px, &py);
if (esflag == 1) {
esx += ESX;
esy += ESY;
if (esy < -150 || esy > 450 || esx < -150 || esx > 450) {
esflag = 0;
}
else if (((esx > px && esx < px + 32) || (esx - 16 < px && esx + 16 > px)) &&
((esy - 16 > py && esy < py + 48) || (esy - 16 < py && esy + 16 > py))) {
esflag = 0;
life--;
}
DrawRotaGraph(esx, esy, 0.1, 0.0, esgh, TRUE);
}
int Green = GetColor(0, 255, 0); // 緑の色コードを取得
DrawFormatString(500, 100, Green, "LIFE[% d]", life); // 文字を描画する
if (in_time < g_count && g_count <= out_time && deadflag == false) {
DrawGraph(x, y, gh[result], TRUE);
}
else if (g_count > out_time && deadflag == false) {
DrawGraph(x, y, gh[10], TRUE);
}
}
void ENEMY::GetPosition(double* ex, double* ey) {
*ex = this->x;
*ey = this->y;
}
bool ENEMY::ALL() {
MOVE();
DRAW();
SHOT();
count++;
return endflag;
}
[/code]