在 SFML/C++ 中绘制小地图
Drawing a minimap in SFML/C++
我知道我已经可以通过修改视图对象来创建一个小地图,如 here 所述,但我想要的是一个小矩形,其中有一个框或一个代表玩家的箭头,并且代表敌人或各种物体的其他彩色方框。有没有比简单地创建一个 Minimap 对象更好的方法来计算每个敌人的位置并将其转换为一个代表性对象(框、箭头等),然后将其绘制到屏幕上?
这是一个最普遍的问题,所以我并不是真的期待示例代码,尽管我会非常感激。我现在正在绘制一个小地图 class,我会尽快上传到这里。
这是我在绘制循环中所做的:
minimap.setCenter(player.getPosition());
minimap.setViewport(sf::FloatRect(0.75f, 0.75f, 0.25f, 0.25f));
//Bottom right corner of screen
window.setView(minimap);
window.draw(player);
window.setView(view); //Return to default view
启动视图时调用 minimap.zoom(10);
。
实际上,我试过这个:
window.setView(minimap);
sf::CircleShape object;
object.setRadius(200);
object.setFillColor(sf::Color::Blue);
object.setPosition(player.getPosition());
window.draw(object);
object.setFillColor(sf::Color::Red);
for (auto& e : enemies)
{
object.setPosition(e->getPosition());
window.draw(object);
}
window.setView(view);
这奏效了。显然它会从自己的 class 中获益,这样就不必在每个循环等中重新创建圆圈。
如果有更好的方法,一定要提出来。
这是小地图的截图(右下):
我知道我已经可以通过修改视图对象来创建一个小地图,如 here 所述,但我想要的是一个小矩形,其中有一个框或一个代表玩家的箭头,并且代表敌人或各种物体的其他彩色方框。有没有比简单地创建一个 Minimap 对象更好的方法来计算每个敌人的位置并将其转换为一个代表性对象(框、箭头等),然后将其绘制到屏幕上?
这是一个最普遍的问题,所以我并不是真的期待示例代码,尽管我会非常感激。我现在正在绘制一个小地图 class,我会尽快上传到这里。
这是我在绘制循环中所做的:
minimap.setCenter(player.getPosition());
minimap.setViewport(sf::FloatRect(0.75f, 0.75f, 0.25f, 0.25f));
//Bottom right corner of screen
window.setView(minimap);
window.draw(player);
window.setView(view); //Return to default view
启动视图时调用 minimap.zoom(10);
。
实际上,我试过这个:
window.setView(minimap);
sf::CircleShape object;
object.setRadius(200);
object.setFillColor(sf::Color::Blue);
object.setPosition(player.getPosition());
window.draw(object);
object.setFillColor(sf::Color::Red);
for (auto& e : enemies)
{
object.setPosition(e->getPosition());
window.draw(object);
}
window.setView(view);
这奏效了。显然它会从自己的 class 中获益,这样就不必在每个循环等中重新创建圆圈。
如果有更好的方法,一定要提出来。
这是小地图的截图(右下):