【问题标题】:SDL2 and C++ regarding image animation following a lineSDL2 和 C++ 关于图像动画跟随线
【发布时间】:2016-07-05 14:07:17
【问题描述】:

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

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();
}

现在最大的问题是如何让海龟图像跟随正在渲染的线条?

我理解使用帧(循环)在 SDL2 中做动画的概念,即清除屏幕,在当前位置渲染,增加 x,y 位置。

但我无法清除屏幕,因为它会清除我现有的已绘制线条。

有没有什么SDL贴图功能可以在不删除整个屏幕的情况下让图像显示和隐藏?或者有什么想法吗?

【问题讨论】:

    标签: c++ sdl


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-12
        • 2012-06-30
        • 1970-01-01
        • 2011-10-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多