我为我的学习编写了一个项目,我必须尽可能地使用线程。我在绘制迷宫以及游戏中发生的一切时遇到了问题。我已尝试在线程中执行此操作。
window.setActive(false);
thread drawingThr(&Game::drawingGameElements, &window, iterWall, wallArray, iterPrWall, projWallArray, iterPic, pickupArray, iter, projectileArray, iterEn, enemyArray, iterTex, textDisplayArray, ref(player1), score);
//window.setActive(true);
这就是我在游戏循环(while(true)
)中执行此操作的方法。在游戏循环开始时,我用方法清除窗口:
window.clear(sf::Color::Cyan);
我不知道该怎么做,因为Console中的Visual Studio 15只写
"无法激活OpenGL上下文: 无法激活窗口的上下文"
(是的,游戏正在编译)。
最后,我向您展示了函数代码,我在线程中使用了它:
void Game::drawingGameElements(sf::RenderWindow *window, vector<Wall>::const_iterator iterWall, vector<Wall> wallArray, vector<ProjWall>::const_iterator iterPrWall,
vector<ProjWall> projWallArray, vector<Pickup>::const_iterator iterPic, vector<Pickup> pickupArray, vector<Projectile>::const_iterator iter, vector<Projectile> projectileArray,
vector<Enemy>::const_iterator iterEn, vector<Enemy> enemyArray, vector<TextDisplay>::const_iterator iterTex, vector<TextDisplay> textDisplayArray, Player &player1, sf::Text score)
{
//Draw Walls
int counter = 0;
for (iterWall = wallArray.begin(); iterWall != wallArray.end(); iterWall++)
{
window->draw(wallArray[counter].rect);
counter++;
}
//Draw Projectile Walls
counter = 0;
for (iterPrWall = projWallArray.begin(); iterPrWall != projWallArray.end(); iterPrWall++)
{
//projWallArray[counter].update();
window->draw(projWallArray[counter].rect);
//window.draw(pickupArray[counter].sprite);
counter++;
}
//Draw Pickup Items
counter = 0;
for (iterPic = pickupArray.begin(); iterPic != pickupArray.end(); iterPic++)
{
pickupArray[counter].update();
window->draw(pickupArray[counter].rect);
//window.draw(pickupArray[counter].sprite);
counter++;
}
//Draw projectiles
counter = 0;
for (iter = projectileArray.begin(); iter != projectileArray.end(); iter++)
{
projectileArray[counter].update();
//window.draw(projectileArray[counter].rect);
window->draw(projectileArray[counter].sprite);
counter++;
}
//Draw Enemies
counter = 0;
for (iterEn = enemyArray.begin(); iterEn != enemyArray.end(); iterEn++)
{
enemyArray[counter].update();
enemyArray[counter].updateMovement();
window->draw(enemyArray[counter].rect);
//window.draw(enemyArray[counter].sprite);
counter++;
}
//Draw Text
counter = 0;
for (iterTex = textDisplayArray.begin(); iterTex != textDisplayArray.end(); iterTex++)
{
textDisplayArray[counter].update();
window->draw(textDisplayArray[counter].text);
counter++;
}
//Update score
score.setString("Score: " + to_string(player1.score));
window->draw(score);
//Update player
player1.text.setString("Hp: " + to_string(player1.hp) + "/" + to_string(player1.maxHp));
player1.update();
player1.updateMovement();
//Update window
window->draw(player1.text);
window->draw(player1.rect);
window->display();
}
感谢您的帮助! :d