Спрайты
- Фант
- Posts: 1363
- Joined: Sat Nov 30, 2013 10:01 am
- My devices: iPad 4 (iOS 9.3), iMac (MAC OS 11.03)
- Location: Россия,Санкт-Петербург
- Flag:
- Contact:
Спрайты
Если спрайты не прятать командой hide, а выносить их за пределы физического окна к примеру командой sprite 0 at -50,-50 и там их "хранить" до нужного момента. "Нагрузка" на память системы одинаковая? То есть нулевая?
- Mr. Kibernetik
- Site Admin
- Posts: 4786
- Joined: Mon Nov 19, 2012 10:16 pm
- My devices: iPhone, iPad, MacBook
- Location: Russia
- Flag:
Re: Спрайты
Если спрайт создан и не удален командой DELETE, то он будет занимать память.
Если выполнить команду HIDE, то у системы появляется возможность временно сэкономить на памяти, перераспределив ее между другими спрайтами.
Кстати, кроме убирания с экрана по координатам, еще есть возможность установить альфу в 0.
Если выполнить команду HIDE, то у системы появляется возможность временно сэкономить на памяти, перераспределив ее между другими спрайтами.
Кстати, кроме убирания с экрана по координатам, еще есть возможность установить альфу в 0.
- Фант
- Posts: 1363
- Joined: Sat Nov 30, 2013 10:01 am
- My devices: iPad 4 (iOS 9.3), iMac (MAC OS 11.03)
- Location: Россия,Санкт-Петербург
- Flag:
- Contact:
Re: Спрайты
Mr.K!
В чем принципиальное отличие создания и отображения спрайтов двумя разными командами приведенными ниже?
1 пример. Работает просто идеально. Создает спрайты легко и не принужденно, память кстройства не переполняется.
2 пример. Работает крайне не стабильно. На iPad 4 вылетает гдето на создании 42 спрайта:
В чем принципиальное отличие создания и отображения спрайтов двумя разными командами приведенными ниже?
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
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
- Mr. Kibernetik
- Site Admin
- Posts: 4786
- Joined: Mon Nov 19, 2012 10:16 pm
- My devices: iPhone, iPad, MacBook
- Location: Russia
- Flag:
Re: Спрайты
Это хороший вопрос.
Отмечу это как ошибку, будет нужно разобраться с этим.
Большое спасибо за приведенный пример.
Отмечу это как ошибку, будет нужно разобраться с этим.
Большое спасибо за приведенный пример.
- Mr. Kibernetik
- Site Admin
- Posts: 4786
- Joined: Mon Nov 19, 2012 10:16 pm
- My devices: iPhone, iPad, MacBook
- Location: Russia
- Flag:
Re: Спрайты
Разница вот в чем:
SPRITE BEGIN x,y создает новый объект размером x,y
SPRITE SCAN не создает нового объекта, а работает с существующим
Как быть?
SPRITE BEGIN (если не указан размер) тоже не создает новый объект, а работает с существующим
Таким образом работающий вариант с командой SPRITE BEGIN может выглядеть так:
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
- Фант
- Posts: 1363
- Joined: Sat Nov 30, 2013 10:01 am
- My devices: iPad 4 (iOS 9.3), iMac (MAC OS 11.03)
- Location: Россия,Санкт-Петербург
- Flag:
- Contact:
Re: Спрайты
ваш вариант мне понятен. Но тут особенность в чем: 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
- Mr. Kibernetik
- Site Admin
- Posts: 4786
- Joined: Mon Nov 19, 2012 10:16 pm
- My devices: iPhone, iPad, MacBook
- Location: Russia
- Flag:
Re: Спрайты
SPRITE SCAN заменяет в спрайте только картинку (полноценно, не на часть спрайта).Фант wrote: Почему в данном случае все работает? или здесь тоже идет работа с одним спрайтом величиной с экран только заливка идет на часть спрайта?
SPRITE BEGIN x,y удаляет и создает новый спрайт целиком, а там гораздо больше всего, чем просто отображаемая картинка.
- Фант
- Posts: 1363
- Joined: Sat Nov 30, 2013 10:01 am
- My devices: iPad 4 (iOS 9.3), iMac (MAC OS 11.03)
- Location: Россия,Санкт-Петербург
- Flag:
- Contact:
Re: Спрайты
Привет! Нужен совет по графике.
В программе планируется отображать несколько сцен. Каждая сцена представляет собой графическое окно с использованием большого количества мелких изображений. Между сценами переход в самой программе довольно динамичный: выполнил несколько действий на одной сцене-перешел в другую и обратно.
Вот вопрос: как лучше загружать и хранить мелкие изображения в формате png?
1. Хранить их по папкам, постоянно загружая их и отображая на экране.
2. Подготовить заранее спрайт листы по тематике. В начале игры из этих спрайт листов создать многокадровые спрайты и по мере необходимости штамповать в графическом окне нужный кадр из многокадрового спрайта?
И еще один вопрос: команда SLOWDOWN работает только в заданном цикле? При переходе в другой цикл она автоматически перестает работать?
Спасибо
В программе планируется отображать несколько сцен. Каждая сцена представляет собой графическое окно с использованием большого количества мелких изображений. Между сценами переход в самой программе довольно динамичный: выполнил несколько действий на одной сцене-перешел в другую и обратно.
Вот вопрос: как лучше загружать и хранить мелкие изображения в формате png?
1. Хранить их по папкам, постоянно загружая их и отображая на экране.
2. Подготовить заранее спрайт листы по тематике. В начале игры из этих спрайт листов создать многокадровые спрайты и по мере необходимости штамповать в графическом окне нужный кадр из многокадрового спрайта?
И еще один вопрос: команда SLOWDOWN работает только в заданном цикле? При переходе в другой цикл она автоматически перестает работать?
Спасибо
- Mr. Kibernetik
- Site Admin
- Posts: 4786
- Joined: Mon Nov 19, 2012 10:16 pm
- My devices: iPhone, iPad, MacBook
- Location: Russia
- Flag:
Re: Спрайты
Если хватает быстродействия устройства, можно каждый раз грузить нужные изображения из файлов.Фант wrote: ↑Fri Apr 07, 2017 9:15 amПривет! Нужен совет по графике.
В программе планируется отображать несколько сцен. Каждая сцена представляет собой графическое окно с использованием большого количества мелких изображений. Между сценами переход в самой программе довольно динамичный: выполнил несколько действий на одной сцене-перешел в другую и обратно.
Вот вопрос: как лучше загружать и хранить мелкие изображения в формате png?
1. Хранить их по папкам, постоянно загружая их и отображая на экране.
2. Подготовить заранее спрайт листы по тематике. В начале игры из этих спрайт листов создать многокадровые спрайты и по мере необходимости штамповать в графическом окне нужный кадр из многокадрового спрайта?
И еще один вопрос: команда SLOWDOWN работает только в заданном цикле? При переходе в другой цикл она автоматически перестает работать?
Спасибо
Если хватает памяти устройства, можно заранее заготовить страницы с нужными объектами.
Команда SLOWDOWN работает только тогда, когда до нее доходит программа. Эта команда притормаживает программу, экономя работу процессора. В длительном цикле ожидания это дает суммарную существенную экономию.