如何在调用函数时将对象绘制到 sfml 窗口上

How to draw an object onto sfml window when a function is called?

本文关键字:绘制 sfml 窗口 对象 调用 函数      更新时间:2023-10-16

我有一个角色精灵在屏幕上移动,当我按"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"时剑就会消失。感谢大家的帮助。