c++ - SFML 如何在 Sprite(用作地图)上绘制 Sprite(用作玩家)
问题描述
我还不熟悉 SFML 环境,我们今年在学校开始学习它我正在努力使用这种方法在另一个精灵上绘制一个精灵我猜这是 s.~Drawable(); 用于在另一个窗口上绘图,但我找不到任何示例来实现它,任何人都可以将我重定向到初学者易于理解的良好文档。谢谢。
PS:我找到了其他方法,但我需要每次都加载图像来更改玩家的精灵图像,我想这会根据用户驱动器减慢游戏 fps
int sizeX = 1920, sizeY = 1080;
sf::RenderWindow window(sf::VideoMode(sizeX, sizeY), "Test");
window.setFramerateLimit(60); // max FPS a 60
sf::Vector2f player1(10, 10);
sf::Vector2f player2(590, 10);
sf::Sprite paddle1;
sf::Sprite paddle2;
sf::Texture t;
t.loadFromFile("Background.png");
sf::Sprite s(t);
//s.~Drawable();
// chargement du fichier .jpg dans un objet image de type Texture
sf::Texture imageBack1;
sf::Texture imageBack2;
sf::Texture imageForward1;
sf::Texture imageForward2;
sf::Texture imageLeft;
sf::Texture imageRight;
// PLayer2
sf::Texture imageBack1b;
sf::Texture imageBack2b;
sf::Texture imageForward1b;
sf::Texture imageForward2b;
sf::Texture imageLeftb;
sf::Texture imageRightb;
if (!imageBack1.loadFromFile("Back1.png"))
printf("PB de chargement de l'image !\n");
if (!imageBack2.loadFromFile("Back2.png"))
printf("PB de chargement de l'image !\n");
if (!imageForward1.loadFromFile("Forward1.png"))
printf("PB de chargement de l'image !\n");
if (!imageForward2.loadFromFile("Forward2.png"))
printf("PB de chargement de l'image !\n");
if (!imageLeft.loadFromFile("Left.png"))
printf("PB de chargement de l'image !\n");
if (!imageRight.loadFromFile("Right.png"))
printf("PB de chargement de l'image !\n");
//Player2 I guess this can be removed
if (!imageBack1b.loadFromFile("Back1b.png"))
printf("PB de chargement de l'image !\n");
if (!imageBack2b.loadFromFile("Back2b.png"))
printf("PB de chargement de l'image !\n");
if (!imageForward1b.loadFromFile("Forward1b.png"))
printf("PB de chargement de l'image !\n");
if (!imageForward2b.loadFromFile("Forward2b.png"))
printf("PB de chargement de l'image !\n");
if (!imageLeftb.loadFromFile("Leftb.png"))
printf("PB de chargement de l'image !\n");
if (!imageRightb.loadFromFile("Rightb.png"))
printf("PB de chargement de l'image !\n");
/* L’image doit être associée à un objet de type Sprite (équivalent à un rectangle) pour être dessinée. Ici , le sprite s’appelle bonhomme. Après, on ne travaille plus que sur le sprite… image ne sert plus à rien*/
paddle1.setTexture(imageBack1);
paddle2.setTexture(imageBack1);
// Start the game loop
while (window.isOpen())
{
// Poll for events
sf::Event event;
while (window.pollEvent(event))
{
// Close window : exit
if (event.type == sf::Event::Closed)
window.close();
// Escape pressed : exit
if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape)
window.close();
}
window.clear();
// Draw the sprites
window.draw(paddle1);
window.draw(paddle2);
window.draw(s);
window.display();
}
解决方案
您可以绘制到 sf::RenderTexture:https ://www.sfml-dev.org/documentation/2.5.1/classsf_1_1RenderTexture.php
并让这个渲染纹理成为 Sprite 的纹理。
推荐阅读
- python - 用输入的变量替换整数
- vuejs2 - 扩展异步规则中的 Vee 验证消息无法显示错误消息
- sql - postgresql:您可以在 pgAdmin 中以指定角色运行查询吗?
- android - 导入资源时的问题
- sqlite - 奇怪的 ZQuery 行为
- python - 更改 Matplotlib x 轴上的整数顺序(更直观的时间序列表示)
- html - 文本阴影未在 Chrome 中呈现
- javascript - ES6 模块中是否有任何上下文/情况无法更新 var 来让?
- arrays - 如何将相同的项目添加到 Ruby 数组中的每个项目?
- excel - vba中的循环给出“xx”而不是xx