1
基本上我正在嘗試使用C++和SFML2 API製作井字棋遊戲。我在我的主要功能中加載了背景和spritesheet,並獲得了很好的背景。之後我繼續創建一個Tile類,看起來像這樣。C++/SFML2雪碧沒有顯示
Tile.h
#ifndef TILE_H
#define TILE_H
#include <SFML\Graphics.hpp>
enum TileStatus
{
FREE = 0,
CROSS = 1,
CIRCLE = 2
};
class Tile
{
private:
float xPos,
yPos;
sf::Sprite tileSprite;
int height,
width;
TileStatus tileStatus;
public:
//Constructors
Tile();
Tile(sf::Texture tileTexture , TileStatus tileStatus , float xPos , float yPos);
//Methods
sf::Sprite getTileSprite();
void setTileStatus(TileStatus tileStatus);
TileStatus getTileStatus();
};
#endif
和Tile.cpp
#include "tile.h"
Tile::Tile()
{
xPos = 0;
yPos = 0;
height = 0;
width = 0;
tileStatus = FREE;
}
Tile::Tile(sf::Texture tileTexture , TileStatus tileStatus , float xPos , float yPos)
{
this->tileStatus = tileStatus;
height = 126;
width = 126;
this->xPos = xPos;
this->yPos = yPos;
this->tileSprite.setTexture(tileTexture);
this->tileSprite.setTextureRect(sf::IntRect(0,0,126,126));
this->tileSprite.setPosition(this->xPos , this->yPos);
if(this->tileStatus == FREE)
{
tileSprite.setTextureRect(sf::IntRect(0,0,126,126));
}
else if(this->tileStatus == CROSS)
{
tileSprite.setTextureRect(sf::IntRect(126,0,126,126));
}
else if(this->tileStatus == CIRCLE)
{
tileSprite.setTextureRect(sf::IntRect(252,0,126,126));
}
}
void Tile::setTileStatus(TileStatus tileStatus)
{
this->tileStatus = tileStatus;
if(this->tileStatus == FREE)
{
tileSprite.setTextureRect(sf::IntRect(0,0,width,height));
}
else if(this->tileStatus == CROSS)
{
tileSprite.setTextureRect(sf::IntRect(126,0,width,height));
}
else if(this->tileStatus == CIRCLE)
{
tileSprite.setTextureRect(sf::IntRect(252,0,width,height));
}
}
sf::Sprite Tile::getTileSprite()
{
return tileSprite;
}
TileStatus Tile::getTileStatus()
{
return this->tileStatus;
}
基本上我加載this spritesheet如在我的主要功能的紋理,然後我將其傳遞到瓷磚功能構造函數,然後我可以設置和更改它的子矩形和其他東西。
現在這裏的問題是,即使它編譯沒有任何錯誤的精靈沒有顯示。但是,當我將代碼寫入Tile類時,代之以圖像顯示。任何人都可以告訴我我做錯了什麼?
這裏的main.cpp中
#include <SFML\System.hpp>
#include <SFML\Graphics.hpp>
#include <SFML\Window.hpp>
#include "tile.h"
int main()
{
sf::RenderWindow window(sf::VideoMode(800,600,32) , "Tic - Tac - Toe");
// Load background image and display it
sf::Texture BackgroundTexture;
if(!BackgroundTexture.loadFromFile("background.jpeg"))
{
return EXIT_FAILURE;
}
sf::Sprite Background(BackgroundTexture);
Background.setTextureRect(sf::IntRect(0,0,800,600));
Background.setPosition(0,0);
// Load the spritesheet
sf::Texture Spritesheet;
if(!Spritesheet.loadFromFile("sprites.png"))
{
return EXIT_FAILURE;
}
// Load font and create graphical text
sf::Font font;
if (!font.loadFromFile("arial.ttf"))
{
return EXIT_FAILURE;
}
sf::Text TurnNotification;
//limit the framerate to 30FPS
window.setFramerateLimit(30);
/*********************************************/
//THIS WORKS BUT IT'S NOT WHAT I NEED
//sf::Sprite tileSprite;
//tileSprite.setTexture(Spritesheet);
//tileSprite.setTextureRect(sf::IntRect(126,0,126,126));
//tileSprite.setPosition(126,126);
//This doesn't work
Tile cTile(Spritesheet, CROSS, 0 , 0);
while(window.isOpen())
{
window.draw(Background);
window.draw(cTile.getTileSprite());
//window.draw(tileSprite);
sf::Event event;
while(window.pollEvent(event))
{
if(event.type == sf::Event::Closed)
{
window.close();
}
if((event.type == sf::Event::KeyPressed) && (sf::Keyboard::Escape))
{
window.close();
}
}
window.display();
}
return EXIT_SUCCESS;
}
我希望我的代碼是不是太亂。我仍然是一個新手
感謝您對解決方案的快速反應和巨大的感謝。這是如此簡單,但我從來沒有想過改變參數作爲參考。謝謝!! – MrPlow 2012-08-19 18:58:51
沒問題,玩得開心編程:) – lccarrasco 2012-08-19 19:00:03