SFML createMaskFromColor()无法正常工作

时间:2016-02-08 20:30:25

标签: c++ sfml

我正在创建一个游戏,我要显示3个单独的对象。一个楼层,一个玩家精灵和多个板条箱。以下是这三个代码。

#include <iostream>
#include <fstream>
#include "Game.h"

Game::Game()
{

    std::ifstream fileHndl;

    fileHndl.open("Assets/mapdata.txt");

    fileHndl >> mapCols;
    fileHndl >> mapRows;

    playerX = mapCols / 2;
    playerY = mapRows / 2;

    mapData = new int *[mapRows];
    for (int i = 0; i < mapRows; i++) {
        mapData[i] = new int[mapCols];
    }

    for (int i = 0; i < mapRows; i++) {
        for (int j = 0; j < mapCols; j++) {
            fileHndl >> mapData[i][j];
        }
    }

    window.create(sf::VideoMode(1280, 1024), "COMP2501 Demo");
    window.setFramerateLimit(5);

    playerImage.loadFromFile("Assets/actor.png");
    playerImage.createMaskFromColor(sf::Color::White);
    playerTexture.loadFromImage(playerImage);
    playerTexture.setSmooth(true);
    playerSprite.setTexture(this->playerTexture);

    floorTexture.loadFromFile("Assets/floor.png");
    floorTexture.setSmooth(true);

    crateImage.loadFromFile("Assets/crate.png");
    crateImage.createMaskFromColor(sf::Color::White);
    crateTexture.loadFromImage(crateImage);
    crateTexture.setSmooth(true);

    mapSprites = new sf::Sprite *[mapRows];
    for (int i = 0; i < mapRows; i++) {
        mapSprites[i] = new sf::Sprite[mapCols];
    }

    for (int i = 0; i < mapRows; i++)
    {
        for (int j = 0; j < mapCols; j++)
        {
            mapSprites[i][j].setPosition(j * 64, i * 64);
            if (mapData[i][j] == 1)
            {
                mapSprites[i][j].setTexture(this->floorTexture);
            }
            else
            {
                mapSprites[i][j].setTexture(this->crateTexture);
            }
        }
    }

}

我正在尝试删除所有3张图片的白色背景,因为它们都是.png,但是这样做会得到以下结果。

http://i.stack.imgur.com/KG3H2.png

板条箱似乎在自己周围画了一个黑色边框。有没有更好的方法去除PNG上的白色背景作为纹理?

木箱 http://i.stack.imgur.com/DA5Dv.png

1 个答案:

答案 0 :(得分:0)

如果没有其他信息,这将是我猜测的逻辑链:

由于我们看到createMaskFromColor()函数适用于播放器模型,因此它不是错误源。由于我们看到为其他两个对象调用了相同的代码,因此色度键控也可以正常工作。因此,以下答案:

只有板条箱精灵背后的黑色背景。色度键控工作正常,并愉快地向我们展示透明角落背后的黑色背景。

如何解决:

确保地板精灵也出现在板条箱精灵后面。也许创建一个额外的精灵,并且#34; crate over a floor&#34;,以便在每次遇到这样的组合时不覆盖它们(不知道这是否真的会影响性能,只是猜测。)