Форум программистов, компьютерный форум, киберфорум
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
2 / 2 / 0
Регистрация: 02.10.2016
Сообщений: 96
1

Движение фигур по форме (потоки)

03.06.2019, 17:41. Показов 2026. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть следующая задача:
По экрану двигаются разноцветные квадраты, отталкиваясь от границ экрана. Движение квадратов прямолинейное с постоянной скоростью под углом в 45 градусов. В момент столкновения с границей экрана угол меняется на противоположный. В случае столкновения двух произвольных квадратов, они исчезают.
Каждый объект должен обрабатываться в отдельном потоке, рисуем в TPaintBox.

Подскажите, пожалуйста, как привязать потоки к фигурам на TPaintBox? И как они должны взаимодействовать соответственно?
Просто не нашел подобных программных реализаций.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.06.2019, 17:41
Ответы с готовыми решениями:

Движение фигур в C++
Нарисовать пульсирующий зеленый круг, увеличивающийся и уменьшающийся, программа завершается...

Движение фигур
Доброго времени суток. Имеются нарисованные часы с "лицом" (скрин и код прилагаю). Вопрос: как...

Движение фигур
Движение фигур с помощью клавиш стрелок фигуры rectangle(220,256,200,140) circle(250,152,7) ...

Движение двух фигур.
В которой будет пара фигур, которые будут двигаться по окну

6
3420 / 1607 / 236
Регистрация: 26.02.2009
Сообщений: 7,856
Записей в блоге: 5
03.06.2019, 18:05 2
Цитата Сообщение от Иван6699 Посмотреть сообщение
как привязать потоки к фигурам на TPaintBox?
Мне тоже интересно как это? Получается есть например 100 квадратов это надо создать 100 потоков? Они ждать друг друга больше будут чем выполнять полезное действие, имхо.
Может имелось ввиду что обновление ВСЕХ квадратов в одном потоке, а отрисовка - в другом? Это больше похоже на реальность...
0
2 / 2 / 0
Регистрация: 02.10.2016
Сообщений: 96
03.06.2019, 19:18  [ТС] 3
snake32, Вот полное предисловие к задачам (они по вариантам)
Каждый объект должен обрабатываться в отдельном потоке. Отображение объектов осуществляется на компоненте TPaintBox размещенном на главной форме. Для рисования примитивов используйте методы и свойства Canvas компонента TPaintBox.

Ну если все квадраты в одном потоке, то как они тогда будут исчезать при столкновении? Я думал, что при некотором условии, мы эти два потока будем разрушать. Так что скорее всего для каждой фигуры свой, думаю пары-тройки квадратов хватит.
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
03.06.2019, 21:17 4
Лучший ответ Сообщение было отмечено Иван6699 как решение

Решение

отрисовка хоть что вы делайте, будет в одном - главном))
а остальное действительно будет конечно капец ))
реально ни один объект не должен знать ничего о своих "одноклассниках"
столкновение например, как он должен отслеживать?

но если прямо задание, делайте расчет координат в потоках
вывод через PaintBox видимо по таймеру, потому что расчетчики будут бомбить непрерывно
и передавайте большую греческую фи тому, кто это придумал...
0
884 / 404 / 174
Регистрация: 20.10.2016
Сообщений: 1,828
04.06.2019, 06:37 5
Цитата Сообщение от krapotkin Посмотреть сообщение
отрисовка хоть что вы делайте, будет в одном - главном))
Не совсем соглашусь. То есть, отрисовка на TPaintBox, безусловно, будет в контексте главного потока. Но можно выстроить механизм, когда сам битмап (например, отрисовка тех самых сотен прямоугольников) будет производиться в одном потоке, и после того, как битмап готов - закидывать его в главный поток через синхронизацию в отдельную переменную (либо, если речь идет о буферизации, то в две переменных поочередно), а уже из этой переменной рисовать в PantBox. Выигрыш на этом получить вполне возможно, имхо. В этой концепции все будут знать друг о друге, расчет движений и отрисовка всех элементов будет в дополнительном потоке, а отображение результата - в основной потоке.

P.S. В любом случае, о какой-то заоблачной производительности тут говорить не приходится. Рисовать плавную графику все равно не получится с таким подходом. Для плавной графики потребуется аппаратное ускорение или OpenGL.
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
04.06.2019, 07:00 6
ну, ясно, что речь именно о самом выводе на экран))
"все о всех знают" - это путь в никуда. представьте задачу, что вам нужно рисовать карту и мини-карту
у них все разное, кроме исходных данных. ну же не сами исходные данные будут себя рисовать??
плавность графики тут не главное. аппарат просто ускорит ваш вывод. но алгоритм создания картинки для вывода не изменит
0
Модератор
3629 / 2150 / 759
Регистрация: 15.11.2015
Сообщений: 8,631
08.06.2019, 05:00 7
Цитата Сообщение от Иван6699 Посмотреть сообщение
Ну если все квадраты в одном потоке, то как они тогда будут исчезать при столкновении?
Если в игре 5000 объектов им что, 5000 потоков создавать?

Вообще, у вас будут сложности с синхронизацией. Пока проверяется соударение объектов они могут уже "уехать", ведь, будут двигаться совершенно автономно.

И рисовать из потока на форме тоже занятие интересное, конечно. Интересное в том плане, что фактически рисуется всё равно из основного потока.

Добавлено через 11 минут
Если будет отдельный поток на каждую фигуру, то нужно будет из основного потока проверять все объекты на соударение и при соударении завершать потоки ударившихся объектов. Возможно, они и сделают 1-2 шага до момента удаления, но думаю это будет не критично.
0
08.06.2019, 05:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.06.2019, 05:00
Помогаю со студенческими работами здесь

Движение фигур, игра на С#
Доброго времени суток. Хочу создать игру на c# WF. Есть опыт создания игр на Graphics.h в с++....

Движение 3 простых фигур
Написать программу движения по горизонтали (или вертикали) 3 геометрических фигур, движение должно...

HELP!!! движение геометрических фигур
Нужна помощь в написании программы движения круга на экране хотя бы чтоб двигался туда сюда по...

Движение фигур в окне
Помогите плиз!Надо создать окно(WinAPI)и в нем несколько фигур которие можно двигать мишкой!Фигури...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru