Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Движение в Turbo C++  (Прочитано 14024 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Provokator
Гость
« : 07-05-2009 13:28 » new

Подскажите пожалуйста как создать движущийся объект на общем фоне в Turbo C++.
Для примера что либо не большое, кружок или снежинка. Желательно исходники с описанием, ну или хотя бы просто объяснить  принцип работы.

Заранее спасибо.
Сильно не пинайте я только учусь Краснею. Если была такая тема то дайте ссылку.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 07-05-2009 14:39 » 

принцип работы основан на спрайтах

Объект перед каждым перемещением сохраняет область, которую он займет, после того как он переместился, то восстанавливает сохраненную область

1 шаг. Появление
  1а Сохранить область под объектом
  1б Показать объект
2 шаг Перемещение
  2а Сохранить область под объектом
  2б Показать объект
  2в Восстановить область сохраненную в шаге 1а
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Provokator
Гость
« Ответ #2 : 11-05-2009 07:47 » 

Sla, Спасибо большое за алгоритм !!! Мысль понял, но организовать не полечилось. Вышло или закрашивать движущийся объект цветом общего фона, но возникает проблема когда попадает на другой объект или  постоянно приходится перерисовывать все объекты, что вызывает раздражающее мигание. Если не затруднит, подскажи, как сохранить область под объектом (если не плохо знаешь ТС++, то с помощью каких функций).
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 11-05-2009 08:04 » 

Как сохранить область?

Для примера - прямоугольник Улыбаюсь

Известна площадь занимая прямоугольником, следовательно можно выделить в куче объем необходимой памяти и сохранить область.

Вот затрудняюсь назвать функции, что-нибудь типа getimages, putimages, библиотеки bgi
 и соответственно - функции работы с указателями.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 11-05-2009 09:51 » 

Цитата: Provokator
постоянно приходится перерисовывать все объекты, что вызывает раздражающее мигание
Используй двойную буфферизацию.

Самый простой путь - взять режим 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
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 13-05-2009 19:01 » 

Provokator вот посмотри, пример небольшой анимации.

* anima.zip (12.52 Кб - загружено 1160 раз.)
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 13-05-2009 21:02 » 

Serg79, я так понял, что речь идёт про Turbo C++ под DOS.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 14-05-2009 04:50 » 

dimka какая разница, алгоритм программы тот же останется, только API поменяется. А из всех функций API, там используется для отрисовки только 3 функции.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 14-05-2009 07:24 » 

Serg79, программирования под Windows и DOS несколько различаются за счёт того, что в Windows используются callback. Начинающие это воспринимают очень туго и без дополнительных пояснений не понимают таких программ.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines