|
|
|
движущиеся объекты
|
|||
|---|---|---|---|
|
#18+
задача такая: необходимо нарисовать движущиеся объекты в окне, какждый объект рисуется в отдельном потоке. если через BitBlt, то копируешь сначала то, что было в окне, затем рисуешь свой объект, но тогда не понятно как стирать его предыдущее отображение: если запоминать то, что было под объектом до его рисования, то это изображение мог изменить другой двигующийся объект ??? (может кто-то делал уже нечто подобное?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2004, 02:30 |
|
||
|
движущиеся объекты
|
|||
|---|---|---|---|
|
#18+
Эта проблема решается в программировании видеоигр. Предлагаю такой вариант, 1) готовишь фон, 2) копируешь фон 3) наносишь на фон свой объект 4) выводишь готовое изображение 5) пункт 2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2004, 09:32 |
|
||
|
движущиеся объекты
|
|||
|---|---|---|---|
|
#18+
не совсем понятно можно поподробнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2004, 19:11 |
|
||
|
движущиеся объекты
|
|||
|---|---|---|---|
|
#18+
Готовить фон надо в внеэкранном изображении, например в ОЗУ, потом копируешь его в видеопамять, и там рисуешь движущиеся объекты. То есть готовишь следующий кадр. Для того, чтобы пользователь не видел, как рисуются объекты, надо использовать переключение страниц видеопамяти, таким образом новое изображение мгновенно окажеться на экране. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2004, 21:34 |
|
||
|
движущиеся объекты
|
|||
|---|---|---|---|
|
#18+
здесь проблема еще в том, что каждый объект рисуется в своем отдельном потоке отдельно от других объектов ничего не зная о них т.е. можно ли перерисовывать не сразу все объекты, а по отдельности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2004, 22:01 |
|
||
|
движущиеся объекты
|
|||
|---|---|---|---|
|
#18+
Можно использовать потоки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2004, 22:19 |
|
||
|
движущиеся объекты
|
|||
|---|---|---|---|
|
#18+
понятно, что каждый объект перерисовывается в своем потоке не понятно, как его там перерисовывать отдельно от других объектов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2004, 07:59 |
|
||
|
движущиеся объекты
|
|||
|---|---|---|---|
|
#18+
а зачем каждый объект отрисовывать в своем потоке? у вас что тысячапроцессорная графическая станция? если нет, то скорости вы этим не добьетесь, удобства программирования съедятся необходимыми синхронизациями действий потоков. саводить даже жва потока, основной и для графики, на мой взгляд - расточительно. подходи к этому делу следующим образом: кадр состоит из объектов. каждый объект отрисовывается в зависимости от его свойств(координаты, текстуры, цвета, освещенность и т.п.) задний фон - такой же объект как и всё остальное. либо состоит из нескольких объектов. например, небо, далекие горы, лес у подножья гор и близкий луг. таким образом, 100% наполняя кадр объектами, у тебя не будет необходимости запоминать, а что там было под объектом. У тебя будет просто одна процедура отрисовки объекта, и ты будешь ее вызывать в цикле для всех объектов отсортировав по Z координате. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2004, 08:28 |
|
||
|
движущиеся объекты
|
|||
|---|---|---|---|
|
#18+
короче, по отдельности перерисовывать объекты невозможно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2004, 09:34 |
|
||
|
движущиеся объекты
|
|||
|---|---|---|---|
|
#18+
возможно все. вопрос, сколько жизненной энергии ты готов на это положить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2004, 10:08 |
|
||
|
движущиеся объекты
|
|||
|---|---|---|---|
|
#18+
мне все равно сколько энергии главное, чтобы перерисовка для каждого объекта осуществлялась в разных потоках как это сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2004, 10:47 |
|
||
|
движущиеся объекты
|
|||
|---|---|---|---|
|
#18+
не получается во-первых как двигать объект: обычная используешь - копируешь сначала ту область, куда собираешься переместить объект, рисуешь объект на эту область и после очередного перемещения объекта снова востанавливаешь этот кусочек, который был под ним. Эта формула здесь не проходит, потому что другие объекты тоже двигаются, и сохраняемая область может поменяться а по-другому я не знаю как ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2004, 11:15 |
|
||
|
движущиеся объекты
|
|||
|---|---|---|---|
|
#18+
omygut внимательно почитай alex_k Не надо восстанавливать затертое изображение, надо рисовать новое и подставлять его на экран. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2004, 11:30 |
|
||
|
движущиеся объекты
|
|||
|---|---|---|---|
|
#18+
Дайте и мне шашкой помахать! :) ну, для начала, смотря как движутся объекты... если, к примеру, по 1-2 точки, то можно кроме самого объекта рисовать рамку в 1-2 точки цветом фона (если он однородный), тогда предыдущее изображение будет затёрто самим объектом. если нет, то надо запоминать, то что было на фоне, потом рисовать поверх старого объекта и затем рисовать новый в новом месте. или перед тем как рисовать объекты полностью отрисовывать фон. к тому же: тут надо использовать Мутех. Для синхронизации. первым право на мутех должен получить поток отрисовки фона. потом он его отпускает и дальше кто первый его схватил, тот и рисует. или, если идёт запоминание куска фона: тут вообще с мутехом классно: всем потокам поставить WaitForSingleObject на Мутех перед процедурой рисования. Пока у одного мутех, он затирает старый рисунок, не боясь, что туда в этот момент кто-то что-то нарисует, потом рисуется на новое место и отпускает Мутех. Правда, если потоков слишком много, есть вероятность, что некоторые Мутеха не получать :) Тут уже надо раздавать приоритеты... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 08:23 |
|
||
|
движущиеся объекты
|
|||
|---|---|---|---|
|
#18+
Пока у одного мутех, он затирает старый рисунок, не боясь, что туда в этот момент кто-то что-то нарисует а если кто-то нарисует в промежутке между запоминанием куска фона и отрисовки объекта (затирание старого рисунка и созданием нового) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 11:44 |
|
||
|
движущиеся объекты
|
|||
|---|---|---|---|
|
#18+
да забудьте вы про потоки! кто вам вообще эти потоки в голову вбил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 11:48 |
|
||
|
движущиеся объекты
|
|||
|---|---|---|---|
|
#18+
автора если кто-то нарисует в промежутке между запоминанием куска фона и отрисовки объекта (затирание старого рисунка и созданием нового) Да, кстати, когда второй начнёт восстанавливать фон, он как раз отрисует кусок первого. Но это должно работать, если объекты не пересекаются. авторда забудьте вы про потоки! кто вам вообще эти потоки в голову вбил? И то правда? Зачем тут потоки? Если идут какие-то процессы в потоках, то пусть они своё состояние в какой-нибудь глобальный массив складывают. А оттуда один поток берёт всю информацию и отрисовывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2004, 07:31 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32511799&tid=2034977]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
72ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 201ms |
| total: | 383ms |

| 0 / 0 |
