Page 1 of 1

Спрайты

Posted: Tue Feb 11, 2014 7:50 am
by Фант
Если спрайты не прятать командой hide, а выносить их за пределы физического окна к примеру командой sprite 0 at -50,-50 и там их "хранить" до нужного момента. "Нагрузка" на память системы одинаковая? То есть нулевая?

Re: Спрайты

Posted: Tue Feb 11, 2014 8:10 am
by Mr. Kibernetik
Если спрайт создан и не удален командой DELETE, то он будет занимать память.
Если выполнить команду HIDE, то у системы появляется возможность временно сэкономить на памяти, перераспределив ее между другими спрайтами.

Кстати, кроме убирания с экрана по координатам, еще есть возможность установить альфу в 0.

Re: Спрайты

Posted: Mon Apr 25, 2016 5:58 am
by Фант
Mr.K!
В чем принципиальное отличие создания и отображения спрайтов двумя разными командами приведенными ниже?
1 пример. Работает просто идеально. Создает спрайты легко и не принужденно, память кстройства не переполняется.

Code: Select all

GRAPHICS
TIMER RESET
FOR i=1 TO 100
nn+=1
GRAPHICS CLEAR RND(1),RND(1),RND(1)
DRAW TEXT tim AT 0,0
DRAW TEXT nn AT 0,100
SPRITE 1 SCAN 0,0,1024,768
tim=TIME()
SPRITE 1 SHOW
NEXT i
SPRITE 1 DELETE
GRAPHICS CLEAR .5,.5,.5
DRAW TEXT tim AT 0,0
2 пример. Работает крайне не стабильно. На iPad 4 вылетает гдето на создании 42 спрайта:

Code: Select all

GRAPHICS
TIMER RESET
FOR i=1 TO 100
nn+=1
SPRITE 1 BEGIN 1024,768
GRAPHICS CLEAR RND(1),RND(1),RND(1)
DRAW TEXT tim AT 0,0
DRAW TEXT nn AT 0,100
SPRITE END
tim=TIME()
SPRITE 1 SHOW
NEXT i
SPRITE 1 DELETE
GRAPHICS CLEAR .5,.5,.5
DRAW TEXT tim AT 0,0

Re: Спрайты

Posted: Mon Apr 25, 2016 8:38 am
by Mr. Kibernetik
Это хороший вопрос.
Отмечу это как ошибку, будет нужно разобраться с этим.
Большое спасибо за приведенный пример.

Re: Спрайты

Posted: Tue Apr 26, 2016 5:06 pm
by Mr. Kibernetik
Разница вот в чем:
SPRITE BEGIN x,y создает новый объект размером x,y
SPRITE SCAN не создает нового объекта, а работает с существующим

Как быть?
SPRITE BEGIN (если не указан размер) тоже не создает новый объект, а работает с существующим

Таким образом работающий вариант с командой SPRITE BEGIN может выглядеть так:

Code: Select all

GRAPHICS
TIMER RESET
SPRITE 1 BEGIN 1024,768
SPRITE END
FOR i=1 TO 300
nn+=1
SPRITE 1 BEGIN
GRAPHICS CLEAR RND(1),RND(1),RND(1)
DRAW TEXT tim AT 0,0
DRAW TEXT nn AT 0,100
SPRITE END
tim=TIME()
SPRITE 1 SHOW
NEXT i
SPRITE 1 DELETE
GRAPHICS CLEAR .5,.5,.5
DRAW TEXT tim AT 0,0

Re: Спрайты

Posted: Tue Apr 26, 2016 5:23 pm
by Фант
ваш вариант мне понятен. Но тут особенность в чем: sprite 1 scan... отлично справляется и с разными размерами. Даже если мы будем менять размеры спрайта все будет работать тоже отлично:

Code: Select all

GRAPHICS
TIMER RESET
FOR i=1 TO 100
nn+=1
GRAPHICS CLEAR RND(1),RND(1),RND(1)
DRAW TEXT tim AT 0,0
DRAW TEXT nn AT 0,100
SPRITE 1 SCAN 0,0,rnd(1024)+1,rnd(768)+1
tim=TIME()
SPRITE 1 SHOW
NEXT i
SPRITE 1 DELETE
GRAPHICS CLEAR .5,.5,.5
DRAW TEXT tim AT 0,0
Почему в данном случае все работает? или здесь тоже идет работа с одним спрайтом величиной с экран только заливка идет на часть спрайта?

Re: Спрайты

Posted: Tue Apr 26, 2016 5:32 pm
by Mr. Kibernetik
Фант wrote: Почему в данном случае все работает? или здесь тоже идет работа с одним спрайтом величиной с экран только заливка идет на часть спрайта?
SPRITE SCAN заменяет в спрайте только картинку (полноценно, не на часть спрайта).
SPRITE BEGIN x,y удаляет и создает новый спрайт целиком, а там гораздо больше всего, чем просто отображаемая картинка.

Re: Спрайты

Posted: Fri Apr 07, 2017 9:15 am
by Фант
Привет! Нужен совет по графике.
В программе планируется отображать несколько сцен. Каждая сцена представляет собой графическое окно с использованием большого количества мелких изображений. Между сценами переход в самой программе довольно динамичный: выполнил несколько действий на одной сцене-перешел в другую и обратно.
Вот вопрос: как лучше загружать и хранить мелкие изображения в формате png?
1. Хранить их по папкам, постоянно загружая их и отображая на экране.
2. Подготовить заранее спрайт листы по тематике. В начале игры из этих спрайт листов создать многокадровые спрайты и по мере необходимости штамповать в графическом окне нужный кадр из многокадрового спрайта?
И еще один вопрос: команда SLOWDOWN работает только в заданном цикле? При переходе в другой цикл она автоматически перестает работать?
Спасибо ;)

Re: Спрайты

Posted: Fri Apr 07, 2017 9:49 am
by Mr. Kibernetik
Фант wrote:
Fri Apr 07, 2017 9:15 am
Привет! Нужен совет по графике.
В программе планируется отображать несколько сцен. Каждая сцена представляет собой графическое окно с использованием большого количества мелких изображений. Между сценами переход в самой программе довольно динамичный: выполнил несколько действий на одной сцене-перешел в другую и обратно.
Вот вопрос: как лучше загружать и хранить мелкие изображения в формате png?
1. Хранить их по папкам, постоянно загружая их и отображая на экране.
2. Подготовить заранее спрайт листы по тематике. В начале игры из этих спрайт листов создать многокадровые спрайты и по мере необходимости штамповать в графическом окне нужный кадр из многокадрового спрайта?
И еще один вопрос: команда SLOWDOWN работает только в заданном цикле? При переходе в другой цикл она автоматически перестает работать?
Спасибо ;)
Если хватает быстродействия устройства, можно каждый раз грузить нужные изображения из файлов.
Если хватает памяти устройства, можно заранее заготовить страницы с нужными объектами.
Команда SLOWDOWN работает только тогда, когда до нее доходит программа. Эта команда притормаживает программу, экономя работу процессора. В длительном цикле ожидания это дает суммарную существенную экономию.

Re: Спрайты

Posted: Fri Apr 07, 2017 10:09 am
by Фант
Ага спасибо!