2 / 2 / 0
Регистрация: 02.10.2016
Сообщений: 96
|
|
1 | |
Движение фигур по форме (потоки)03.06.2019, 17:41. Показов 2026. Ответов 6
Метки нет (Все метки)
Есть следующая задача:
По экрану двигаются разноцветные квадраты, отталкиваясь от границ экрана. Движение квадратов прямолинейное с постоянной скоростью под углом в 45 градусов. В момент столкновения с границей экрана угол меняется на противоположный. В случае столкновения двух произвольных квадратов, они исчезают. Каждый объект должен обрабатываться в отдельном потоке, рисуем в TPaintBox. Подскажите, пожалуйста, как привязать потоки к фигурам на TPaintBox? И как они должны взаимодействовать соответственно? Просто не нашел подобных программных реализаций.
0
|
03.06.2019, 17:41 | |
Ответы с готовыми решениями:
6
Движение фигур в C++ Движение фигур Движение фигур Движение двух фигур. |
03.06.2019, 18:05 | 2 |
Мне тоже интересно как это? Получается есть например 100 квадратов это надо создать 100 потоков? Они ждать друг друга больше будут чем выполнять полезное действие, имхо.
Может имелось ввиду что обновление ВСЕХ квадратов в одном потоке, а отрисовка - в другом? Это больше похоже на реальность...
0
|
2 / 2 / 0
Регистрация: 02.10.2016
Сообщений: 96
|
|
03.06.2019, 19:18 [ТС] | 3 |
snake32, Вот полное предисловие к задачам (они по вариантам)
Каждый объект должен обрабатываться в отдельном потоке. Отображение объектов осуществляется на компоненте TPaintBox размещенном на главной форме. Для рисования примитивов используйте методы и свойства Canvas компонента TPaintBox. Ну если все квадраты в одном потоке, то как они тогда будут исчезать при столкновении? Я думал, что при некотором условии, мы эти два потока будем разрушать. Так что скорее всего для каждой фигуры свой, думаю пары-тройки квадратов хватит.
0
|
03.06.2019, 21:17 | 4 |
Сообщение было отмечено Иван6699 как решение
Решение
отрисовка хоть что вы делайте, будет в одном - главном))
а остальное действительно будет конечно капец )) реально ни один объект не должен знать ничего о своих "одноклассниках" столкновение например, как он должен отслеживать? но если прямо задание, делайте расчет координат в потоках вывод через PaintBox видимо по таймеру, потому что расчетчики будут бомбить непрерывно и передавайте большую греческую фи тому, кто это придумал...
0
|
884 / 404 / 174
Регистрация: 20.10.2016
Сообщений: 1,828
|
|
04.06.2019, 06:37 | 5 |
Не совсем соглашусь. То есть, отрисовка на TPaintBox, безусловно, будет в контексте главного потока. Но можно выстроить механизм, когда сам битмап (например, отрисовка тех самых сотен прямоугольников) будет производиться в одном потоке, и после того, как битмап готов - закидывать его в главный поток через синхронизацию в отдельную переменную (либо, если речь идет о буферизации, то в две переменных поочередно), а уже из этой переменной рисовать в PantBox. Выигрыш на этом получить вполне возможно, имхо. В этой концепции все будут знать друг о друге, расчет движений и отрисовка всех элементов будет в дополнительном потоке, а отображение результата - в основной потоке.
P.S. В любом случае, о какой-то заоблачной производительности тут говорить не приходится. Рисовать плавную графику все равно не получится с таким подходом. Для плавной графики потребуется аппаратное ускорение или OpenGL.
0
|
04.06.2019, 07:00 | 6 |
ну, ясно, что речь именно о самом выводе на экран))
"все о всех знают" - это путь в никуда. представьте задачу, что вам нужно рисовать карту и мини-карту у них все разное, кроме исходных данных. ну же не сами исходные данные будут себя рисовать?? плавность графики тут не главное. аппарат просто ускорит ваш вывод. но алгоритм создания картинки для вывода не изменит
0
|
Модератор
3629 / 2150 / 759
Регистрация: 15.11.2015
Сообщений: 8,631
|
|
08.06.2019, 05:00 | 7 |
Если в игре 5000 объектов им что, 5000 потоков создавать?
Вообще, у вас будут сложности с синхронизацией. Пока проверяется соударение объектов они могут уже "уехать", ведь, будут двигаться совершенно автономно. И рисовать из потока на форме тоже занятие интересное, конечно. Интересное в том плане, что фактически рисуется всё равно из основного потока. Добавлено через 11 минут Если будет отдельный поток на каждую фигуру, то нужно будет из основного потока проверять все объекты на соударение и при соударении завершать потоки ударившихся объектов. Возможно, они и сделают 1-2 шага до момента удаления, но думаю это будет не критично.
0
|
08.06.2019, 05:00 | |
08.06.2019, 05:00 | |
Помогаю со студенческими работами здесь
7
Движение фигур, игра на С# Движение 3 простых фигур HELP!!! движение геометрических фигур Движение фигур в окне Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |