Вверх ↑
Этот топик читают: Гость
Ответов: 9904
Рейтинг: 351
#391: 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-кой схема типа не загружается - шибко большая)
Вышеозначенная мной "доработка" исправляет ситуацию.
Но замедляет (по понятным причинам - лишнее создание/удаление динамического объекта, маски прозрачности) уже работающий процесс (где "одноразовость" всех устраивает).

Вот так вот.......

Редактировалось 6 раз(а), последний 2020-04-17 17:54:18
карма: 9

0
файлы: 1SpriteDemo_0.rar [70.7KB] [79]
Ответов: 1105
Рейтинг: 35
#392: 2020-04-27 02:52:48 ЛС | профиль | цитата
Работа с файловыми потоками.
Там есть неочевидный момент в установке смещения на 0 при КАЖДОМ считывании из элемента. Видимо при считывании счетчик - указатель байт остается на последнем значении байта.
Попробуйте отключить флажком сброс в ноль смещения и схема перестанет переключать картинки.
карма: 1
vk.com/azizazizov Жаль,приходится покидать этот форум спустя 13 лет - отношение в данном коллективе перестало устраивать.Может я расту,может деградирую-время покажет.
0
файлы: 1Работа с файловыми потоками.zip [68.4KB] [76]
392
Сообщение
...
Прикрепленные файлы
(файлы не залиты)