SFML createMaskFromColor() 无法正常工作

SFML createMaskFromColor() not working correctly

本文关键字:常工作 工作 createMaskFromColor SFML      更新时间:2023-10-16

我正在创建一个游戏,其中有 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,但是这样做时我得到以下结果。

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

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

板条箱https://i.stack.imgur.com/DA5Dv.png

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

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

除了板条箱精灵后面的黑色背景外,什么都没有。色度键控工作正常,并愉快地向我们展示了透明角后面的黑色背景。

如何解决:

确保地板精灵也存在于板条箱精灵后面。也许创建一个额外的精灵,"地板上的板条箱",以免每次遇到这样的组合时都覆盖它们(不知道这是否真的会影响性能,只是一个猜测。