我在代码块中使用SFML 2.1,我无法弄清楚如何使用Vectors来制作我的小行星精灵的克隆。它一直说asteroid_V尚未被声明,并且弹出一个警告框,表示它“正在使用在所选编码中非法的字符”并且它们“已被更改以保护[我]免于丢失数据”。
这个程序的目标是不断创建小行星精灵,它会在屏幕上方的随机点产生,然后直接下降。程序中还有其他精灵和方面,但我从这篇文章中删除它们以正确地压缩它。这似乎是唯一的问题。
int n;
int main()
{
RenderWindow window;
window.setFramerateLimit(30);
RenderWindow mainMenu;
srand( time(0));
Texture asteroid_Pic;
asteroid_Pic.loadFromFile("Asteroid.png");
std::vector<sf::Sprite> asteroid(n, Sprite(asteroid_Pic));
for (int i = 0; i < asteroid.size(); i++){
asteroid[n].setOrigin(15, 15);
asteroid[n].getPosition();
asteroid[n].setPosition(x = rand() % 790 + 10, y = rand() % -10 - 50);
}
// run the program as long as the window is open
while (window.isOpen())
{
// check all the window's events that were triggered since the last iteration of the loop
Event event;
while (window.pollEvent(event))
{
// "close requested" event: we close the window
if (event.type == Event::Closed){
window.close();
}
asteroid[n].setPosition(x, y+=1);
asteroid[n].rotate(1);
// clear the window with black color
window.clear(Color::Black);
// draw everything here...
// window.draw(...);
window.draw(player1);
window.draw(asteroid[n]);
// end the current frame
window.display();
}
return 0;
}
答案 0 :(得分:0)
主循环中还有另一个while (window.isOpen())
。你的程序将进入主循环,然后永远不会离开内循环。它至少不会画一次。
你需要摆脱内部while (window.isOpen())
循环并找到另一种方式。
虽然原始问题是关于计时器的,但您可以找到游戏循环here的基本解释。如果你想根据时间做某事(移动精灵,创建新的游戏实体),你必须在循环中处理时间。