オブジェクト(四角)の色の変更ができない
Posted: 2017年12月26日(火) 15:31
閲覧ありがとうございます。今私は、クラスの設計を勉強しているのですが、以下の内容でつまづいています。
CircleクラスとBoxクラスのコンストラクタで色の指定をし、MY_Draw~()で実際に描画しているのですが、Boxクラスの色指定処理部分がうまく反映されません。Circleは正しく描画されています。回答お待ちしています。
VC++2017
※初めてのクラス設計です。
※headerはすべてpublicで、宣言のみです
CircleクラスとBoxクラスのコンストラクタで色の指定をし、MY_Draw~()で実際に描画しているのですが、Boxクラスの色指定処理部分がうまく反映されません。Circleは正しく描画されています。回答お待ちしています。
VC++2017
※初めてのクラス設計です。
※headerはすべてpublicで、宣言のみです
//Figure.cpp
#include "Figure.h"
#include "DxLib.h"
Box::Box()
{
x = 0,
y = 0,
w = 0,
h = 0,
life = 0,
color = (GetColor(255, 255, 255));
}
Box::Box(int _x ,int _y , int _w , int _h , int _l ,int _c )
{
x = _x;
y = _y;
w = _w;
h = _h;
life = _l;
switch (_c)
{
//色指定処理
case 1: color = GetColor(255, 0, 0); break; //1は赤
case 2: color = GetColor(0, 255, 0); break; //2は青
case 3: color = GetColor(0, 0, 255); break; //3は緑
case 4: color = GetColor(0, 0, 255); break; //4は緑
case 5: color = GetColor(0, 0, 255); break; //5は緑
case 6: color = GetColor(0, 0, 255); break; //6は緑
case 7: color = GetColor(0, 0, 255); break; //7は緑
case 8: color = GetColor(0, 0, 255); break; //8は緑
case 9: color = GetColor(0, 0, 255); break; //9は緑
case 0: color = GetColor(255, 255, 255); break; //0は白
}
}
bool Box::BoxCollision(const Box& b1, const Box& b2)
{
if (b1.x < b2.x + b2.w &&
b2.x < b1.x + b1.w &&
b1.y < b2.y + b2.h &&
b2.y < b1.y + b1.h)
{
return true;
}
return false;
}
void Box::My_DrawBox(Box& b, int& c, bool f)
{
c = color;
DrawBox(b.x, b.y, b.x + b.w, b.y + b.h, c, f);
}
Circle::Circle()
{
x = 0;
y = 0;
r = 0;
color = GetColor(255, 255, 255);
}
Circle::Circle(float _x, float _y, float _r, int _c)
{
x = _x;
y = _y;
r = _r;
switch (_c)
{
case 1: color = GetColor(255, 0, 0); break; //1は赤
case 2: color = GetColor(0, 255, 0); break; //2は青
case 3: color = GetColor(0, 0, 255); break; //3は緑
case 0: color = GetColor(255, 255, 255); break; //デフォルトは白
}
}
void Circle::My_DrawCircle(Circle& b, int& c, bool f)
{
c = color;
DrawCircleAA(b.x, b.y, b.r,32, c, f);
}
//Main.cpp
#include "DxLib.h"
#include "Input.h"
#include "Figure.h"
const int
SCREEN_WIDIH = 960,
SCREEN_HEIGHT = 540;
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
//ログ消し
SetOutApplicationLogValidFlag(FALSE);
//ウインドウタイトルを変更
SetMainWindowText("コリジョンテスト");
//画面サイズ変更
SetGraphMode(SCREEN_WIDIH, SCREEN_HEIGHT, 32);
//ウィンドウモード変更と初期化と裏画面設定
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK);
const int X_size = 10;
Box box[X_size];
for (int i = 0; i < X_size; ++i)
{
box[i].x = 50 * i;
box[i].y = 50;
box[i].w = 50;
box[i].h = 50;
box[i].life = 100;
box[i].color = 2;
}
Box Bar(100, 100, 100, 100,1,1);
Circle ball(600, 300, 20, 3);
while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0)
{
Updata_Key();
if (Key(KEY_INPUT_ESCAPE) == 1)
{
break;
}
if (Key(KEY_INPUT_RIGHT) >= 1)
{
Bar.x += 5;
}
if (Key(KEY_INPUT_LEFT) >= 1)
{
Bar.x -= 5;
}
if (Key(KEY_INPUT_UP) >= 1)
{
Bar.y -= 5;
}
if (Key(KEY_INPUT_DOWN) >= 1)
{
Bar.y += 5;
}
Bar.My_DrawBox(Bar,Bar.color, true);
for (int i = 0; i < X_size; ++i)
{
if (Bar.BoxCollision(box[i], Bar) == true)
{
box[i].life -= 1;
}
if (box[i].life > 0)
{
box[i].My_DrawBox(box[i],box[i].color ,true);
}
}
ball.My_DrawCircle(ball, ball.color,true);
}
DxLib_End();
return 0;
}