首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从另一个文件运行整个CPP文件?

如何从另一个文件运行整个CPP文件?
EN

Stack Overflow用户
提问于 2014-01-01 22:30:30
回答 2查看 218关注 0票数 0

是的,伙计们,我在这里陷入了严重的困境。

我正在为大学做一个2D游戏,它不需要复杂的任何手段。我有用C# XNA制作游戏的经验,并且正在尝试使用类似的技术。我对你们的唯一不同之处是,我使用的是一个名为S2D的游戏引擎,它是由我的讲师编写的,与XNA有相似之处。

本质上,我的问题是,到目前为止,我有两个头文件(EscapeThePrison.h和Player.h)和三个cpp文件(main.cpp、World.cpp和Player.cpp)。

在main.cpp中,我只是有了游戏的切入点。

然而,EscapeThePrison.cpp是唯一正在运行的其他文件。这个文件应该(到目前为止)绘制一个背景。这个很管用。

Player.cpp应该画我的球员形象,但它不这样做。我甚至用cout来输出文本,看看它是否正在运行,但是我的代码很混乱,但是我什么也没有得到。

无论如何,我基本上需要能够运行整个player.cpp文件,这样该死的东西就能工作了。下面是我的密码。

替罪羊监狱h:

代码语言:javascript
运行
复制
#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:

代码语言:javascript
运行
复制
#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(游戏入口)

代码语言:javascript
运行
复制
#include "EscapeThePrison.h"
#include "Player.h"
int main(int argc, char* argv[]) 
{
    EscapeThePrison* game = new EscapeThePrison(argc, argv);

}

World.cpp (工作文件)

代码语言:javascript
运行
复制
#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 (不工作的那个)

代码语言:javascript
运行
复制
#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();
}

好了,现在代码已经过时了,我会告诉你我尝试过什么。

关于这个问题,我联系了我的讲师,他说的只是“Update>Update()”,我试过了,但Intellisense强调了‘-’,并表示它需要一个标识符。

出于主动,我尝试使用‘Player::Update()’,但它告诉我不能从静态上下文引用它。我删除了括号,它允许它,但是构建应用程序仍然什么也不做。

我也不是一个完全的白痴,我让用户--玩家没有被画在背景后面--注释掉了背景的抽签代码。还是一无所获。

我真的需要帮助,所以请不要讽刺的回答。希望这已经足够清楚了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-01 22:34:34

调用Player实例的更新,而不是Player类

票数 1
EN

Stack Overflow用户

发布于 2014-01-01 22:34:10

您没有任何代码来创建一个Player**,或调用它上的函数;您需要添加该代码。函数不只是神奇地在不存在的对象上自动调用。

顺便说一句,您正在破坏三律,所以您的类都有破坏性的/危险的、没有双重功能的bug。要么添加复制构造函数,要么更好地删除所有手动动态分配。

关于这件事,我联系了我的讲师,他说的都是“Update>Update();”。我删除了括号,它允许它,但是构建应用程序仍然什么也不做。

猜测编程不起作用。再次联系你的教授,这一次与他有超过三行的电子邮件对话:坐下半个小时或更长时间,让他向你解释如何构建你的C++程序。这就是他花钱买的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20873966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档