我正在制作一个Animal Crossing克隆,但是我在渲染播放器方面遇到了问题

时间:2015-05-11 15:38:40

标签: c++ sfml

最近,我决定制作动物传播克隆 C ++和SFML 2.1。但我遇到了一些问题。命令渲染时,播放器不会显示。程序将编译并运行得很好,但玩家不会出现。

这是我的代码:

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

using namespace std;
using namespace sf;

RenderWindow window(VideoMode(700, 500), "Animal Crossing: Old oak");

View view(FloatRect(1000, 1000, 300, 200));

class Villager{
public:
int x, y, w, h;
Sprite pl;
string loadDir;

Villager(int x, int y, int w, int h, Color c, string loadDir){
    this->x = x;
    this->y = y;
    this->w = w;
    this->h = h;

    Image image;
    image.loadFromFile(loadDir);
    image.createMaskFromColor(Color::Magenta);

    Texture tex;
    tex.loadFromImage(image);

    pl.setTexture(tex);
}

}
};

int main(){

Villager villager(1100, 1000, 100, 100, Color::Blue, "player.png");
view.zoom(5);

Image grasstexloader;
grasstexloader.loadFromFile("grass.png");

Texture grasstex;
grasstex.loadFromImage(grasstexloader);

Sprite grass;
grass.setTexture(grasstex);

while(window.isOpen()){
    Event event;

    while(window.pollEvent(event)){

        if(event.type == Event::Closed)
            window.close();

        if(Keyboard::isKeyPressed(Keyboard::Up))
            villager.moveUp();

        if(Keyboard::isKeyPressed(Keyboard::Down))
            villager.moveDown();

        if(Keyboard::isKeyPressed(Keyboard::Left))
            villager.moveLeft();

        if(Keyboard::isKeyPressed(Keyboard::Right))
            villager.moveRight();

        if(Keyboard::isKeyPressed(Keyboard::Escape))
            window.close();
    }

    window.setView(view);

    window.draw(grass);
    window.draw(villager.pl);
    window.display();
    window.clear();
}

}

我一直在盯着这段代码一个小时。但我只是找不到错误!

请帮忙!

编辑:我解决了sprite不可见的问题,但精灵只是白色而不是合适的颜色。它可能与我加载文件的方式有关。请发布有关如何解决此新问题的任何建议!

1 个答案:

答案 0 :(得分:2)

你的精灵呈现白色,因为在你的Villager构造函数中,你给一个局部的Texture变量给setTexture,然后在构造函数范围的末尾被破坏。