Russian Qt Forum
Ноябрь 26, 2024, 09:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 ... 3 4 [5] 6   Вниз
  Печать  
Автор Тема: Вторая форма в проекте.  (Прочитано 30590 раз)
mutineer
Гость
« Ответ #60 : Июнь 06, 2013, 13:49 »

Нажал кнопку - рассчитал следующее действие, запомнил что сделать надо, запустил таймер, вышел из функции.
Пришел таймаут - выполнил текущее действие, рассчитал следующее, в очередь записал, запустил таймер, вышел из функции
Пришел таймаут - см. выше
Записан
Alexu007
Гость
« Ответ #61 : Июнь 06, 2013, 14:18 »

Что значит рассчитал - выполнил? Это если действия однотипные: рассчитал картинку на экране - сбросил в буфер, при следующем таймере вывел буфер на экран, и рассчитываешь следующую картинку. Это только для мультиков годится.
Записан
mutineer
Гость
« Ответ #62 : Июнь 06, 2013, 14:19 »

не обязательно там должны быть однотипные действия. Но вообще делай как хочешь
« Последнее редактирование: Июнь 06, 2013, 14:20 от mutineer » Записан
Alexu007
Гость
« Ответ #63 : Июнь 06, 2013, 14:52 »

Да не в том дело, как хочешь, а как правильно? Я сделал уже как хочу и результат меня не устраивает. Хотя игра и заиграла, что уже неплохо.

Как  это необязательно однотипные действия, если раз за разом вызывается одна и та же функция таймера, и управление всегда передаётся в начало? Поэтому я и написал - в зависимости от игровой ситуации управление передавать в нужную точку (и эту точку хранить в памяти между вызовами таймера) - чтобы действия были неоднотипными. Ну в общем направление мыслей понятно, осталось реализовать.

Кстати, в билдере нет сигналов-слотов, я там строил игровой процесс таки в таймере. Но я вызывал его один раз, и весь ход проходил в нём, а паузы делал старыми добрыми слипами. Может поэтому там с выводом картинок проблемы были, какие-то пустые квадратики проскакивали время от времени - некрасиво.
Записан
mutineer
Гость
« Ответ #64 : Июнь 06, 2013, 15:03 »

Что мешает запоминать тип действия и необходимые параметры, а в таймауте выполнять действие, соответствующее типу?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #65 : Июнь 06, 2013, 15:11 »

Да не в том дело, как хочешь, а как правильно?
Правильно придерживаться событийной схемы (event-driven), никакого геморроя там нет.  Да, запоминать текущее состояния, выполнять квант работы и снова ждать события. Это нормально, все так или иначе расстаются с "удобным" sleep'ом, не затягивайте
Записан
Alexu007
Гость
« Ответ #66 : Июнь 06, 2013, 15:18 »

Что мешает запоминать тип действия и необходимые параметры, а в таймауте выполнять действие, соответствующее типу?
Улыбающийся я не умею в программе выполнять действия, я умею вызывать функции, которые выполняют разные действия.
Записан
mutineer
Гость
« Ответ #67 : Июнь 06, 2013, 15:28 »

Что мешает запоминать тип действия и необходимые параметры, а в таймауте выполнять действие, соответствующее типу?
Улыбающийся я не умею в программе выполнять действия, я умею вызывать функции, которые выполняют разные действия.

Код:
switch(actionType)
{
     case AI_TURN:
            doAiTurn();
            break;

     case HUMAN_TURN:
            doHumanTurn();
            break;

     case INDICATE_HIT:
            doIndicateHit();
            break;

     ...
}
Записан
Alexu007
Гость
« Ответ #68 : Июнь 06, 2013, 16:20 »

А это не одно и то же? Всё равно в результате разные функции вызываются.

У меня всё осложняется необходимостью преключения между игровыми полями - в морском бое (в отличие от примитивных шахмат) их целых два. И переключение не мгновенное - неактивное ещё и прозрачное на 0.8, и при переключении эта прозрачность "перетекает" из одного окна в другое - так красиво, и отказываться от этого я не собираюсь. Бум работать.

Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #69 : Июнь 06, 2013, 16:47 »

Фигня какая!!! Я рэндом из qrand() сваял:

Код
C++ (Qt)
int random(int x)
   {
   return qrand() % x;
   }

Я и слип из таймера и глобальной переменной замастырю. В переменную число нужное вставляем, например 8, а по слотам таймера каждые 100мс единичку вычитаем до нуля - получите 0,8 сек. И программу переделывать будет ненада... поменять только Sleep на Pauza
если так уж хочется паузу в процедурах:
Код
C++ (Qt)
void pause(int ms)
{
   QEventLoop el;
   QTimer t;
   connect(&t, SIGNAL(timeout()), &el, SLOT(quit()));
   t.start(ms);
   el.exec();
}
Более-менее правильная Qt реализация.
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
Alexu007
Гость
« Ответ #70 : Июнь 06, 2013, 17:02 »

Wow! Спасибо огромное! Ща сразу и пропробуем...
Записан
mutineer
Гость
« Ответ #71 : Июнь 06, 2013, 17:16 »

А это не одно и то же? Всё равно в результате разные функции вызываются.

Не одно и то же с чем? С твоими слипами не одно и то же
Записан
Alexu007
Гость
« Ответ #72 : Июнь 06, 2013, 18:31 »

pause рулит!!! Всё заработало!

Последний штрих остался. Нужно, чтобы по нажатию кнопки все три формы одновременно минимизировались на панель задач, и обратно - при клике на любой форме восстанавливались. Какие там сигналы они испускают при минимизации и восстановлении?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #73 : Июнь 06, 2013, 19:01 »

Какие там сигналы они испускают при минимизации и восстановлении?
Не привыкайте спрашивать на форуме не заглянув в доку - верный путь нарваться на неприятности
Записан
Alexu007
Гость
« Ответ #74 : Июнь 06, 2013, 21:08 »

Как туда заглянуть? Меня интересуют сигналы, которые генерирует форма в разных ситуациях.
Записан
Страниц: 1 ... 3 4 [5] 6   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.109 секунд. Запросов: 23.