gpt4 book ai didi

c++ - SFML/C++ Sprite 由于超出范围而显示为白框,不知道在哪里

转载 作者:行者123 更新时间:2023-11-30 01:47:01 24 4
gpt4 key购买 nike

标题描述了一切,我正在尝试做一个基于图 block 的引擎,但我无法继续,因为我无法找到纹理超出范围的地方。

谢谢。

我的代码:

ImageManager.h

#pragma once

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

class ImageManager{
std::vector<sf::Texture> textureList;
public:

void AddTexture(sf::Texture);
sf::Texture getIndex(int index) const;
};

ImageManager.cpp

#include "imageManager.h"

void ImageManager::AddTexture(sf::Texture texture){
textureList.push_back(texture);
}

sf::Texture ImageManager::getIndex(int index) const{
return textureList[index];
}

瓷砖.h

#pragma once

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

class Tile{
sf::Sprite sprite;

public:
Tile(sf::Texture texture);

void draw(int x, int y, sf::RenderWindow* rw);
};

瓷砖.cpp

#include "Tile.h"

Tile::Tile(sf::Texture texture){
sprite.setTexture(texture);
}

void Tile::draw(int x, int y, sf::RenderWindow* rw){
sprite.setPosition(x, y);
rw->draw(sprite);
}

最佳答案

您的构造函数将原始纹理的拷贝作为参数,该拷贝在作用域的末尾消失。请改用 (const) 引用。

此外,您的 ImageManager 将在调整其 vector 大小时复制纹理,因此所有 Sprite 都将丢失其纹理。要么使用 std::vector<std::shared_ptr<sf::Texture>>或使用 Thor的资源管理器(或实际上任何其他好的库)。

关于c++ - SFML/C++ Sprite 由于超出范围而显示为白框,不知道在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32261503/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com