我是 Stack Overflow 的新手,虽然几年来我一直在编写基本和中级 C++ 程序,但我一直无法超越。我最近通过从 www.planetchili.net 获得的框架了解了如何在 DirectX 中工作。我正在尝试为将演示 AI 和寻路的编程类开发类似于 Asteroid 类型游戏的东西。玩家不会炸毁小行星,而是与其他三角船进行狗斗。
该框架带有一个 Game 对象,我通过它完成了大部分工作。但是,我意识到我可能应该为 Ship 编写自己的类,其中包含执行 Ship 相关操作所需的变量,例如绘制船和跟踪位置和得分等统计数据。
但是,我遇到了一个似乎是 Inception 级悖论的问题。该框架使用称为 D3Dgraphics 的东西,它声明并使用称为 gfx 的 D3D 对象。为了使用 Ship 中的 D3D 绘图功能,我包含了 D3D 库并在 Ship.h 中创建了一个 D3D 对象。
我可以在 Game 中声明和实例化 Ship 对象,但是直接在游戏中使用的绘图功能在通过 ship 对象使用时不起作用。我不知道为什么会这样,但我相信这可能是因为我编织了这个令人讨厌的网络。被反对的 Game 使用了一个 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();
}