Спрайты

Post Reply
User avatar
Фант
Posts: 1363
Joined: Sat Nov 30, 2013 10:01 am
My devices: iPad 4 (iOS 9.3), iMac (MAC OS 11.03)
Location: Россия,Санкт-Петербург
Flag: Russia
Contact:

Спрайты

Post by Фант »

Если спрайты не прятать командой hide, а выносить их за пределы физического окна к примеру командой sprite 0 at -50,-50 и там их "хранить" до нужного момента. "Нагрузка" на память системы одинаковая? То есть нулевая?

User avatar
Mr. Kibernetik
Site Admin
Posts: 4782
Joined: Mon Nov 19, 2012 10:16 pm
My devices: iPhone, iPad, MacBook
Location: Russia
Flag: Russia

Re: Спрайты

Post by Mr. Kibernetik »

Если спрайт создан и не удален командой DELETE, то он будет занимать память.
Если выполнить команду HIDE, то у системы появляется возможность временно сэкономить на памяти, перераспределив ее между другими спрайтами.

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

User avatar
Фант
Posts: 1363
Joined: Sat Nov 30, 2013 10:01 am
My devices: iPad 4 (iOS 9.3), iMac (MAC OS 11.03)
Location: Россия,Санкт-Петербург
Flag: Russia
Contact:

Re: Спрайты

Post 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

User avatar
Mr. Kibernetik
Site Admin
Posts: 4782
Joined: Mon Nov 19, 2012 10:16 pm
My devices: iPhone, iPad, MacBook
Location: Russia
Flag: Russia

Re: Спрайты

Post by Mr. Kibernetik »

Это хороший вопрос.
Отмечу это как ошибку, будет нужно разобраться с этим.
Большое спасибо за приведенный пример.

User avatar
Mr. Kibernetik
Site Admin
Posts: 4782
Joined: Mon Nov 19, 2012 10:16 pm
My devices: iPhone, iPad, MacBook
Location: Russia
Flag: Russia

Re: Спрайты

Post 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

User avatar
Фант
Posts: 1363
Joined: Sat Nov 30, 2013 10:01 am
My devices: iPad 4 (iOS 9.3), iMac (MAC OS 11.03)
Location: Россия,Санкт-Петербург
Flag: Russia
Contact:

Re: Спрайты

Post 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
Почему в данном случае все работает? или здесь тоже идет работа с одним спрайтом величиной с экран только заливка идет на часть спрайта?

User avatar
Mr. Kibernetik
Site Admin
Posts: 4782
Joined: Mon Nov 19, 2012 10:16 pm
My devices: iPhone, iPad, MacBook
Location: Russia
Flag: Russia

Re: Спрайты

Post by Mr. Kibernetik »

Фант wrote: Почему в данном случае все работает? или здесь тоже идет работа с одним спрайтом величиной с экран только заливка идет на часть спрайта?
SPRITE SCAN заменяет в спрайте только картинку (полноценно, не на часть спрайта).
SPRITE BEGIN x,y удаляет и создает новый спрайт целиком, а там гораздо больше всего, чем просто отображаемая картинка.

User avatar
Фант
Posts: 1363
Joined: Sat Nov 30, 2013 10:01 am
My devices: iPad 4 (iOS 9.3), iMac (MAC OS 11.03)
Location: Россия,Санкт-Петербург
Flag: Russia
Contact:

Re: Спрайты

Post by Фант »

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

User avatar
Mr. Kibernetik
Site Admin
Posts: 4782
Joined: Mon Nov 19, 2012 10:16 pm
My devices: iPhone, iPad, MacBook
Location: Russia
Flag: Russia

Re: Спрайты

Post by Mr. Kibernetik »

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

User avatar
Фант
Posts: 1363
Joined: Sat Nov 30, 2013 10:01 am
My devices: iPad 4 (iOS 9.3), iMac (MAC OS 11.03)
Location: Россия,Санкт-Петербург
Flag: Russia
Contact:

Re: Спрайты

Post by Фант »

Ага спасибо!

Post Reply