关于线后图像动画的SDL2和C ++

时间:2016-07-05 14:07:18

标签: c++ sdl

我正在写一个允许移动绘图的龟类。我没有使用任何游戏循环。这个乌龟对象的用户 将发出如下命令:

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纹理功能可以在不删除整个屏幕的情况下显示和隐藏图像?或任何想法吗?

2 个答案:

答案 0 :(得分:1)

您可以使用XOR绘制“乌龟”。然后你重新绘制它以擦除它。

您还可以跟踪绘制的线条,以便在擦除显示时可以重绘它们。

或者您可以使用多个绘图表面。一个用于“背景”,一个用于绘制线条,一个用于“乌龟”。然后在移动时绘制/擦除/重绘乌龟表面,最后将所有图层绘制在彼此之上以显示它。一种多缓冲方法。

答案 1 :(得分:1)

保存您绘制的任何内容,比如说,将它们放在一个向量中(通过抽象基类DrawInstruction*)。然后你可以在清除屏幕后重绘。该向量要么是全局的,要么更好,是Turtle类的成员。