Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2011, 08:30   #1
Silly Student
Пользователь
 
Регистрация: 28.03.2011
Сообщений: 32
По умолчанию Движение разных Image (не могу продумать реализацию)

Не могу продумать реализацию вот такой программы:

Есть аэропорт, в нем есть стоянка самолетов, рулежные дорожки, взлетная полоса, и сами самолеты (5 штук). Они могут взлетать, и садиться, пользователь выбирает в выпадающем списке номер самолета и номер дорожки, по которой он будет взлетать, либо по которой будет садиться.
Чтобы было понятнее, вот скриншот того, что есть сейчас. (справа для взлета полосы, слева посадочные).

Я не могу осилить реализацию движения Была идея с таймерами, но мне потребуется ОЧЕНЬ много таймеров. (т.е. по каждому отрезку пути, для каждого самолета и варианта попадания его на дорожку нужен будет отдельный таймер). Была идея сделать через while. (чтото вроде
Код:
while(Form1->Image1->Position->Left!=470)
{
Form1->Image1->Position++;
}
Но while (как и for) не дают плавного перемещения, а двигают сразу. Даже если вставиь внутрь какуюто паузу, то всеравно двигают сразу.

Есть у кого идеи ? Может какую внешнию либу, или простейший граф движок использовать для движения ?
Silly Student вне форума Ответить с цитированием
Старый 24.10.2011, 08:40   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Используйте конструкцию:
Код:
__fastcall TFormMain::TFormMain(TComponent* Owner) : TForm(Owner)
{
    Application->OnIdle = IdleLoop;
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::IdleLoop(TObject*, bool &done)
{
// Всё что нужно двигать
}
OnIdle, осуществляет бесконечный цикл с реакцией на нажатие кнопок.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 24.10.2011, 09:09   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Цитата:
Была идея с таймерами, но мне потребуется ОЧЕНЬ много таймеров.
Всего один таймер обеспечивающий необходимую плавность движения одного самого быстрого объекта. Все объекты перемещаются в событии данного таймера на "пройденное" им (объектом) за это время (интервал таймера) расстояние. скорость движения объекта в тиках (интервалах таймера).
Все управление просто меняет данный атрибут (скорость в тиках).
скорость рассматривается как вектор (имеет направление и величину).
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 24.10.2011, 10:28   #4
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

У таймеров есть один недостаток. Если перерисовка объекта занимает время, большее чем один тик, он продлевает своё время на величину следующего. В связи с этим может происходить частичная (иногда и полная) синхронизация движения объектов.
В рекомендуемом мной способе, задержка движения задаётся в структуре самого объекта, поэтому синхронизации не происходит.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 24.10.2011, 20:26   #5
Silly Student
Пользователь
 
Регистрация: 28.03.2011
Сообщений: 32
По умолчанию

Народ, вы не поняли (ну или я криво выразился) : мне надо двигать самолеты на вместе, а независимо, отдельно друг от друга. Потому я собственно и не вижу способа засунуть все в один таймер.
Про Application->OnIdle тоже неясно: на первый взгляд это выглядит как тотже таймер )
Silly Student вне форума Ответить с цитированием
Старый 24.10.2011, 20:39   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
на вместе, а независимо
Тогда в разных потоках пусть двигаются.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.10.2011, 21:08   #7
Silly Student
Пользователь
 
Регистрация: 28.03.2011
Сообщений: 32
По умолчанию

А как мне засунуть один таймер во много потоков ?
Silly Student вне форума Ответить с цитированием
Старый 25.10.2011, 09:53   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Цитата:
мне надо двигать самолеты на вместе, а независимо, отдельно друг от друга.
КАЖДЫЙ объект перемещаются в событии данного таймера независимо от других на СВОЕ "пройденное" РАССТОЯНИЕ. если двигать не не надо то пусть остается на месте.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 25.10.2011, 20:09   #9
Silly Student
Пользователь
 
Регистрация: 28.03.2011
Сообщений: 32
По умолчанию

А можно маленький пример кода ? Слабо понимаю вашу мысль. Ведь я тогда не смогу в таймере менять направление движения например.
Silly Student вне форума Ответить с цитированием
Старый 25.10.2011, 23:36   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, пример, так пример...
пример не мой. взят на форуме.

все шарики "двигаются" одним таймером.
Вложения
Тип файла: rar shariki_clr.rar (179.8 Кб, 66 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
что значит Не могу найти реализацию метода BitBtnDobRashodОкClick? TotKtoNado Общие вопросы Delphi 3 14.07.2011 20:42
Движение квадрата по наклонной плоскости. НЕ могу найти ошибку Rocky095 Помощь студентам 0 18.01.2011 16:28
Как сделать движение 2-ух объектов одновременно с помощью разных клавишь? Ckomoroh Общие вопросы Delphi 5 24.10.2009 23:34
Движение указателя по форме или Image nevo Компоненты Delphi 5 06.04.2008 21:00