SFML createMaskFromColor() 无法正常工作

SFML createMaskFromColor() not working correctly

我正在创建一个游戏,其中有 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

在没有其他信息的情况下,这将是我猜测的逻辑链:

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

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

如何修复:

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