纹理没有在屏幕上绘制
Texture not being drawn on Screen
我试图遵循一个稍微过时的教程,使瓷砖引擎。
问题是,纹理我试图绘制在屏幕上,不显示。我只是黑屏。
我取了Engine.cpp中最相关的部分:
bool Engine::Init()
{
LoadTextures();
window = new sf::RenderWindow(sf::VideoMode(800,600,32), "RPG");
if(!window)
return false;
return true;
}
void Engine::LoadTextures()
{
sf::Texture sprite;
sprite.loadFromFile("C:\Users\Vipar\Pictures\sprite1.png");
textureManager.AddTexture(sprite);
testTile = new Tile(textureManager.GetTexture(0));
}
void Engine::RenderFrame()
{
window->clear();
testTile->Draw(0,0,window);
window->display();
}
void Engine::MainLoop()
{
//Loop until our window is closed
while(window->isOpen())
{
ProcessInput();
Update();
RenderFrame();
}
}
void Engine::Go()
{
if(!Init())
throw "Could not initialize Engine";
MainLoop();
}
这里是texturemanager。cpp
#include "TextureManager.h"
#include <vector>
#include <SFMLGraphics.hpp>
TextureManager::TextureManager()
{
}
TextureManager::~TextureManager()
{
}
void TextureManager::AddTexture(sf::Texture& texture)
{
textureList.push_back(texture);
}
sf::Texture& TextureManager::GetTexture(int index)
{
return textureList[index];
}
在教程中使用了Image
类型,但Image
没有Draw()
方法,所以我制作了Texture
。为什么Texture
不能在屏幕上渲染?
问题似乎在:
void Engine::LoadTextures()
{
sf::Texture sprite;
sprite.loadFromFile("C:\Users\Vipar\Pictures\sprite1.png");
textureManager.AddTexture(sprite);
testTile = new Tile(textureManager.GetTexture(0));
}
您正在创建一个本地sf::Texture
并将其传递给TextureManager::AddTexture
。它可能在函数结束时超出了作用域,然后当你试图画它时就不再有效了。你可以使用一个智能指针来解决这个问题:
void Engine::LoadTextures()
{
textureManager.AddTexture(std::shared_ptr<sf::Texture>(
new sf::Texture("C:\Users\Vipar\Pictures\sprite1.png")));
testTile = new Tile(textureManager.GetTexture(0));
}
和改变TextureManager
使用它:
void TextureManager::AddTexture(std::shared_ptr<sf::Texture> texture)
{
textureList.push_back(texture);
}
sf::Texture& TextureManager::GetTexture(int index)
{
return *textureList[index];
}
当然,你还必须将textureList
更改为std::vector<std::shared_ptr<sf::Texture>
相关文章:
- 如何在快板的屏幕中显示子位图的绘制?
- 要在屏幕上绘制一些小瓷砖,我应该使用 QQuickItem 还是 QQuickPaintedItem?
- OpenGL ES 2.0将纹理绘制到屏幕上是行不通的
- 如何使用 bitblt 在屏幕上绘制由位图制作的数组?
- 为什么在GLFW窗口中没有用这个代码在我的屏幕上绘制立方体
- 有没有办法真正确保QSplashScreen已经在屏幕上重新绘制了?
- 如何检查在 Adafruit TFT 屏幕上绘制的两个圆圈是否相互接触
- 直接X 11:在屏幕上绘制一个简单的彩色矩形
- SFML C 为什么在屏幕上没有绘制?(简单代码)
- 如何绘制到目标纹理大于屏幕分辨率的帧缓冲区
- SFML 将形状绘制到屏幕上的多个位置
- 用SFML在屏幕顶部(Windows)绘制
- 绘制三角形时只有空白屏幕
- OpenGL在非方形屏幕上绘制线条
- 在MFC C++应用程序中在屏幕上绘制点的最快方法
- 赢得 32 C++,将可拖动的矩形绘制到屏幕上
- 如何在opengl中绘制屏幕一小部分大小的正方形网格
- OpenGL - 重新绑定 glBindVertexArray 不会在屏幕上绘制任何内容
- 从线程重新绘制初始屏幕/禁用断言
- 重新绘制屏幕并删除已经存在的内容