我正在写一个允许移动绘图的龟类。我没有使用任何游戏循环。这个乌龟对象的用户 将发出如下命令:
Turtle t;
t.forward(50);
t.left(90);
Turtle构造函数负责创建窗口和渲染器。 所有互动都是通过编程。不轮询任何类型的键盘事件。现在我可以使用以下代码渲染螺旋动画:
int main(int argc, char* args[]){
Turtle t;
t.clear();
t.color("red");
int numofside = 100;
t.shape("seaturtle");
for (int i=0; i<numofside; i++)
{
t.forward(i + 5);
t.left(75);
SDL_RenderPresent(m_pRenderer);
SDL_Delay(50);
}
SDL_Delay(5000);
IMG_Quit();
SDL_Quit();
}
现在最大的问题是如何让seaturtle图像跟随正在渲染的线?
我理解在SDL2中使用帧(循环)进行动画的概念,即清除屏幕,在当前位置渲染,增加x,y位置。
但我无法清除屏幕,因为它会清除我已经绘制的现有线条。
是否有任何SDL纹理功能可以在不删除整个屏幕的情况下显示和隐藏图像?或任何想法吗?
答案 0 :(得分:1)
您可以使用XOR绘制“乌龟”。然后你重新绘制它以擦除它。
您还可以跟踪绘制的线条,以便在擦除显示时可以重绘它们。
或者您可以使用多个绘图表面。一个用于“背景”,一个用于绘制线条,一个用于“乌龟”。然后在移动时绘制/擦除/重绘乌龟表面,最后将所有图层绘制在彼此之上以显示它。一种多缓冲方法。
答案 1 :(得分:1)
保存您绘制的任何内容,比如说,将它们放在一个向量中(通过抽象基类DrawInstruction*
)。然后你可以在清除屏幕后重绘。该向量要么是全局的,要么更好,是Turtle
类的成员。