powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / движущиеся объекты
18 сообщений из 18, страница 1 из 1
движущиеся объекты
    #32511639
omygut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
задача такая: необходимо нарисовать движущиеся объекты в окне, какждый объект рисуется в отдельном потоке.
если через BitBlt, то копируешь сначала то, что было в окне, затем рисуешь свой объект, но тогда не понятно как стирать его предыдущее отображение: если запоминать то, что было под объектом до его рисования, то это изображение мог изменить другой двигующийся объект
???
(может кто-то делал уже нечто подобное?)
...
Рейтинг: 0 / 0
движущиеся объекты
    #32511656
Фотография Green2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эта проблема решается в программировании видеоигр.

Предлагаю такой вариант,
1) готовишь фон,
2) копируешь фон
3) наносишь на фон свой объект
4) выводишь готовое изображение
5) пункт 2
...
Рейтинг: 0 / 0
движущиеся объекты
    #32511770
omygut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не совсем понятно
можно поподробнее
...
Рейтинг: 0 / 0
движущиеся объекты
    #32511799
Фотография Green2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Готовить фон надо в внеэкранном изображении, например в ОЗУ, потом копируешь его в видеопамять, и там рисуешь движущиеся объекты.
То есть готовишь следующий кадр.

Для того, чтобы пользователь не видел, как рисуются объекты, надо использовать переключение страниц видеопамяти, таким образом новое изображение мгновенно окажеться на экране.
...
Рейтинг: 0 / 0
движущиеся объекты
    #32511810
omygut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
здесь проблема еще в том, что каждый объект рисуется в своем отдельном потоке отдельно от других объектов ничего не зная о них
т.е. можно ли перерисовывать не сразу все объекты, а по отдельности?
...
Рейтинг: 0 / 0
движущиеся объекты
    #32511814
Фотография Green2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно использовать потоки
...
Рейтинг: 0 / 0
движущиеся объекты
    #32511875
omygut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
понятно, что каждый объект перерисовывается в своем потоке
не понятно, как его там перерисовывать отдельно от других объектов
...
Рейтинг: 0 / 0
движущиеся объекты
    #32511879
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а зачем каждый объект отрисовывать в своем потоке?
у вас что тысячапроцессорная графическая станция?
если нет, то скорости вы этим не добьетесь, удобства программирования съедятся необходимыми синхронизациями действий потоков.

саводить даже жва потока, основной и для графики, на мой взгляд - расточительно.

подходи к этому делу следующим образом:
кадр состоит из объектов.
каждый объект отрисовывается в зависимости от его свойств(координаты, текстуры, цвета, освещенность и т.п.)

задний фон - такой же объект как и всё остальное. либо состоит из нескольких объектов. например, небо, далекие горы, лес у подножья гор и близкий луг.

таким образом, 100% наполняя кадр объектами, у тебя не будет необходимости запоминать, а что там было под объектом. У тебя будет просто одна процедура отрисовки объекта, и ты будешь ее вызывать в цикле для всех объектов отсортировав по Z координате.
...
Рейтинг: 0 / 0
движущиеся объекты
    #32511888
omygut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
короче, по отдельности перерисовывать объекты невозможно?
...
Рейтинг: 0 / 0
движущиеся объекты
    #32511911
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возможно все.
вопрос, сколько жизненной энергии ты готов на это положить.
...
Рейтинг: 0 / 0
движущиеся объекты
    #32511939
omygut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мне все равно сколько энергии
главное, чтобы перерисовка для каждого объекта осуществлялась в разных потоках
как это сделать?
...
Рейтинг: 0 / 0
движущиеся объекты
    #32511943
Фотография Green2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так просто рисуй в разных потоках и все.
...
Рейтинг: 0 / 0
движущиеся объекты
    #32511955
omygut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не получается
во-первых как двигать объект: обычная используешь - копируешь сначала ту область, куда собираешься переместить объект, рисуешь объект на эту область и после очередного перемещения объекта снова востанавливаешь этот кусочек, который был под ним. Эта формула здесь не проходит, потому что другие объекты тоже двигаются, и сохраняемая область может поменяться
а по-другому я не знаю как
???
...
Рейтинг: 0 / 0
движущиеся объекты
    #32511966
Фотография Green2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
omygut внимательно почитай alex_k

Не надо восстанавливать затертое изображение, надо рисовать новое и подставлять его на экран.
...
Рейтинг: 0 / 0
движущиеся объекты
    #32512528
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дайте и мне шашкой помахать! :)

ну, для начала, смотря как движутся объекты...

если, к примеру, по 1-2 точки, то можно кроме самого объекта рисовать рамку в 1-2 точки цветом фона (если он однородный), тогда предыдущее изображение будет затёрто самим объектом.

если нет, то
надо запоминать, то что было на фоне, потом рисовать поверх старого объекта и затем рисовать новый в новом месте.

или

перед тем как рисовать объекты полностью отрисовывать фон.

к тому же:

тут надо использовать Мутех. Для синхронизации.
первым право на мутех должен получить поток отрисовки фона.
потом он его отпускает и дальше кто первый его схватил, тот и рисует.

или, если идёт запоминание куска фона: тут вообще с мутехом классно: всем потокам поставить WaitForSingleObject на Мутех перед процедурой рисования. Пока у одного мутех, он затирает старый рисунок, не боясь, что туда в этот момент кто-то что-то нарисует, потом рисуется на новое место и отпускает Мутех.

Правда, если потоков слишком много, есть вероятность, что некоторые Мутеха не получать :) Тут уже надо раздавать приоритеты...
...
Рейтинг: 0 / 0
движущиеся объекты
    #32512841
omygut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пока у одного мутех, он затирает старый рисунок, не боясь, что туда в этот момент кто-то что-то нарисует


а если кто-то нарисует в промежутке между запоминанием куска фона и отрисовки объекта (затирание старого рисунка и созданием нового)
...
Рейтинг: 0 / 0
движущиеся объекты
    #32512848
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да забудьте вы про потоки!
кто вам вообще эти потоки в голову вбил?
...
Рейтинг: 0 / 0
движущиеся объекты
    #32514122
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автора если кто-то нарисует в промежутке между запоминанием куска фона и отрисовки объекта (затирание старого рисунка и созданием нового)
Да, кстати, когда второй начнёт восстанавливать фон, он как раз отрисует кусок первого.

Но это должно работать, если объекты не пересекаются.

авторда забудьте вы про потоки!
кто вам вообще эти потоки в голову вбил?

И то правда? Зачем тут потоки?
Если идут какие-то процессы в потоках, то пусть они своё состояние в какой-нибудь глобальный массив складывают. А оттуда один поток берёт всю информацию и отрисовывает.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / движущиеся объекты
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]