Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Видимо в поток 
:(
    Опции темы
InsideYou
Дата 3.6.2008, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 25.5.2008

Репутация: нет
Всего: нет



Доброе время суток!

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

Заранее спасибо.

P.S. Срочно-завтра сдача курсача.
PM MAIL   Вверх
rrrFer
Дата 3.6.2008, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 11.5.2008
Где: Красноярск

Репутация: нет
Всего: 1



думаю примерно так:
Код

void Timer(){
    int Time;                        
    obj *object1=new obj;
    obj *object2=new obj;
    obj *object3=new obj;
    //обработка по таймеру
    for(Time=0;Time<100;Time++){
        object1->step;
        object2->step;
        object3->step;
    }
}

тут obj это обьекты которые двигаютс, в Тime отсчитывается как долго они будут двигаться, если до какого-то события то пиши:
for(;;){} а внутри где-нибудь break; step() - обьект будет сдвигаться, тогда получистя что обрабатываться объекты будут почти параллельно. Вобщем функция отрисовки того самого хаотичнодвигающегося объекта должна прерываться и передавать управление в Timer(), чтобы отсчитывать время можно использвать time() из time.h, то есть:
Код

#include <time.h>
int step(){
    time_t t1,t2; int i=0;
    for(time(&t1),time(&t2),i=0;difftime(t2,t1)<10;time(&t2)){
    //двигаешь
    }
    return 1; //возврашаешься в Timer()
}


Это сообщение отредактировал(а) rrrFer - 3.6.2008, 18:04
PM MAIL WWW ICQ   Вверх
InsideYou
Дата 3.6.2008, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 25.5.2008

Репутация: нет
Всего: нет



Насчёт 3х движущихся объектов Вы правы, но суть не в этом. Пока они все 3 не закончат свой путь мышка  двигатся не будет. Суть игры-может видели когда-то: летают по окну 2-3 квадрата и ты сматываешь от них своим хвадратом при помощи мышки. Вот так вот.
PM MAIL   Вверх
dizzy1984
Дата 4.6.2008, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 10
Всего: 25



Не знаю нужно ли тебе теперь решение, но можно попробовать добавить вызовы функции PumpMessage() в то вычисление, которое создает длительный промежуток "зависания" приложения. Чем больше - тем лучше.
Код

BOOL PumpMessage()
{
    CWinThread *pThread = AfxGetThread();
    MSG msg;
    while(::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
    {
        if (!pThread->PumpMessage()) 
            break; 
    }
    return TRUE;
};

Вся соль в том, что для отклика на ввод пользователя и расчетов программы в MFC используется 1 поток. (AFAIK В отличие от delphy, где нет таких проблем). Эта функция прерывает работу программы для отработки ввода пользователя.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0634 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.