DirectX的新功能,自定义类已损坏

时间:2013-03-25 18:02:57

标签: c++ directx

我是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();
}

1 个答案:

答案 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