Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
AleK135
0 / 0 / 0
Регистрация: 12.05.2015
Сообщений: 36
#1

Qt: обработка столкновений шаров

23.10.2015, 08:18. Просмотров 666. Ответов 9
Метки нет (Все метки)

Задача такая: летают 20 шаров разных велечин в разных направлениях. Надо сделать так, чтобы они отталкивались от стенок окна и летели в другом направлении. Помогите, плиз
0
Вложения
Тип файла: 7z My-p.7z (3.8 Кб, 10 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2015, 08:18
Ответы с готовыми решениями:

Обработка столкновений
Хочу сделать платформер но не могу сделать врагов , которые будут двигаться...

Обработка столкновений
Расскажите у кого какой опыт обработки столкновений при создании игр? два...

Обработка столкновений
Великие гуру AS 3.0 нужен ваш совет. Можете мне скинуть пример обработки...

Обработка множества столкновений
Есть игра на js и сервер на nodejs, на карте более 1000 обьектов и все нужно...

Обработка множества столкновений
Есть игра на js и сервер на nodejs, на карте более 1000 обьектов и все нужно...

9
alexu_007
143 / 154 / 34
Регистрация: 29.05.2015
Сообщений: 1,116
23.10.2015, 11:08 #2
ИМХО QPaintEvent не лучшее место для сталкивания шаров. Посмотрите в сторону Scene.
0
Avazart
Эксперт С++
7718 / 5627 / 549
Регистрация: 10.12.2010
Сообщений: 25,330
Записей в блоге: 17
26.10.2015, 18:24 #3
Я как раз делал такое через QPaintEvent.
Тут куда важнее алгоритм столкновения, я использовал кажется очередь с приоритетами для прогнозируемых "событий" столкновений.
0
alexu_007
143 / 154 / 34
Регистрация: 29.05.2015
Сообщений: 1,116
26.10.2015, 18:48 #4
Да наверняка и так и так можно. Только вопрос сложности. У Scene есть перемещение объектов (moveBy) и есть функция, возвращающая true при столкновении объектов - практически половина работы уже сделана, остаётся допилить разлёт после столкновения.
0
Avazart
Эксперт С++
7718 / 5627 / 549
Регистрация: 10.12.2010
Сообщений: 25,330
Записей в блоге: 17
26.10.2015, 18:56 #5
Цитата Сообщение от alexu_007 Посмотреть сообщение
практически половина работы уже сделана,
Нифига это 1% работы, а то и меньше.
И я не уверен насчет перемещения по сцене.
0
alexu_007
143 / 154 / 34
Регистрация: 29.05.2015
Сообщений: 1,116
26.10.2015, 19:54 #6
1% работы это если с QPaintEvent и всё делать "вручную". В Scene намного проще. Вот например движение по таймеру:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void Widget::onTimer()
{
    //столкновение со стенками
    for(int i = 0; i < playerCx; i++)
        testKrash(player[i], &moveXY[i*2], &moveXY[i*2+1]);
 
 
    // столкновения между собой
    for(int i = 0; i < playerCx-1; i++)
        for(int j = i+1; j < playerCx; j++)
        {
            if(i == j) continue;
            testOboude(player[i], player[j],
                       &moveXY[i*2], &moveXY[i*2+1],
                       &moveXY[j*2], &moveXY[j*2+1]);
        }
 
 
    // движуха
    for(int i = 0; i < playerCx; i++)
        player[i]->moveBy(moveXY[i*2], moveXY[i*2+1]);
 
}
0
Avazart
Эксперт С++
7718 / 5627 / 549
Регистрация: 10.12.2010
Сообщений: 25,330
Записей в блоге: 17
26.10.2015, 20:30 #7
Мм, учет масс, скоростей, диаметров? Формула соударения?

Из каких соображений вы собрались выбирать величину интервала таймера?

Добавлено через 30 минут
Видос
0
alexu_007
143 / 154 / 34
Регистрация: 29.05.2015
Сообщений: 1,116
26.10.2015, 20:39 #8
Ну нет, ничего этого конечно нет. Задачи точного отскока шаров я не ставил, достаточно чтобы просто похоже было. Ексешник выкладываю, если хотите сами посмотрите.
0
Вложения
Тип файла: zip fball.zip (5.26 Мб, 6 просмотров)
Avazart
Эксперт С++
7718 / 5627 / 549
Регистрация: 10.12.2010
Сообщений: 25,330
Записей в блоге: 17
26.10.2015, 20:47 #9
Суть в том что при большом кол-ве шаров, пересчитывать соударения слишком дорогостоящее удовольствие.
Стоит считать только те что будут в ближайшее время, ибо то те соударения которые проходят первыми могут нивелировать следующие.

Добавлено через 1 минуту
Цитата Сообщение от alexu_007 Посмотреть сообщение
Задачи точного отскока шаров я не ставил, достаточно чтобы просто похоже было.
Если шары будут разного размера, маленький шар может тупо проскакивать "сквозь" большой.
0
alexu_007
143 / 154 / 34
Регистрация: 29.05.2015
Сообщений: 1,116
26.10.2015, 20:53 #10
Смотрите, что у меня получилось.
0
26.10.2015, 20:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2015, 20:53

Корректная обработка столкновений
Доброго времени суток. Есть 1 главный объект. И есть еще 10 разных объектов....

Обработка множества столкновений
Есть игра на js и сервер на nodejs, на карте более 1000 обьектов и все нужно...

Игровой мир и обработка столкновений
Здравствуйте! Для практики хочу написать простенько 2d игру на SFML. Так...


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

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

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