Как мне запустить весь файл CPP из другого?

0

Верно, ребята, я здесь в серьезном рассоле.

Я делаю 2D-игру для университета, и это не должно быть сложно каким-либо образом. У меня есть опыт создания игр в С# XNA и я пытаюсь использовать похожие методы. Единственное различие, которое у меня может быть для вас, это то, что я использую движок игры S2D, написанный моим преподавателем, который имеет сходство с XNA.

По сути моя проблема в том, что у меня есть два файла заголовка (EscapeThePrison.h и Player.h) и три файла cpp (main.cpp, World.cpp и Player.cpp).

В main.cpp у меня просто есть точка входа в игру.

Однако EscapeThePrison.cpp является единственным другим исполняемым файлом. Этот файл должен (пока) рисовать фон. Это работает.

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

Во всяком случае, я в основном должен иметь возможность запускать весь файл player.cpp, так что чертовски все будет работать. Ниже мой код.

EscapeThePrison.h:

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

class EscapeThePrison : public Game
{
private:
    Vector2* BGPosition;
    Rect* BGRect;
    Texture2D* BGTexture;

public:
    EscapeThePrison(int argc, char* argv[]);
    virtual ~EscapeThePrison();
    void virtual LoadContent();
    void virtual Update(int elapsedTime);
    void virtual Draw(int elapsedTime);
};

Player.h:

#pragma once
#include "S2D\S2D.h"
using namespace S2D;


struct User
{
    Vector2* pos;
    Rect* rect;
    Texture2D* texture;

};


class Player
{

private:
    User* user;


public:
    Player(int argc, char*argv[]);
    virtual ~Player();
    void virtual LoadContent();
    void virtual Update(int elapsedTime);
    void virtual Draw(int elapsedTime);

};

Main.cpp (запись для игры)

#include "EscapeThePrison.h"
#include "Player.h"
int main(int argc, char* argv[]) 
{
    EscapeThePrison* game = new EscapeThePrison(argc, argv);

}

World.cpp (рабочий файл)

#pragma once
#include "EscapeThePrison.h"
#include "Player.h"

EscapeThePrison::EscapeThePrison(int argc, char*argv[]) : Game(argc, argv)
{
    Graphics::Initialise(argc, argv, this, 1080, 720 , false, 25, 25, "EscapeThePrison", 60);
    Input::Initialise();
    Graphics::StartGameLoop();

}

EscapeThePrison::~EscapeThePrison()
{
    delete BGTexture;
    delete BGRect;
}

void EscapeThePrison:: LoadContent()
{
    BGTexture = new Texture2D();
    BGTexture->Load("Images/tiles.jpg", false);
    BGPosition = new Vector2(0.0f,0.0f);
    BGRect = new Rect(0.0f, 0.0f, 1080, 720);
}

void EscapeThePrison:: Update(int elapsedTime)
{

}

void EscapeThePrison:: Draw(int elapsedTime)
{
    SpriteBatch::BeginDraw();
    SpriteBatch::Draw(BGTexture, BGPosition, BGRect);

    SpriteBatch::EndDraw();

}

Player.cpp (нерабочий)

#include "Player.h"
#include <iostream>
using namespace std;
Player::Player(int argc, char* argv[])
{
    user = new User();
}

Player::~Player()
{
    delete user->texture;
    delete user->rect;
}

void Player:: LoadContent()
{
    user->texture = new Texture2D();
    user->texture->Load("Images/PlayerImage.png", false);
    user->pos = new Vector2(100.0f, 100.0f);
    user->rect = new Rect(0.0f, 0.0f, 39, 79);
}

void Player:: Update(int elapsedTime)
{
    cout<< "output";
}

void Player:: Draw(int elapsedTime)
{
    SpriteBatch::BeginDraw();
    SpriteBatch::Draw(user->texture, user->pos, user->rect);
    SpriteBatch::EndDraw();
}

Правильно, теперь код не работает, я расскажу вам о том, что я пробовал.

Я связался с моим лектором об этом, и все, что он смог сказать, не будучи конкретным, в значительной степени использовал Player-> Update(); который я пробовал, но Intellisense выделяет "->" и говорит, что он ожидает идентификатора.

Действуя по инициативе, я попытался использовать 'Player :: Update();' но он сказал мне, что не могу ссылаться на него из статического контекста. Я удалил скобки, и это позволило, но создание приложения все равно ничего не делало.

Я тоже не полный идиот, и я сделал пользователь, который не рисовал за задним фоном, комментируя код рисования для фона. Еще ничего.

Мне действительно нужна помощь в этом, поэтому никаких саркастических ответов, пожалуйста. Надеюсь, это достаточно ясно.

  • 4
    Вы не "запускаете файл .cpp"
  • 0
    Неясно, где находится ваш экземпляр Player . Можете ли вы показать это, и где вы пытаетесь вызвать Update ?
Показать ещё 9 комментариев
Теги:

2 ответа

1
Лучший ответ

Вызовите обновление для экземпляра Player, а не класса Player

  • 0
    Так что это будет означать вызов 'user-> Update ();'?
  • 0
    Нет. Пользователь является членом вашего класса Player. Вы создаете экземпляр / указатель Player с Player * mainPlayer = new Player (argc, argv). Сделайте это где-нибудь выше, как в вашем классе EscapeThePrison. Затем вы можете делать такие вещи, как mainPlayer-> Update ();
Показать ещё 5 комментариев
4

У вас нет никакого кода для создания Player или вызова функций на нем; вам нужно будет добавить этот код. Функции не просто магически вызываются автономно на несуществующих объектах.

Кстати, вы нарушаете правило из трех, поэтому ваши классы имеют разрушительные/опасные ошибки без двойки. Либо добавьте конструкторы копирования, либо, что еще лучше, отбросьте все это ручное динамическое распределение.

Я связался с моим лектором об этом, и все, что он смог сказать, не будучи конкретным, в значительной степени использовал Player-> Update(); [..] Я удалил скобки, и это разрешило, но создание приложения все равно ничего не делало

Программирование путем угадывания не работает. Обратитесь к своему профессору еще раз, и на этот раз у него более трех-минутного разговора по электронной почте: сядьте на полчаса или больше, и попросите его объяснить вам, как структурировать вашу программу C++. Это то, за что он заплатил.

  • 0
    Код для Player в значительной степени такой же, как фон, но со структурой на нем. Как я создал фон.
  • 0
    @ user3152015: Что такое "Фон"? Я этого нигде не вижу.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню