![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Доброе время суток!
Курю новичковую ветку и пока не нашел решение. Проблема: Остановить выполнение процедуры в конкретном месте на время выполнения анимации(n-циклов таймера которые выполняют пошаговое перемещение по окну из точки А в точку Б) после чего продолжить выполнение процедуры. [спойлер](далее формулировка задачи чтобы можно было ответить "а оно тебе надо?") 6 складов с ящиками, 1 Вася. Василий берет команды из стека(команды вида "из первого в пятый") и таскает ящики между складами. Скорость выполнения регулируется трекбаром на экране. Один ньюанс: принес ящик на заполненный склад - несет обратно, спрашивает другую команду у пользователя; пришел забирать ящик с пустого склада - спрашивает у пользователя другую команду. Касательно решения: да, можно расколотить на две процедуры то что до запуска таймера и то что после. Тогда придется заняться рукоделием и дописать в таймер еще код для того чтобы определить что Вася должен делать после того как он положил ящик на склад(то ли вернул ящик после попытки запихать на заполненный склад(и нужно запросить другую команду у юзверя), то ли выполнил команду и должен взять из стека следующую) [/спойлер] Добавлено 23.07.10 Подсказали добрые люди что сие решается при помощи потоков(отдельный поток на обработку анимации), попробуем Последний раз редактировалось Tier, 23.07.2010 в 12:18. |
#2
|
|||
|
|||
![]() засунуть процедурувпоток и суспендить...
|
#3
|
|||
|
|||
![]() А я бы подругому решал эту проблему.
У тебя есть некоторое исполнительное устройство (Вася). Вася может выполнять следующий набор команд: - POP(S): взять ящик со склада (должен быть на этом складе и Вяся и ящик и у Васи не должно быть ящика); - PUT(S): положить ящик; (Вася должен быть на нужном складе, у него д.б. ящик и на складе должно быть место) -MOVE(S): перемещаться между складами. Теперь о командах пользователя. Команда пользователя представляет собой микропрограмму. Путь надо отнести ящик со склада 1 на склад 2. Тогда микропрограмма выглядит так: MOVE(1) POP(1) MOVE(2) PUT(2) Если после выполнения команды пользователя Вася должен вернуться на изначальный склад, то надо добавить MOVE(1) Каждый шаг отрабатывается отдельно (у тебя в коде). Т.е. для каждой команды надо написать процедуру, которая будет делать анимацию. Делать сама и не возвращать управление, пока не выполнит. Тогда у тебя будет некоторый унифицированный механизм исполнения потока таких команд. Теперь про отрисовку. У тебя должен быть объект, который себя отрисовывает в нужных координатах по тем условиям (есть у Васи ящик или нет), которые заданны в нем (объекте). Все. Осталост только заблокировать ввод пользователя до конца исполнения программы ![]() |