是否有一种方法来绘制背景精灵一遍又一遍?或者添加一个背景精灵在彼此的顶部?



所以我正在尝试创建一个基于JumpKing的平台,我想使用我的精灵图像并使其在垂直方向上不断重复。有没有办法让它循环,或者你可以在彼此的顶部添加一个精灵背景。

Background::Background()
{
background.setTexture(Images::getImage(BACKGROUND));
}
void Background::draw(sf::RenderTarget &window, sf::RenderStates states) const
{
if(!getStates(HIDDEN)){
window.draw(background);
}
}
void Background::setScale(float x, float y)
{
background.setScale(x, y);
}

这是我绘制背景的代码,它正在从images.cpp获取getImage。getStates的意思是如果getState是隐藏的那么它就不会绘制背景

std::map<ImageName, sf::Texture> Images::images;
std::string Images::getImagePath(ImageName name)
{
switch(name){
case JUMP_KING: return "Images/Megaman.png";
case BACKGROUND: return "Images/sky background.png";
case PLATFORM: return "Images/platforms.png";
}
return std::string();
}
void Images::loadImage(ImageName name)
{
images[name].loadFromFile(getImagePath(name));
}
sf::Texture &Images::getImage(ImageName name)
{
loadImage(name);
return images[name];
}

这个images。cpp在这里它加载了我的游戏文件夹中的图片

States::States()
{
for(int i=0; i<LAST_STATE; i++){
states[StatesEnum(i)] = false;
}
}
bool States::getStates(StatesEnum state) const
{
return states.at(state);
}
void States::disableState(StatesEnum state)
{
states[state] = false;
}
void States::enableState(StatesEnum state)
{
states[state] = true;
}
void States::toggleState(StatesEnum state)
{
states[state] = !states[state];
}
enum StatesEnum{
WARP,
WARP_HORIZONTAL,
WARP_VERTICAL,
FORWARD,
BACKWARD,
HIDDEN,
JUMP,
GOING_UP,
LAST_STATE
}

这是我的状态枚举,它转到states.cpp,以便这些状态可以使用。这就是我的background。cpp如何使用

我想使用我的精灵图像,让它在垂直方向上不断重复

你应该加载纹理,而不是图片。

  • 图像是存储像素数组的抽象。
  • 纹理是存储在显卡中用于绘图的图像。

因此,要操作图像的属性,与它们如何绘制相关,请将它们加载为sf::Texture而不是sf::Image

话虽如此,你可以使用sf:Texture::setRepeated使纹理重复,然后将其设置为sf::Sprite的纹理(我假设你使用Background::background)。

我强烈建议你阅读完整的SFML文档,特别是关于这个主题的教程。

最新更新