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

时间:2018-01-23 21:44:29

标签: c++ sfml

我有一个角色精灵在屏幕上移动,当我按下'a'时,我希望程序将剑精灵画在屏幕上,当我不按'a'时,剑就会消失。目前我有一个攻击函数,将showweapon boolean设置为true,以及一个if语句,它应该将武器绘制到屏幕上,但没有任何反应。有更好的方法吗?

main.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);

        }
    }

我也没有收到“你好”的消息

weapon.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;
}

如果您需要查看其他任何内容,请告知我们。谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

我将if语句更改为:if(woodsword.showweapon == true)并且我在武器类中设置了一个设置showweapon false的鞘方法,这样当我不按#39时剑就会消失;一个&#39 ;.感谢大家的帮助。