2016-07-05 3 views
0

Я пишу класс черепах, который позволит перемещаться для рисования. Я не использую ни одного игрового цикла для него. Пользователь этой черепахи объекта будет выдавать команду типа:SDL2 и C++ относительно анимации изображения по строке

Turtle t; 
t.forward(50); 
t.left(90); 

Конструктор Черепаха берет заботится о создании окна и средства визуализации. Все взаимодействие осуществляется через программирование. Нет опроса любого типа событий клавиатуры. Сейчас я в состоянии оказать спиральную анимацию, используя следующий код:

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 с использованием рамки (loop), то есть прозрачного экрана, рендеринга в текущей позиции, увеличения x, y позиции.

Но я не могу очистить экран, так как он очистит мои существующие строки, которые были нарисованы.

Есть ли какая-либо функция текстуры SDL, которая может сделать показ изображения и скрыть, не удаляя весь экран? или любая идея сделать это?

ответ

1

Вы можете нарисовать «черепаху» с помощью XOR. Затем вы перерисовываете его, чтобы стереть его.

Вы также можете отслеживать нарисованные линии, чтобы их можно было перерисовать, если вы удалите экран.

Или вы можете использовать несколько поверхностей чертежа. Один для «фона», один для линий, которые вы рисуете, и один для «черепахи». Затем вы рисуете/стираете/перерисовываете поверхность черепахи только по мере ее перемещения и, наконец, рисуете все слои друг над другом, чтобы отобразить ее. Это своего рода мультибуферный подход.

1

Сохраните все, что вы нарисуете, скажем, поместите их в вектор (через абстрактный базовый класс DrawInstruction*). Затем вы можете перерисовать после четкого экрана. Вектор является глобальным или, еще лучше, членом вашего класса Turtle.

 Смежные вопросы

  • Нет связанных вопросов^_^