我的sfml纹理在哪里超出了范围
Where is my sfml texture going out of scope at?
所以我(再次)遇到了臭名昭著的白色方块问题,这次我尽可能返回引用,但没有用。我有一个Level
,它保存一个向量GamePieces
,而每个GamePiece
对象都保存一个sf::sprite
。以下是尝试从GamePiece
:绘制精灵的代码
引擎.h:
#pragma once
#include "stdafx.h"
#include "SFML/Graphics.hpp"
#include "ImageManager.h"
#include "Level.h"
#include "GamePiece.h"
class Engine{
public:
Engine();
~Engine();
void Go();
private:
void ProcessInput();
void UpdateCPU();
void Render();
sf::RenderWindow window;
ImageManager imgr;
Level level;
};
绘制的引擎功能:
void Engine::Render(){
window.clear();
//draw wall tiles
for(int i = 0; i < 160; i++){
if(i < 60){
level.GetWallTile().setPosition(0, i * 10);
window.draw(level.GetWallTile());
}
if(i >= 60 && i < 100){
level.GetWallTile().setPosition((i - 60) * 10, 590);
window.draw(level.GetWallTile());
}
if(i >= 100){
level.GetWallTile().setPosition(390, (i - 100) * 10);
window.draw(level.GetWallTile());
}
}
//draw BG tiles
for(int i = 1; i < 39; i++){
for(int j = 0; j < 59; j++){
level.GetBGTile().setPosition(i * 10, j * 10);
window.draw(level.GetBGTile());
}
}
for(int i = 0; i < level.GetGamePieces().size(); i++){
window.draw(level.GetGamePieces()[i].GetPieceSprite());
}
window.display();
}
请记住,wallTile
和bgTile
的画得很好,是最后一个循环给了我白色的方块。
以下是相关的函数和类:
//level.h
#pragma once
#include "stdafx.h"
#include "SFML/Graphics.hpp"
#include "ImageManager.h"
#include "GamePiece.h"
class Level{
public:
Level(ImageManager &im);
~Level();
sf::Sprite &GetWallTile();
sf::Sprite &GetBGTile();
void AddPiece();
std::vector<GamePiece> &GetGamePieces();
private:
ImageManager &imgr;
//not sure if vector needed, or one sprite
//std::vector<sf::Sprite> wallTiles_;
sf::Sprite wallTile;
//std::vector<sf::Sprite> bgTiles_;
sf::Sprite bgTile;
std::vector<GamePiece> gamePieces_;
};
//Level.cpp
#include "stdafx.h"
#include "Level.h"
Level::Level(ImageManager &im) : imgr(im){
im.AddResourceDirectory("images/");
wallTile.setTexture(im.GetImage("walltile1.png"));
bgTile.setTexture(im.GetImage("bgtile1.png"));
AddPiece();
}
Level::~Level(){
}
void Level::AddPiece(){
GamePiece piece(imgr);
gamePieces_.push_back(piece);
}
std::vector<GamePiece> &Level::GetGamePieces(){
return gamePieces_;
}
//GamPiece.h
class GamePiece{
public:
GamePiece(ImageManager &im);
~GamePiece();
void SetShape();
sf::Sprite &GetPieceSprite();
private:
ImageManager &imgr;
sf::Sprite pieceShape;
};
//and GamePiece.cpp
#include "stdafx.h"
#include "GamePiece.h"
GamePiece::GamePiece(ImageManager &im) : imgr(im){
SetShape();
}
GamePiece::~GamePiece(){
}
void GamePiece::SetShape(){
//int temp = rand() % 7;
int temp = 0;
switch(temp){
case 0:
pieceShape.setTexture(imgr.GetImage("line.png"));
case 1:
pieceShape.setTexture(imgr.GetImage("llblock.png"));
case 2:
pieceShape.setTexture(imgr.GetImage("rlblock.png"));
case 3:
pieceShape.setTexture(imgr.GetImage("square.png"));
case 4:
pieceShape.setTexture(imgr.GetImage("lsquiggly.png"));
case 5:
pieceShape.setTexture(imgr.GetImage("rsquiggly.png"));
case 6:
pieceShape.setTexture(imgr.GetImage("tblock.png"));
}
}
sf::Sprite &GamePiece::GetPieceSprite(){
return pieceShape;
}
我知道很多代码,但我真的不知道纹理在哪里超出了范围,假设这就是问题所在。看看类似的帖子,这可能是问题所在,但我需要帮助找到它。
void Level::AddPiece() {
GamePiece piece(imgr);
gamePieces_.push_back(piece);
piece.SetShape();
}
piece
正在被复制到向量中。矢量中的元素与从中复制的对象(绑定到AddPiece()
范围的对象)不关联。因此,对piece
采取的任何操作都不会影响插入的元素。
如果您需要访问以前push_back()
'ed的元素,则使用back()
返回对它的引用:
gamePieces_.back().SetShape();
您也可以在将SetShape()
插入向量之前调用它。
相关文章:
- C++我需要了解在哪里使用指针和双指针
- 未定义的引用在哪里
- 谷歌测试中的期望值存储在哪里
- 尽管遵循了规则,内存泄漏在哪里
- 静态数据成员模板专用化的实例化点在哪里
- 在哪里放置我的函数?进入我的母语 Gui 还是进入我的演示者?
- 在哪里声明结构运算符重载
- C++ 中的自定义异常:在哪里定义它们?
- 常量参数存储在哪里 (C++)?
- 如何在 c++ 中确定一条指令(以字节为单位)在哪里结束,另一条指令从哪里开始?
- 此递归函数的每次迭代的值存储在哪里?
- 如何告诉本机节点模块所需的dll存储在哪里?
- 字符串订阅超出范围 - 我在哪里犯错
- 在Ubuntu上使用C 中的pthreads时.主线程范围从哪里开始和结束
- 使用boost :: iterator_range;我的数据在哪里范围
- 在C++标准中,我可以在哪里找到对全局范围内调用函数的支持
- 如果您希望变量在超出范围后保留,那么您将在哪里调用delete
- 我的sfml纹理在哪里超出了范围
- SFML/C++ 雪碧因超出范围而被显示为白框,不知道在哪里
- 在哪里删除对象?我超出了范围