-
Здравствуйте,проблема следующая:пишу игру на подобии "паучков",На Canvas компонента image через цикл с интервалом в 20мс перерисовываю линии (MoveTo,LineTo),все отлично если image небольшой(300 x 400) если увеличивать дальше то происходит быстрый рост нагрузки на проц (800х600 нагрузка 50%)Причем при увеличении размера количество и размер лини оставляю прежним.если выводить на canvas других элементов такой проблемы нет,но почему то canvas у например paintbox или label отображается поверх всех компонентов а не там где расположен сам.
-
TImage - адский компонент, который необходимо уничтожить на генетическом уровне. На каждое изменение канвы (каждый LineTo) он делает полную перерисовку. Не используйте TImage никогда. Можно взять TBitmap как буфер, на нем рисовать и выводить только необходимую часть на PainBox, к примеру.
-
>>canvas у например paintbox или label отображается поверх всех компонентов а не там где расположен сам.
-
> canvas у например paintbox или label
Canvas у них выводит на родительский оконный компонент (который имеет Handle - наследник TWinControl). Если там же есть другие графические компоненты, то, естественно, рисуется поверх них. А когда рисуется линия на TImage, он весь перерисовывается и заставляет перерисовываться другие компоненты, которые есть поверх него - поэтому они не затираются.
-
Спасибо,ситуация проясняется.буду пробовать
-
Сейчас ситуация такая взял bitmap в качестве буфера-рисую линии на нем,потом с помощью BitBlt загружаю в него изображения пауков и вывожу все это на PaintBox.Вопрос раньше image с пауками были c прозрачным фоном(transparent:=true) теперь это не работает.transparent у соответствующих bitmap'ов указан
-
-
и так уже все рисую на буферном битмапе,хотел обойтись без сторонних библиотек.но теперь уже не знаю получиться ли
-
> Дмитрий (10.11.11 18:22) [5]
Рисуй пауков через Canvas.Draw, указав TransparentColor.
-
это я конечно затупил,то что через draw с прозрачностью все впорядке знал,но отказался от этой ф-и давно из за ее тормазнутости,неподумав что в буфер она может выводить с хорошей скоростью.Омлет,спасибо еще раз,Вы меня сегодня прям выручили.
-
фунция CopyTransparentBrush() из моего примера выше работает быстрее чем Canvas.Draw() на 30%, не смотря на исполнение "в лоб" =)
|