Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Hsac
13 / 13 / 1
Регистрация: 30.06.2013
Сообщений: 157
#1

Параллельное выполнение метода (анимации) - C++

31.07.2014, 03:22. Просмотров 281. Ответов 9
Метки нет (Все метки)

есть метод который двигает одну карточку. происходит анимация его движения и на этом его работа заканчивается. жмем еще раз и двигается следующая карточка. но если запустить метод до завершения предыдущего анимация оборвется и начнется движение следующей карточки. мне нужно сделать так чтобы предыдущая не прерывалась а шла параллельно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void MosaicTile::Move(const Point pos, bool instant, bool Hodor)
{
    if (instant)
        Place();
    tilePos = pos;
    anim = true;
    timer = 0;
    curPos.x = sprite->GetDrawSpec().mMatrix.m20;
    curPos.y = sprite->GetDrawSpec().mMatrix.m21;
    sVector2 drawPos = field->GetTileDrawPos(pos);
    destPos = drawPos;
    if (Hodor)
    {
    moveTime = static_cast<unsigned int>((curPos - destPos).Magnitude() / moveSpeed * 4000.0f);
    }
    else 
    moveTime = 0;
}
а здесь происходит апдейт движения
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
bool MosaicTile::Update(unsigned int delta)
{
    if (anim)
    {
        timer += delta;
        if (timer < moveTime)
        {
            p = static_cast<float>(timer) / static_cast<float>(moveTime);
            sprite->GetDrawSpec().mMatrix.m20 = p * destPos.x + (1.0f - p) * curPos.x;
            sprite->GetDrawSpec().mMatrix.m21 = p * destPos.y + (1.0f - p) * curPos.y;
        }
        else
        {
            check=true;
            field->tilesLayer->AddChild(sprite);
            Place();
        }
    }
    return anim;
}
метод мув вызывается с другого класса
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2014, 03:22     Параллельное выполнение метода (анимации)
Посмотрите здесь:

параллельное выполнение - C++
приветствую вас. есть проблема.. написал программку в c builder. Там есть цикл, который крутит выполнение некоторых операций - сканирует...

