2014-11-18 2 views
0

Я ученый по программированию компьютерных игр, в настоящее время изучаю C++. Я пытаюсь получить доступ к частному текстуре Texture2D и Vector 2 в файле .h из файла .cpp, чтобы указать позицию объекта и изображение.Доступ к частным экземплярам классов из другого класса

Это файл Player.cpp

#include "Player.h" 
#include <sstream> 


Player::Player(int argc, char* argv[]) : Game(argc, argv), _cPlayerSpeed(0.1f), _cPlayerFrameTime(250) 
{ 
    //Player Inits 
_playerDirection; 
_playerFrame = 0; 
_playerCurrentFrameTime = 0; 
_playerSpeedMultiplier = 1.0f; 

//Init of Important Game Aspects 
Graphics::Initialise(argc, argv, this, 1024, 768, false, 25, 25, "Genocide: Remastered", 60); 
Input::Initialise(); 
Graphics::StartGameLoop(); //Start of Game Loop, calls Update and Draw in game loop. 
} 


Player::~Player() 
{ 
} 

void Player::Input(int elapsedTime, Input::KeyboardState* state) 
{ 
    // Checks for directional keys pressed 
    if (state->IsKeyDown(Input::Keys::D)) 
    { 
     _playerPosition->X += _cPlayerSpeed * elapsedTime; 
    } 

} 



/// <summary> All content should be loaded in this method. </summary> 
void Player::LoadContent() 
{ 
    _playerPosition = new Vector2(); 
    _playerTexture = new Texture2D(); 
    _playerTexture->Load(" ", false); 
    _playerSourceRect = new Rect(0.0f, 0.0f, 0, 0); 
} 

/// <summary> Called every frame - update game logic here. </summary> 
void Player::Update(int elapsedTime) 
{ 

} 

/// <summary> Called every frame - draw game here. </summary> 
void Player::Draw(int elapsedTime) 
{ 

} 

Это Player.h

#pragma once 

#ifdef WIN32 
    #ifndef _DEBUG 
     #pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup") 
    #endif 
#endif 

#include "S2D/S2D.h" 
using namespace S2D; 

class Player : public Game 
{ 
public: 
    Player(int argc, char* argv[]); 
    ~Player(); 
    /// <summary> All content should be loaded in this method. </summary> 
    void virtual LoadContent(); 

    /// <summary> Called every frame - update game logic here. </summary> 
    void virtual Update(int elapsedTime); 

    /// <summary> Called every frame - draw game here. </summary> 
    void virtual Draw(int elapsedTime); 

private: 
    Vector2* _playerPostion; 
    Rect* _playerSourceRect; 
    Texture2D* _pacmanTexture; 
    const float _cPlayerSpeed; 
    const int _cPlayerFrameTime; 

    int _playerDirection; 
    int _playerFrame; 
    int _playerCurrentFrameTime; 
    float _playerSpeedMultiplier; 

    void Input(int elapsedTime, Input::KeyboardState* state); 
    void CheckPaused(Input::KeyboardState* state, Input::Keys pauseKey); 
    void CheckViewportCollision(); 
    void UpdatePlayer(); 
}; 

Я буквально скопировал и вставил что-то я работал с моим преподавателем и изменен переменной, типом и заявлением о создании экземпляра и его произведениями. Любопытно, почему у меня нет. Помощь будет высоко оценена.

Большое спасибо,

Ryan.

+2

Какая ошибка? –

+0

'_playerPosition': необъявленный идентификатор, то же самое с '_playerTexture' –

+0

Позаботьтесь, используя '_lowercase'. '_UPPERCASE' зарезервирован в C++, как' _lowercase', если используется в области файлов. В настоящий момент все в порядке, просто позаботьтесь. – Bathsheba

ответ

4

В заголовке Texture2D* называется _pacmanTexture, тогда как в вашей реализации вы его назвали _playerTexture. Аналогично, в заголовке вы набрали _playerPosition.

+0

Это неловко: -О спасибо, сэр :-)) –

-1

Обычный способ предоставить доступ к частным ресурсам класса другому классу - это добавить общедоступные методы доступа (getter, setter).

Смежные вопросы