【问题标题】:How do I draw a member from a class onto a window c++如何将类中的成员绘制到窗口 c++ 上
【发布时间】:2018-07-01 15:05:24
【问题描述】:

我为玩家制作了一个角色类,我想在类中添加一个玩家成员然后绘制玩家。我正在使用 sfml 和 xcode。我得到的错误是:没有匹配的成员函数来调用“draw”:window.draw(player);线。看起来我需要将一个精灵对象放入 .draw() 那么如何制作属于该类的玩家精灵并将其绘制到窗口上呢?我是 C++ 和 sfml 的新手,所以非常感谢任何帮助。

#include <iostream>
#include <SFML/Graphics.hpp>

using namespace std;



class Character{

public:
    string sprite;
    int health;
    int defense;
    int speed;
    int experience;
    bool move;
    int x_pos;
    int y_pos;
    sf::Texture texture;

    //Constructor - Ran everytime a new instance of the class is created
    Character(string image){
        health = 100;
        defense = 100;
        speed = 100;
        experience = 0;
        x_pos = 0;
        y_pos = 0;

        texture.loadFromFile(image);
        sf::Sprite sprite;
        sprite.setTexture(texture);
        sprite.setTextureRect(sf::IntRect(0, 0, 100, 100));
        sprite.setPosition(x_pos, y_pos);
    }
    //Destructor - Ran when the object is destroyed
    ~Character(){

    }
    //Methods
    void forward();
    void backward();
    void left();
    void right();
    void attack();
};

void Character::forward(){
    cout << "Go Forward";
}
void Character::backward(){
    cout << "Go Backward";
}
void Character::left(){
    cout << "Go Left";
}
void Character::right(){
    cout << "Go Right";
}

Character player("/Users/danielrailic/Desktop/Xcode /NewGame/ExternalLibs/Player.png");


int main() {
    // insert code here...
    int windowWidth = 1150;
    int windowHeight = 750;
    sf::RenderWindow window(sf::VideoMode(windowWidth, windowHeight ), "Awesome Game" );

    while(window.isOpen()){
        window.draw(player);
        window.display();
        window.setFramerateLimit(60);
    }
}

【问题讨论】:

  • 使Character继承自sf::Drawable并实现纯虚函数。

标签: c++ class sfml


【解决方案1】:

您可以简单地添加一个返回玩家精灵的成员函数:

sf::Sprite Character::getSprite() {
    sf::Sprite sprite;
    sprite.setTexture(texture);
    sprite.setTextureRect(sf::IntRect(0, 0, 100, 100));
    sprite.setPosition(x_pos, y_pos);
    return sprite;
}

然后将结果传递给window.draw

window.draw(player.getSprite());

或者,你可以反转依赖,让玩家负责所有的绘图:

void Character::draw(sf::RenderWindow& w) {
    w.draw(...);
}

还有其他方法,选择在很大程度上取决于很多外部因素。不过,这应该可以帮助您入门。

【讨论】:

  • 哦,我现在明白了。这比我想象的要简单得多,非常感谢
  • @DapperDaniel 请不要编辑您的问题标题,而是将此答案标记为已接受。这是将问题标记为已解决的正确方法。
猜你喜欢
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-19
  • 1970-01-01
相关资源
最近更新 更多