【发布时间】:2017-09-13 11:34:05
【问题描述】:
我'创建一个简单的游戏,使用游戏状态。
我有一个gameLoop() 方法,它调用了一个running() 方法,其中包含切换状态,可以正常工作。
这是gameLoop() 方法:
void Game::gameLoop()
{
while (window.isOpen()) {
Event event;
while (window.pollEvent(event)) {
if (event.type == Event::Closed){
window.close();
}
}
if (Keyboard::isKeyPressed(Keyboard::Escape)) {
window.close();
}
window.clear();
running(); //this calls the states
window.display();
}
running() 方法调用所有状态:
void Game::running()
{
switch (state)
{
//other cases here
case s_play:
play();
break;
default:
break;
}
}
play() 方法绘制精灵并移动它:
void Game::play()
{
Texture myTexture; //I've also tried to declare these outside the method
Sprite mySprite;
///////////Graphics
myTexture.loadFromFile("res/img/player.png");
mySprite.setTexture(myTexture);
//////////Movement
static sf::Clock clock;
float dt = clock.restart().asSeconds();
Vector2f move;
if (Keyboard::isKeyPressed(Keyboard::A))
{
move.x--;
}
std::cout << mySprite.getPosition().x << "\n";
}
if (Keyboard::isKeyPressed(Keyboard::D))
{
move.x++;
}
std::cout << mySprite.getPosition().x << "\n";
}
mySprite.move(move*300.0f*dt);
window.draw(mySprite);
}
问题是精灵只是原地移动,按A或D时从std::cout得到的输出如下:
机芯的功能有效,因为它在其他地方进行了测试。我认为我正在正确更新或以错误的方式初始化某些内容,但我无法弄清楚。
【问题讨论】:
-
每次迭代创建纹理和精灵是浪费资源。
-
为什么每次调用都加载纹理并设置精灵?那只是浪费循环。只做一次。也许纹理、精灵和时钟应该是
Game类中的成员变量? -
sf::Clock::restart()返回经过的时间,然后 然后 重新启动它@Someprogrammerdude。时钟是静态的,所以应该没什么区别 -
最后,您显示的代码是您的实际代码,还是只是您在问题中编写的代码?因为您显示的代码无效。你真的应该创建一个Minimal, Complete, and Verifiable Example 来展示给我们看。
-
@Someprogrammerdude 是的,我有这些作为班级成员,我在代码中添加了注释来说明这一点。关于时钟,它工作正常,就像在另一个项目中一样