Параллельное выполнение - C++
Добрый вечер, у меня есть код; while (true) { F (Handle_ArcheAge); //поднять предмет health90 (Handle_ArcheAge); mana30...

Ищу толковый текст по поводу <thread>, а именно про параллельное выполнение функций - C++
Никак не могу найти действительно толковый текст по поводу &lt;thread&gt;, именно параллельное выполнение функций, на примере самой простейшего...

Параллельное программирование - C++
Подскажите учебник с помощью которого можно научиться параллельному программированию

Параллельное программирование в С++ - C++
Здравствуйте! я новичок в параллельном программировании. Помогите пожалуйста с задачкой!! Есть одна глобальная переменная, которая должна...

Параллельное программирвоание - C++
Всем привет! Не знал в какую тему писать вопрос. решил сюда ибо в этом деле новичок. Начали изучать курс параллельного...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
QGuest
8 / 8 / 0
Регистрация: 08.01.2013
Сообщений: 85
31.07.2014, 03:45     Параллельное выполнение метода (анимации) #2
Можно код где собственно вызывается эти методы? код нажатия кнопки.
Hsac
13 / 13 / 1
Регистрация: 30.06.2013
Сообщений: 157
31.07.2014, 03:52  [ТС]     Параллельное выполнение метода (анимации) #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void MosaicField::SwapForHint(const Point pos1, const Point pos2)
{
    MosaicTile *t1 = field[pos1.mX][pos1.mY];
    MosaicTile *t2 = field[pos2.mX][pos2.mY];
    dragLayer->AddChild(t1->sprite);
    t1->Move(pos2, true, true);
    moveLayer->AddChild(t2->sprite);
    t2->Move(pos1, true, true);
    MoveTime=t2->GetMoveTime();
    field[pos1.mX][pos1.mY] = t2;
    field[pos2.mX][pos2.mY] = t1;
    ParticleTile = field[pos2.mX][pos2.mY];
}
две карточки меняются местами
QGuest
8 / 8 / 0
Регистрация: 08.01.2013
Сообщений: 85
31.07.2014, 03:56     Параллельное выполнение метода (анимации) #4
Цитата Сообщение от Hsac Посмотреть сообщение
две карточки меняются местами
Я ничего не понимаю. Где собственно цикл обновления анимации карточек?
Hsac
13 / 13 / 1
Регистрация: 30.06.2013
Сообщений: 157
31.07.2014, 04:05  [ТС]     Параллельное выполнение метода (анимации) #5
вызываем метод swap он вызывает метод move движения карточек происходят в метода апдейт
QGuest
8 / 8 / 0
Регистрация: 08.01.2013
Сообщений: 85
31.07.2014, 04:11     Параллельное выполнение метода (анимации) #6
Цитата Сообщение от Hsac Посмотреть сообщение
вызываем метод swap он вызывает метод move движения карточек происходят в метода апдейт
все равно не понимаю. Update же исполнится один раз. Как тогда происходит анимация?
Hsac
13 / 13 / 1
Регистрация: 30.06.2013
Сообщений: 157
31.07.2014, 04:17  [ТС]     Параллельное выполнение метода (анимации) #7
нет метод апдейт он как таймер обновляется 100 раз в секунду и работает все время
QGuest
8 / 8 / 0
Регистрация: 08.01.2013
Сообщений: 85
31.07.2014, 04:24     Параллельное выполнение метода (анимации) #8
Цитата Сообщение от Hsac Посмотреть сообщение
нет метод апдейт он как таймер обновляется 100 раз в секунду и работает все время
а почему? тогда ясно почему при повторном нажатии предыдущий тайл перестает двигаться. Вы просто заменяете его новым, и теперь 100 раз в скунду обновляется новый тайл, а не старый.
Hsac
13 / 13 / 1
Регистрация: 30.06.2013
Сообщений: 157
31.07.2014, 04:27  [ТС]     Параллельное выполнение метода (анимации) #9
мда ну спасибо причину та я давно знаю мне нужно чтобы старая не прерывалась а продолжала идти параллельно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2014, 05:07     Параллельное выполнение метода (анимации)
Еще ссылки по теме:

Параллельное программирование на C++ - C++
Вот например происходит какое то действие, это действие длится 5 минут. И вот я запускаю это действие и жду, жду, жду, и тут мне надоело...

Параллельное программирование - C++
Как составить параллельную программу вычисления среднего арифметического элементов вектора?

Параллельное исполнение программы - C++
Здорова господа! Я от новую задачку делаю, полностью на новую тему, наверно интересную, в общем сразу условие приведу: Понятия потока,...

Параллельное программирование + графика - C++
Проблема такая: препод сказал написать программу, где будут два квадрата двигаться туда сюда и что бы их прорисовка, движение и т.д. были...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
QGuest
8 / 8 / 0
Регистрация: 08.01.2013
Сообщений: 85
31.07.2014, 05:07     Параллельное выполнение метода (анимации) #10
Цитата Сообщение от Hsac Посмотреть сообщение
мда ну спасибо причину та я давно знаю мне нужно чтобы старая не прерывалась а продолжала идти параллельно
Ну если причина и неправильное поведение вам известно, то в чем дело? Вам надо самому переделать логику программы. Все предоставленные методы вообще ничем не помогут в решении: проблема не в них.

Добавлено через 8 минут
Вам надо создать класс который будет все время обновлять фигуры который он хранит.
Что-то вроде такого:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class AnimationFactory {
private:
    vector<MosaicTile> shapes;
public:
    void add(MosaicTile& tile) {/**/}
    
    void run() {
        int time;
        while(true) {
            time = getCurrentTime();
            for(int i =0; i < shapes.size(); i++) {
                if(!shapes[i].isStoped()) shapes.Update(time);
                else shapes.erase(shapes.begin() + i);
            }
            Sleep(10);
        }
    }
}
Yandex
Объявления
31.07.2014, 05:07     Параллельное выполнение метода (анимации)
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru