Provokator
Гость
|
|
« : 07-05-2009 13:28 » |
|
Подскажите пожалуйста как создать движущийся объект на общем фоне в Turbo C++. Для примера что либо не большое, кружок или снежинка. Желательно исходники с описанием, ну или хотя бы просто объяснить принцип работы. Заранее спасибо. Сильно не пинайте я только учусь . Если была такая тема то дайте ссылку.
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #1 : 07-05-2009 14:39 » |
|
принцип работы основан на спрайтах
Объект перед каждым перемещением сохраняет область, которую он займет, после того как он переместился, то восстанавливает сохраненную область
1 шаг. Появление 1а Сохранить область под объектом 1б Показать объект 2 шаг Перемещение 2а Сохранить область под объектом 2б Показать объект 2в Восстановить область сохраненную в шаге 1а
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Provokator
Гость
|
|
« Ответ #2 : 11-05-2009 07:47 » |
|
Sla, Спасибо большое за алгоритм !!! Мысль понял, но организовать не полечилось. Вышло или закрашивать движущийся объект цветом общего фона, но возникает проблема когда попадает на другой объект или постоянно приходится перерисовывать все объекты, что вызывает раздражающее мигание. Если не затруднит, подскажи, как сохранить область под объектом (если не плохо знаешь ТС++, то с помощью каких функций).
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #3 : 11-05-2009 08:04 » |
|
Как сохранить область? Для примера - прямоугольник Известна площадь занимая прямоугольником, следовательно можно выделить в куче объем необходимой памяти и сохранить область. Вот затрудняюсь назвать функции, что-нибудь типа getimages, putimages, библиотеки bgi и соответственно - функции работы с указателями.
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #4 : 11-05-2009 09:51 » |
|
постоянно приходится перерисовывать все объекты, что вызывает раздражающее мигание Используй двойную буфферизацию. Самый простой путь - взять режим VGAMid (или EGAHi) 640х350 16 цветов, который обеспечивает 2 видеостраницы (с номерами 0 и 1). Одна страница (visual) - та, которую видит пользователь, вторая страница (active) - куда происходит вывод при рисовании. Тогда кадр отрисовывается на активной странице: сперва очистить, потом всё нарисовать; а в это время пользователь смотрит на видимую страницу, на которой картинка не меняется; затем страницы меняются местами: бывшая активная становится видимой, бывшая видимая становится активной - цикл повторяется.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Provokator
Гость
|
|
« Ответ #5 : 13-05-2009 14:47 » |
|
Sla, и dimka, спс за хорошие подсказки и умные мысли, но я же говорю, что только начинаю разбираться, и эти способы может и проще для системы или более опытного программиста, но не как не проще для меня. Так что буду дальше разбираться и искать более простой способ для себя.
Р.s. Если честно мне сверхъестественного ни чего не надо, я пытаюсь создать простую анимацию - снеговик, ёлка с мигающими игрушками и падающие снежинки. Пока проблемы возникли только с анимированными объектами, так что если есть у кого то схожие по принципу исходники поделитесь, буду премного благодарен !!!
|
|
|
Записан
|
|
|
|
Provokator
Гость
|
|
« Ответ #6 : 13-05-2009 14:50 » |
|
dimka, кстати, если есть примеры того что ты описал, скинь, пожалуйста я попробую разобраться что и как
|
|
|
Записан
|
|
|
|
Serg79
|
|
« Ответ #7 : 13-05-2009 19:01 » |
|
Provokator вот посмотри, пример небольшой анимации.
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #8 : 13-05-2009 21:02 » |
|
Serg79, я так понял, что речь идёт про Turbo C++ под DOS.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Serg79
|
|
« Ответ #9 : 14-05-2009 04:50 » |
|
dimka какая разница, алгоритм программы тот же останется, только API поменяется. А из всех функций API, там используется для отрисовки только 3 функции.
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #10 : 14-05-2009 07:24 » |
|
Serg79, программирования под Windows и DOS несколько различаются за счёт того, что в Windows используются callback. Начинающие это воспринимают очень туго и без дополнительных пояснений не понимают таких программ.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
|