在這裡簡單介紹一下兩者,兩者都是 Image
,但是還是有一點點區別的
Texture
Texture
本身不是物件,因此不能移動它。Sprite
Texture + Rect Entity
就是Sprite
了。剛剛說過,Sprite
就是Texture
經過裁減所獲得的物件,所以在建立Sprite
之前,首先我們要匯入Texture
:
sf::Texture texture;
if (!texture.loadFromFile("pic.png")) {
// Error handle
}
這樣就能匯入Texture
了。
當然我們也可以不用匯入整張圖片:
// load a 32x32 rectangle that starts at (10, 10)
if (!texture.loadFromFile("image.png", sf::IntRect(10, 10, 32, 32)))
{
// Error handle
}
sf::IntRect
代表著矩形,前兩個參數代表座標,後兩個參數代表長寬。(10, 10, 32, 32)
代表圖片座標(10, 10)
,長寬(32, 32)
所包含的部分。
有了Texture
之後我們就能很快的建立Sprite
了。
sf::Sprite sprite;
sprite.setSprite(texture);
// or
sf::Sprite sprite2(texture);
至於畫在螢幕上的方法
window.draw(sprite);
你可以隨意調整Sprite
的顏色
sprite.setColor(sf::Color(0, 255, 0));
sprite.setColor(sf::Color(255, 255, 255, 128));
前面說過,Sprite
不只是單單一張圖片,它是個物件,所以能夠操縱它。
// position
sprite.setPosition(sf::Vector2f(10.f, 50.f)); // absolute position
sprite.move(sf::Vector2f(5.f, 10.f)); // offset relative to the current position
// rotation
sprite.setRotation(90.f); // absolute angle
sprite.rotate(15.f); // offset relative to the current angle
// scale
sprite.setScale(sf::Vector2f(0.5f, 2.f)); // absolute scale factor
sprite.scale(sf::Vector2f(1.5f, 3.f)); // factor relative to the current scale
第一天舉過的小例子加上一些Sprite
的操作
#include <SFML/Audio.hpp>
#include <SFML/Graphics.hpp>
int main()
{
sf::RenderWindow window(sf::VideoMode(1280, 720), "SFML window");
sf::Texture texture;
if (!texture.loadFromFile("1.png"))
return EXIT_FAILURE;
sf::Sprite sprite(texture);
sprite.setPosition(sf::Vector2f(400.f, 260.f));
sprite.setScale(sf::Vector2f(0.5f, 0.5f));
sprite.rotate(15.f);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
window.clear();
window.draw(sprite);
window.display();
}
return EXIT_SUCCESS;
}