![]() |
![]() ![]() |
![]() |
volvo |
![]()
Сообщение
#21
|
Гость ![]() |
Цитата при движении картинки оч сильно мерцает экран, как можно это исправить??? Присоедини тестовый проект, чтоб можно было откомпилировать его и запустить. Интересует, как именно ты двигаешь картинку.Цитата задаю цвет А какой цвет имеет пиксель (1, 1) на экране? Такие цвета точно есть в картинке?TransparentColor:=getpixel(1,1); и все равно рисует все цвета |
ninja |
![]()
Сообщение
#22
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Движение осуществляется при нажатии клавиш влево-вправо, пробел, клавиш Z и X
При движении меняется координата рисунка по X экран очищается и заново выводяится но у же на новой координате. ![]() Цвет фиолетовый |
volvo |
![]()
Сообщение
#23
|
Гость ![]() |
А теперь ответь мне на 2 вопроса:
1) Зачем тебе отображать заново то, что не изменяется? Если у тебя движется только фигура человечка, а сам фон остается неизменным, гораздо проще перед отрисовкой фигуры запомнить изображение ПОД ней (GetMem + GetImage), а потом, вместо того, чтобы перерисовывать всё, просто восстановить изображение (PutImage + FreeMem) и отрисовать фигуру в другом месте. 2) я спрашивал тебя, какой цвет в позиции (1, 1) на экране. Ты сказал "фиолетовый". Можно назвать номер строки и название файла, где пиксел, имеющий координаты (1, 1) становится фиолетовым? Я например этого не вижу, он равен цвету фона, а это - черный (не путать с битмапом, я спрашивал именно про экран, потому что ты сам сделал: Цитата TransparentColor:=getpixel(1,1); |
ninja |
![]()
Сообщение
#24
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
TransparentColor:=5; 5- т.к мне нужно исключить фиолетовый цвет которому соответствует цифра 5. Все вроде получилось, но почему то у меня возникли сомнения что цвета просто совпали 16 и 256 цветов, или все правильно? P.S. Спасибо тебе!!! |
volvo |
![]()
Сообщение
#25
|
Гость ![]() |
Цитата почему то у меня возникли сомнения что цвета просто совпали 16 и 256 цветов Не знаю, откуда такое сомнение... 5-ый элемент палитры содержит RGB(128, 0, 128, 0), а это именно фиолетовый цвет... Вот такая палитра у Paint-а. Первые 16 ее элементов совпадают с 16-ю цветами BGI-графики. |
ninja |
![]()
Сообщение
#26
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
При загрузки картинки в память происходит зависание программы либо она просто вылетает, а если запускать через DOS-box просто зависает, никак не пойму из-за чего
Сообщение отредактировано: ninja - 8.07.2009 13:15 |
volvo |
![]()
Сообщение
#27
|
Гость ![]() |
Цитата никак не пойму из-за чего Максимальный блок памяти, который можно выделить за один раз - 65520 байт. Скорее всего, ImageSize выдает тебе неправильное значение (правильное просто не помещается в Word и усекается), а потом при попытке GetImage ты "вылезаешь" за пределы выделенной памяти, и портишь другие области памяти.А все потому, что ты хочешь сохранять ВЕСЬ экран. А зачем? Сохраняй только то, что будет непосредственно под выводимой картинкой (у тебя же есть ее размеры, есть координаты, куда она будет выводиться), это будет требовать гораздо меньше памяти и выполняться будет быстрее. |
ninja |
![]()
Сообщение
#28
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Если сохранять изображение только под объектом, то уйдет памяти не меньше, т.к. на экране будет не один движущийся объект, и придется выделять память для каждого! Как быть в данной ситуации?
|
volvo |
![]()
Сообщение
#29
|
Гость ![]() |
Цитата Если сохранять изображение только под объектом, то уйдет памяти не меньше А хоть бы и не меньше, но:1) у тебя будет возможность выделить каждый раз маленький кусок памяти (большой, под весь экран - не выделишь, я объяснил выше, почему) 2) при изменении положения одного объекта будет восстановлен фон под ним, и объект перерисуется в другой позиции (опять с сохранением фона), то есть, при изменении положения одного объекта не будет перерисовываться ВЕСЬ экран, что приведет к уменьшению мерцания... |
ninja |
![]()
Сообщение
#30
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Мерцание стало на порядок меньше
![]() Еще такой вопрос: что делает процедура FreeMem очищает ли она блок динамической памяти, или просто разрывает связь указателя с этим блоком? При длительном нажатии клавиш, все начинает подтормаживать. Это может означать заполненость динамической памяти или клавиатурного буфера? |
volvo |
![]()
Сообщение
#31
|
Гость ![]() |
Цитата что делает процедура FreeMem очищает ли она блок динамической памяти, или просто разрывает связь указателя с этим блоком? Освобождает память, разрывая связь переменной с блоком памяти (освобожденная память не очищается, а просто добавляется в список свободных блоком. Следующий GetMem может опять получить этот же участок памяти, если размер позволяет).Цитата Это может означать заполненость динамической памяти или клавиатурного буфера? Это буфер клавиатуры. Можно попробовать избавиться от подтормаживаний путем написания своего обработчика клавиатурного прерывания, но проверить свою идею я смогу только завтра. |
ninja |
![]()
Сообщение
#32
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
А если уменьшить клавиатурный буфер?
Если тебя не затруднит, помоги решить данную проблему с подтормаживанием. P.S. буду очень благодарен. |
ninja |
![]()
Сообщение
#33
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Появилась такая идея: что если первому адресу клавиатурного буфера присвоить последний адрес? т.е. при каждом попадании значения в буфер, он будет очищаться.
|
Lapp |
![]()
Сообщение
#34
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Появилась такая идея: что если первому адресу клавиатурного буфера присвоить последний адрес? т.е. при каждом попадании значения в буфер, он будет очищаться. Прекрасная идея для любителей музыки типа "бип-бииииииип" ![]() ![]() Но увеличение буфера тоже не выход. Если ты собираешься жать кнопку, пока оно не забьется - оно забьется обязательно ![]() aaabbbccabcccccc - а хранишь: 3a3b2c1a1b6c. При этом программа может распознавать множественные символы и ускоряться - например, рисовать не каждый кадр, а через кадр (если, скажем, коэффициент превышает 10). И даже если ты не хочешь настолько сильно все менять, то самое простое средство, это вставить чтение клавиатуры где-нить в середине рисования (либо повесить на прерывание, но это уже сложнее). Сделай процедурку, которая читает символ, и если он такой же, как предыдуший - просто сбрасывает его, а если новый - запоминает как введенный. И навставляй ее вызовы в рисование. В подавляющем множестве ситуаций, когда тебе хочется влезть в систему (например, поменять буфер), это лучше сделать в рамках своей программы. Например, сделать свой собственный клавиатурный буфер (второй, то есть, над системным). О быстродействии машины особо не заботься, оно большое (если не иметь в виду графику, конечно)). Добавлено через 2 мин. Да, еще: адреса переменных, хранящих начало и конец буфера, которые ты привел, мне что-то кажутся странными.. Но я мог это забыть. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Archon |
![]()
Сообщение
#35
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 618 Пол: Мужской Репутация: ![]() ![]() ![]() |
Labyrinth Вот от туда можешь взять модуль для клавы, и не мучаться.
-------------------- Close the World...txeN eht nepO
|
ninja |
![]()
Сообщение
#36
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Спасибо, правда я уже написал, прикольный лабиринт
![]() Сообщение отредактировано: ninja - 11.07.2009 16:16 |
![]() ![]() |
![]() |
Текстовая версия | 14.07.2025 17:52 |