如何解决滚动背景图像,无法隐藏接缝,c++ raylib
我试图让滚动背景在背景图像小于程序窗口的情况下工作。为此,我创建了一个 for 循环来移动两组相同的复制图像。
奇怪的是,两组图像不断地分开,而不是无缝地保持在一起。
这是使用 C++ 和 raylib,但在四处搜索后,我不确定这是 raylib 的特定问题。
代码如下:
#include "raylib.h"
int main()
{
//preamble
const int windowW{600};
const int windowH{380};
float dt{0}; // for use with delta time between frames
SetTargetFPS(60);
InitWindow(windowW,windowH,"walk");
//backgrounds
Texture2D bg = LoadTexture("textures/far-buildings.png"); // 256 X 192
const float bgScale{0.5};
const int bgQty{2};
float bgX{0.0};
float bgX2{(bg.width * bgScale * bgQty)};
while (!WindowShouldClose())
{
//start drawing
BeginDrawing();
ClearBackground(WHITE);
dt = GetFrameTime();
bgX -= 250 * dt;
bgX2 -= 250 * dt;
if (bgX < -(bg.width * bgScale) * bgQty)
{
bgX = (bg.width * bgScale) * bgQty;
}
if (bgX2 < -(bg.width * bgScale) * bgQty)
{
bgX2 = (bg.width * bgScale) * bgQty;
}
for (int i = 0; i < bgQty; i++)
{
Vector2 bgPos{bgX + ((bg.width * bgScale) * i),0.0};
Vector2 bgPos2{bgX2 + ((bg.width * bgScale) * i),0.0};
DrawTextureEx(bg,bgPos,0.0,bgScale,WHITE);
DrawTextureEx(bg,bgPos2,WHITE);
}
DrawText(FormatText("dt: %f",dt),3,windowH - 10,10,GOLD);
EndDrawing();
}
UnloadTexture(bg);
CloseWindow();
}
这是背景图片:
解决方法
您的代码过于复杂。要获得重复,只需制作一个比源图像大的源矩形(UV 坐标),OpenGL 将重复它。将源矩形设置为与屏幕大小相同,并在滚动时偏移源矩形原点。
这是一个简单的例子。 https://github.com/JeffM2501/TestFrame/discussions/12
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。