是的,伙计们,我在这里陷入了严重的困境。
我正在为大学做一个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:
#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();
}好了,现在代码已经过时了,我会告诉你我尝试过什么。
关于这个问题,我联系了我的讲师,他说的只是“Update>Update()”,我试过了,但Intellisense强调了‘-’,并表示它需要一个标识符。
出于主动,我尝试使用‘Player::Update()’,但它告诉我不能从静态上下文引用它。我删除了括号,它允许它,但是构建应用程序仍然什么也不做。
我也不是一个完全的白痴,我让用户--玩家没有被画在背景后面--注释掉了背景的抽签代码。还是一无所获。
我真的需要帮助,所以请不要讽刺的回答。希望这已经足够清楚了。
发布于 2014-01-01 22:34:34
调用Player实例的更新,而不是Player类
发布于 2014-01-01 22:34:10
您没有任何代码来创建一个Player**,或调用它上的函数;您需要添加该代码。函数不只是神奇地在不存在的对象上自动调用。
顺便说一句,您正在破坏三律,所以您的类都有破坏性的/危险的、没有双重功能的bug。要么添加复制构造函数,要么更好地删除所有手动动态分配。
关于这件事,我联系了我的讲师,他说的都是“Update>Update();”。我删除了括号,它允许它,但是构建应用程序仍然什么也不做。
猜测编程不起作用。再次联系你的教授,这一次与他有超过三行的电子邮件对话:坐下半个小时或更长时间,让他向你解释如何构建你的C++程序。这就是他花钱买的。
https://stackoverflow.com/questions/20873966
复制相似问题