我是Stack Overflow的新手,虽然我已经编写了几年的基础和中级C ++程序,但我从来没有能够超越它。我最近通过我从www.planetchili.net获得的框架了解了如何在DirectX中工作。我正在尝试开发类似于小行星类型游戏的类似游戏,用于演示AI和寻路的编程类。玩家不会炸毁小行星,而是与其他三角形船只打斗。
该框架附带了一个Game对象,我通过该对象完成了大部分工作。但是,我意识到我应该为Ship编写我自己的类,它将包含执行Ship相关操作所需的变量,例如绘制船只和跟踪位置和分数等统计信息。
但是,我遇到的问题似乎就像一个初始级别的悖论。该框架使用称为D3Dgraphics的东西,它声明并使用名为gfx的D3D对象。为了在Ship中使用D3D绘图功能,我包含了D3D库并在Ship.h中创建了一个D3D对象。
我可以在游戏中声明并实例化Ship对象,但是直接在游戏中使用的绘图函数在通过ship对象使用时不起作用。我不知道为什么会这样,但我相信这可能是因为我编织过的令人讨厌的网页。 Game oppjected使用了一个D3D对象,它有一个叫做Go()的函数,它似乎是绘制和销毁帧,Ship对象使用D3D对象,但是没有访问Game的Go()方法,然后Game使用Ship。
这是我的一些代码...请理顺我。
Ship.cpp
//Ship.cpp
#include "Ship.h"
#include <math.h>
enter code here
//Constructor
Ship::Ship(HWND hWnd)
: gfx ( hWnd )
{}
void Ship::drawLine(int x1, int x2, int y1, int y2){
//Draws a line using gfx.putPixel- This function works perfectly if declared and used directly in Game.cpp
}
Ship.h
//Ship.h
#pragma once
#include "D3DGraphics.h"
#include "Keyboard.h"
#include <vector>
class Ship{
private:
D3DGraphics gfx;
public:
Ship::Ship(HWND hWnd); //Default Constructor
};
//Game.h
#pragma once
#include "Ship.h"
#include "D3DGraphics.h"
#include "Keyboard.h"
class Game
{
public:
Game( HWND hWnd,const KeyboardServer& kServer );
void Go();
//Member functions
private:
void ComposeFrame();
private:
D3DGraphics gfx;
KeyboardClient kbd;
Ship psp;
};
//Game.cpp
#include "Game.h"
#include <math.h>
Game::Game( HWND hWnd,const KeyboardServer& kServer )
: gfx ( hWnd ),
psp(hWnd),
kbd( kServer )
{}
void Game::Go()
{
gfx.BeginFrame();
ComposeFrame();
gfx.EndFrame();
}
void Game::ComposeFrame()
{
psp.drawShip();
}
答案 0 :(得分:1)
D3DGraphics
类正在使用的Game
对象与Ship
D3DGraphics
对象在内存中的对象不同。您必须使用指针来确保使用相同的对象进行绘制,将其更改为这些片段:
class Ship{
private:
D3DGraphics *gfx;
public:
Ship::Ship(D3DGraphics *pGfx); //Default Constructor
};
-
//Constructor
Ship::Ship(D3DGraphics *pGfx)
{
gfx = pGfx;
}
-
Game::Game( HWND hWnd,const KeyboardServer& kServer )
: gfx ( hWnd ),
psp(gfx),
kbd( kServer )
{}
您现在必须在gfx.
课程中使用gfx->
,而不是使用Ship
。 I.E. gfx->PutPixel()
代替gfx.PutPixel()
。
请注意,尝试将变量名称更改为使用常用匈牙利表示法提供更多信息的内容:http://en.wikipedia.org/wiki/Hungarian_notation