Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Hsac
13 / 13 / 3
Регистрация: 30.06.2013
Сообщений: 163
#1

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

31.07.2014, 03:22. Просмотров 324. Ответов 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;
}
метод мув вызывается с другого класса
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2014, 03:22
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Параллельное выполнение метода (анимации) (C++):

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

параллельное выполнение
приветствую вас. есть проблема.. написал программку в c builder. Там есть...

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

Нарисуйте блок-схему реализации метода Queue::Get. Объясните работу метода
Нарисуйте блок-схему реализации метода Queue::Get. Объясните работу метода....

Составление метода выбора и метода обмена
Расположить в порядке убывания четные элементы левого нижнего треугольника...

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

9
QGuest
8 / 8 / 3
Регистрация: 08.01.2013
Сообщений: 85
31.07.2014, 03:45 #2
Можно код где собственно вызывается эти методы? код нажатия кнопки.
0
Hsac
13 / 13 / 3
Регистрация: 30.06.2013
Сообщений: 163
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];
}
две карточки меняются местами
0
QGuest
8 / 8 / 3
Регистрация: 08.01.2013
Сообщений: 85
31.07.2014, 03:56 #4
Цитата Сообщение от Hsac Посмотреть сообщение
две карточки меняются местами
Я ничего не понимаю. Где собственно цикл обновления анимации карточек?
0
Hsac
13 / 13 / 3
Регистрация: 30.06.2013
Сообщений: 163
31.07.2014, 04:05  [ТС] #5
вызываем метод swap он вызывает метод move движения карточек происходят в метода апдейт
0
QGuest
8 / 8 / 3
Регистрация: 08.01.2013
Сообщений: 85
31.07.2014, 04:11 #6
Цитата Сообщение от Hsac Посмотреть сообщение
вызываем метод swap он вызывает метод move движения карточек происходят в метода апдейт
все равно не понимаю. Update же исполнится один раз. Как тогда происходит анимация?
0
Hsac
13 / 13 / 3
Регистрация: 30.06.2013
Сообщений: 163
31.07.2014, 04:17  [ТС] #7
нет метод апдейт он как таймер обновляется 100 раз в секунду и работает все время
0
QGuest
8 / 8 / 3
Регистрация: 08.01.2013
Сообщений: 85
31.07.2014, 04:24 #8
Цитата Сообщение от Hsac Посмотреть сообщение
нет метод апдейт он как таймер обновляется 100 раз в секунду и работает все время
а почему? тогда ясно почему при повторном нажатии предыдущий тайл перестает двигаться. Вы просто заменяете его новым, и теперь 100 раз в скунду обновляется новый тайл, а не старый.
0
Hsac
13 / 13 / 3
Регистрация: 30.06.2013
Сообщений: 163
31.07.2014, 04:27  [ТС] #9
мда ну спасибо причину та я давно знаю мне нужно чтобы старая не прерывалась а продолжала идти параллельно
0
QGuest
8 / 8 / 3
Регистрация: 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);
        }
    }
}
0
31.07.2014, 05:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2014, 05:07
Привет! Вот еще темы с решениями:

Параллельное программирование
Подскажите, пожалуйста, как в PUTTY начать редактировать файл?

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

Параллельное программирование
Нужно написать простейшую программу для кластера. Читал про MPI, но там тоже...

Параллельное действие
Как сделать действие параллельным? Если например сделать что бы слово всегда...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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