1

私は Stack Overflow の初心者であり、基本レベルおよび中級レベルの C++ プログラムを数年間書いてきましたが、それ以上のことはできませんでした。最近、www.planetchili.net から入手したフレームワークを使用して、DirectX で作業する方法を学びました。私は、AI と経路探索を実演するプログラミング クラス用に、小惑星のタイプのゲームに似たものを開発しようとしています。小惑星を爆破する代わりに、プレーヤーは他の三角形の船と戦う犬になります。

このフレームワークには、私がほとんどの作業を行ってきた Game オブジェクトが付属しています。しかし、船の描画や位置やスコアなどの統計情報の追跡など、船関連のアクションを実行するために必要な変数を含む船用の独自のクラスを作成する必要があることに気付きました。

しかし、インセプション レベルのパラドックスのような問題に直面しています。フレームワークは D3Dgraphics と呼ばれるものを使用し、gfx と呼ばれる D3D オブジェクトを宣言して使用します。Ship で D3D 描画機能を利用するために、D3D ライブラリを含め、Ship.h に D3D オブジェクトを作成しました。

ゲームで船オブジェクトを宣言してインスタンス化することはできますが、ゲームで直接使用すると機能する描画関数が、船オブジェクトを介して使用すると機能しません。これがなぜなのかはわかりませんが、私が織り上げたこの厄介なウェブのせいかもしれません. オブジェクト化されたゲームは、フレームを描画して破棄するように見える Go() と呼ばれる関数を持つ D3D オブジェクトを使用します。Ship オブジェクトは D3D オブジェクトを使用しますが、ゲームの Go() メソッドにアクセスできません。次に、ゲームは 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();
}
4

1 に答える 1

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.使用する必要があります。の代わりにIE 。gfx->Shipgfx->PutPixel()gfx.PutPixel()

ちょっとした補足として、変数名を、一般的に使用されているハンガリー語表記法を使用してより多くの情報を提供するものに変更してみてください: http://en.wikipedia.org/wiki/Hungarian_notation

于 2013-03-27T13:06:33.963 に答える