Конференция "Игры" » Почему так сильно нагружает проц Canvas у Timage?!
 
  • Дмитрий (10.11.11 12:06) [0]
    Здравствуйте,проблема следующая:пишу игру на подобии "паучков",На Canvas компонента image через цикл с интервалом в 20мс перерисовываю линии (MoveTo,LineTo),все отлично если image небольшой(300 x 400) если увеличивать дальше то происходит быстрый рост нагрузки на проц (800х600 нагрузка 50%)Причем при увеличении размера количество и размер лини оставляю прежним.если выводить на canvas других элементов такой проблемы нет,но почему то canvas у например paintbox или label отображается поверх всех компонентов а не там где расположен сам.
  • Омлет © (10.11.11 12:44) [1]
    TImage - адский компонент, который необходимо уничтожить на генетическом уровне. На каждое изменение канвы (каждый LineTo) он делает полную перерисовку. Не используйте TImage никогда.
    Можно взять TBitmap как буфер, на нем рисовать и выводить только необходимую часть на PainBox, к примеру.
  • Дмитрий (10.11.11 14:50) [2]
    >>canvas у например paintbox или label отображается поверх всех компонентов а не там где расположен сам.
  • Омлет © (10.11.11 15:06) [3]
    > canvas у например paintbox или label

    Canvas у них выводит на родительский оконный компонент (который имеет Handle - наследник TWinControl). Если там же есть другие графические компоненты, то, естественно, рисуется поверх них.
    А когда рисуется линия на TImage, он весь перерисовывается и заставляет перерисовываться другие компоненты, которые есть поверх него - поэтому они не затираются.
  • Дмитрий (10.11.11 15:23) [4]
    Спасибо,ситуация проясняется.буду пробовать
  • Дмитрий (10.11.11 18:22) [5]
    Сейчас ситуация такая взял bitmap в качестве буфера-рисую линии на нем,потом с помощью BitBlt загружаю в него изображения пауков и вывожу все это на PaintBox.Вопрос раньше image с пауками были c прозрачным фоном(transparent:=true) теперь это не работает.transparent у соответствующих bitmap'ов указан
  • Андреевич (10.11.11 18:53) [6]
    Рисуй все на буферном битмапе, не надейся на контролы, и тогда все будет быстро и без мерцаний :)
    нужно рисовать с прозрачностью картинки с пауками? рисуй с помощью спец-библиотек (gdi+ например) или сам попиксельно (вот как пример - http://forum.sources.ru/index.php?showtopic=314767&st=60&#entry2721725 )
  • Дмитрий (10.11.11 19:28) [7]
    и так уже все рисую на буферном битмапе,хотел обойтись без сторонних библиотек.но теперь уже не знаю получиться ли
  • Омлет © (10.11.11 20:02) [8]
    > Дмитрий   (10.11.11 18:22) [5]

    Рисуй пауков через Canvas.Draw, указав TransparentColor.
  • Дмитрий (10.11.11 21:11) [9]
    это я конечно затупил,то что через draw с прозрачностью все впорядке знал,но  отказался от этой ф-и давно из за ее тормазнутости,неподумав что в буфер она может выводить с хорошей скоростью.Омлет,спасибо еще раз,Вы меня сегодня прям выручили.
  • antonn © (10.11.11 23:38) [10]
    фунция CopyTransparentBrush() из моего примера выше работает быстрее чем Canvas.Draw() на 30%, не смотря на исполнение "в лоб" =)
 
Конференция "Игры" » Почему так сильно нагружает проц Canvas у Timage?!
Есть новые Нет новых   [118240   +20][b:0][p:0]