gpt4 book ai didi

c++ - DirectX 新手,自定义类已损坏

转载 作者:太空宇宙 更新时间:2023-11-04 11:57:23 25 4
gpt4 key购买 nike

我是 Stack Overflow 的新手,虽然我已经编写了几年的基础和中级 C++ 程序,但我从未能够超越它。我最近通过从 www.planetchili.net 获得的框架了解了如何在 DirectX 中工作。我正在尝试为将演示 AI 和寻路的编程类(class)开发类似于小行星类型的游戏。玩家将不会炸毁小行星,而是与其他三角船作战。

该框架带有一个 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();
}

最佳答案

Game 类正在使用的 D3DGraphics 对象在内存中与 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 )
{}

您现在必须在 Ship 类中使用 gfx-> 而不是使用 gfx.。 IE。 gfx->PutPixel() 而不是 gfx.PutPixel()

一点旁注,尝试将您的变量名称更改为使用常用匈牙利表示法提供更多信息的名称:http://en.wikipedia.org/wiki/Hungarian_notation

关于c++ - DirectX 新手,自定义类已损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15621652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com