如何在调用函数时将对象绘制到 sfml 窗口上
How to draw an object onto sfml window when a function is called?
我有一个角色精灵在屏幕上移动,当我按"a"时,我希望程序将剑精灵绘制到屏幕上,并在我不按"a"时使剑消失。目前,我有一个攻击函数,可以将显示武器布尔值设置为true,以及一个if语句,该语句应该将武器绘制到屏幕上,但没有任何反应。有没有更好的方法可以做到这一点?
主.cpp
#include <iostream>
#include <SFML/Graphics.hpp>
#include "Character.h"
#include "Projectile.h"
#include "Weapon.h"
using namespace std;
bool scroll = false;
Character player("/Users/danielrailic/Desktop/Xcode /NewGame/ExternalLibs/Player.png");
Weapon woodsword("/Users/danielrailic/Desktop/Xcode /NewGame/ExternalLibs/WoodSword.png");
bool showweapon;
int main() {
// insert code here...
int windowWidth = 5000;
int windowHeight = 5000;
sf::RenderWindow window(sf::VideoMode(windowWidth, windowHeight ), "Awesome Game" );
sf::Texture dungeon;
dungeon.loadFromFile("/Users/danielrailic/Desktop/Xcode /NewGame/ExternalLibs/DungeonBack.png");
sf::Sprite backround;
backround.setTexture(dungeon);
while (window.isOpen()){
// check all the window's events that were triggered since the last iteration of the loop
sf::Event event;
while (window.pollEvent(event)){
// "close requested" event: we close the window
if (event.type == sf::Event::Closed)
window.close();
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)){
player.left();
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)){
player.right();
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up)){
player.forward();
}
if (sf:: Keyboard::isKeyPressed(sf::Keyboard::Down)){
player.backward();
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::LShift))
{
player.Highspeed();
}
else{
player.Lowspeed();
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::A)){
woodsword.attack();
}
window.clear(sf::Color(255, 255, 255));
window.draw(backround);
if(showweapon == true){
window.draw(woodsword.getSprite());
window.display();
cout << "Hello";
}
window.draw(player.getSprite());
window.display();
window.setFramerateLimit(70);
}
}
我也没有收到"你好"消息
武器.h
class Weapon : Character{
bool showweapon;
public:
sf::Texture texture;
//Constructor
Weapon(string wep)
: Character(wep){
texture.loadFromFile(wep);
showweapon = false;
}
sf::Sprite getSprite() {
sf::Sprite sprite;
sprite.setTexture(texture);
sprite.setTextureRect(sf::IntRect(0, 0, 100, 100));
sprite.setPosition(x_pos, y_pos);
return sprite;
}
//Methods
void attack();
};
void Weapon::attack(){
showweapon = true;
}
如果您需要查看其他内容,请告诉我。感谢您的任何帮助!
我将if语句更改为:if (woodsword.showweapon == true(,并且我还在武器类中制作了一个鞘方法,将showweapon设置为false,这样当我不按"a"时剑就会消失。感谢大家的帮助。
相关文章:
- SFML 文本未绘制在窗口上
- 使用 SFML 绘制曲线会给出错误的形状
- 使用 std::list 存储顶点并使用 SFML 绘制它们
- SFML 2.4.2 - 绘制文本时出现分段错误
- 当我尝试绘制 sf::Text 对象时,SFML 中的分段错误
- 低帧率,仅使用地图和小地图绘制 (SFML)
- 移动后未绘制 SFML 形状
- SFML从VertexArray绘制基元
- 为什么该代码不绘制精灵C++ SFML
- SFML C 为什么在屏幕上没有绘制?(简单代码)
- C++ SFML 创建形状向量并在函数中绘制它们
- SFML 将形状绘制到屏幕上的多个位置
- SFML参考窗口在绝对位置绘制
- 用SFML在屏幕顶部(Windows)绘制
- 如何在调用函数时将对象绘制到 sfml 窗口上
- SFML 2.4.2 在绘制 sf::Text 对象之前获取本地边界
- SFML 对象在重新初始化其父类时不会绘制
- SFML在另一个对象上方绘制对象
- 从Sprites SFML的向量中绘制
- 绘制SFML船时不兼容的声明