Вверх ↑
Ответов: 9906
Рейтинг: 351
#1: 2020-04-17 15:18:29 ЛС | профиль | цитата
nesco писал(а):
Давай бублики

Пока я сделал по-другому: Выделил спрайты в массив картинок. При этом, картинка-спрайт далее не изменяется, и все работает без "корректировок".
И видно, что при этом работает заметно быстрее, чем с "каждоразовой чисткой" маски прозрачности.
Т.е., Кладов делал эдакие выверты (см. TBitmap.StretchDrawTransparent в моем предыдущем посте) не просто так.

Не понятно только, как штатно сбрасывать эту маску прозрачности.
Как-то это должно делаться через метод CanvasChanged, который назначается в TBitmap.fCanvas.OnChange
Вроде бы, при рисовании на картинке - канва меняется. Следовательно, должен сработать метод, назначенный на TBitmap.fCanvas.OnChange
Вроде бы..........
Почему это не срабатывает при "наших штатных рисованиях" на Bitmap-ах -- пока не понимаю...

Вот демка для обнаружения "одноразовости" маски прозрачности:
Add(Gif,9102168,140,119)
{
 BkColor=65535
 DrawSource=2
 AutoAnimation=1
 Point(Stream)
 link(onDraw,1347414:doLoad,[])
 link(Stream,8582945:Stream,[])
}
Add(MemoryStream,8582945,154,56)
{
 @Hint=#99:Здесь покоится GIF-файл, состоящий из фоновой картинки, лежащей в прямоугольнике < 0, 0, 640, 480 >|87:И 60-ти спрайтов размерами 64x64, и с координатами < 64*(i mod 10), 480+64*(i div 10) >|
}
Add(PaintBox,307876,210,56)
{
 Width=640
 Height=480
 Point(doSetFocus)
}
Add(Bitmap,1347414,217,126)
{
}
Add(Img_Bmp,13156309,210,189)
{
 link(onDraw,8919534:doCopy,[])
 link(Bitmap,9252341:Var2,[])
 link(SourceBitmap,15802692:Var2,[])
}
Add(Hub,7087970,105,126)
{
 OutCount=3
 link(onEvent1,9102168:doLoadFromStream,[])
 link(onEvent2,5577369:doCreate,[(207,139)(207,146)])
 link(onEvent3,13156309:doDraw,[(130,146)(130,195)])
}
Add(MainForm,14784633,56,112)
{
 Left=10
 Top=10
 Width=640
 Height=480
 BorderStyle=1
 ClientSize=0
 Position=1
 link(onCreate,7087970:doEvent1,[])
}
Add(Img_Bmp,2672945,392,245)
{
 X=20
 Y=20
 Transparent=0
 TransparentColor=65535
 link(onDraw,307876:doRefresh,[(431,251)(431,111)(200,111)(200,62)])
 link(Bitmap,6776562:Var3,[(398,117)])
 link(SourceBitmap,7123280:Var3,[(405,173)])
}
Add(GetDataEx,9252341,210,112)
{
 link(Data,307876:Bitmap,[])
}
Add(Bitmap,5577369,294,126)
{
 HWidth=64
 HHeight=64
 Point(doCreate)
}
Add(Img_Bmp,10317049,294,245)
{
 Point(Y)
 link(onDraw,9778986:doDraw,[])
 link(Bitmap,7123280:Var2,[])
 link(SourceBitmap,15802692:Var3,[(307,180)])
 link(Y,616536:Count,[(314,236)(286,236)(286,292)(244,292)])
}
Add(GetDataEx,7123280,294,168)
{
 link(Data,5577369:Bitmap,[])
}
Add(GetDataEx,15802692,217,175)
{
 link(Data,1347414:Bitmap,[])
}
Add(CounterEx,3466366,189,245)
{
 Min=-600
 Max=0
 Step=64
 Direct=1
 Point(onThroughMin)
 link(onNext,10317049:doDraw,[])
 link(onThroughMin,616536:doNext,[])
}
Add(CounterEx,616536,238,252)
{
 Min=-860
 Max=-480
 Step=64
 Direct=1
 Default=-480
}
Add(Timer,220061,140,245)
{
 Interval=10
 link(onTimer,3466366:doNext,[])
}
Add(Bitmap,9741532,350,189)
{
 @Color=43520
 HWidth=64
 HHeight=64
 Point(doCreate)
}
Add(Img_Copy,8919534,259,189)
{
 @Color=43520
 X=20
 Y=20
 Width=64
 Height=64
 link(onCopy,9741532:doLoad,[])
 link(Source,3899978:Var2,[])
}
Add(GetDataEx,3899978,259,112)
{
 Angle=3
 link(Data,9252341:Var3,[])
}
Add(Img_Bmp,9778986,343,245)
{
 @Color=43520
 X=20
 Y=20
 Transparent=0
 link(onDraw,2672945:doDraw,[])
 link(Bitmap,6776562:Var2,[])
 link(SourceBitmap,9741532:Bitmap,[])
}
Add(GetDataEx,6776562,343,112)
{
 Angle=3
 link(Data,3899978:Var3,[])
}
В эту демку надо загрузить ручками GIF из предыдущего архива (с gif-кой схема типа не загружается - шибко большая)
Вышеозначенная мной "доработка" исправляет ситуацию.
Но замедляет (по понятным причинам - лишнее создание/удаление динамического объекта, маски прозрачности) уже работающий процесс (где "одноразовость" всех устраивает).

Вот так вот.......
карма: 9

0
файлы: 1SpriteDemo_0.rar [70.7KB] [611]
Редактировалось 6 раз(а), последний 2020-04-17 17:54:18