1 / 1 / 0
Регистрация: 24.10.2009
Сообщений: 29
1

Как присвоить фрагменты из цельной картинки в спрайты?

11.10.2015, 10:09. Показов 2065. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Давно не могу найти решения, как из цельной картинки присвоить фрагменты в спрайт (как это обычно использует множество игровых движков.), чтобы не грузить картинки по отдельности из файла. Буду при много благодарен за помощь. У меня Pure Basic 5.30
Спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.10.2015, 10:09
Ответы с готовыми решениями:

Разбивка картинки на фрагменты и группировка
Здравствуйте! Недавно мне попалась презентация, где все картинки разбиты на невероятное...

Как присвоить путь из FileUpload url-картинки?
Хочу чтоб выбранное через FileUpload изображение появлялось на странице в ImageButton. Как...

В строке заменить все фрагменты x на фрагменты y
В заданной строке z заменить все фрагменты x на фрагменты y. Для решения используйте собственную...

Для 400 pictureBox присвоить картинки по условию
У меня есть например 400 элементов как эти элементы можно заполнить или присвоить значение через...

5
4393 / 2243 / 252
Регистрация: 28.10.2011
Сообщений: 8,570
Записей в блоге: 6
11.10.2015, 11:21 2
Картинку с множеством спрайтов нужно загрузить функцией LoadSprite или CatchSprite. А перед отображением на экране, нужный фрагмент спрайта выбрать функцией ClipSprite.
0
1 / 1 / 0
Регистрация: 24.10.2009
Сообщений: 29
11.10.2015, 14:02  [ТС] 3
У меня всё равно не получается, ClipSprite лишь обрезает картинку, а когда я её пытаюсь скопировать в новый спрайт, то копируется оригинал... Такое впечатление что новый спрайт в памяти занимает оригинал, просто обрезанные части не видно.
Вот набросал код, картинка 1.bmp с шестью спрайтами 50х50 пикселей, общий размер картинки 150х100
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
UseJPEGImageEncoder()
InitSprite()
InitKeyboard()
 
Procedure ecran()
  ClearScreen(RGB(0, 0, 0)); очистка экрана
  
  DisplaySprite(0,0,0); вывожу оригинал
  DisplaySprite(1,50,100) ; вывожу скопированный спрайт
EndProcedure
 
If OpenWindow(0,0,0,300,300,"test"); окно номер 0 x,y,ширина, высота, название 
  If OpenWindowedScreen(WindowID(0), 0, 0, 300, 300, 0, 0, 0)
    
   LoadSprite(0,"1.bmp",0); загружаю основную картинку
    
   ClipSprite(0,0,0,50,50); обрезаю первую часть спрайта
   CopySprite(0,1,0); копирую обрезанный спрайт в новый !!!
    
    SetFrameRate(75)
    
    do:
Event = WindowEvent()
Delay(10)
ExamineKeyboard(); обновление нажатых клавиш 
 
If KeyboardPushed(#PB_Key_Escape)   ; выход из программы
  End
EndIf
 
ecran(); запуск процедуры экрана
Goto do
 
EndIf
EndIf
0
4393 / 2243 / 252
Регистрация: 28.10.2011
Сообщений: 8,570
Записей в блоге: 6
11.10.2015, 17:06 4
Этот метод работает на так.
Цитата Сообщение от locm Посмотреть сообщение
перед отображением на экране, нужный фрагмент спрайта выбрать функцией ClipSprite.
Про копирование в другой спрайт речь не шла.
Если нужно получить множество спрайтов из одной картинки, то есть как минимум два варианта.

1. Загрузить картинку функцией LoadImage. Создавать спрайты и нарисовать (функция StartDrawing) на них нужный фрагмент функцией DrawImage, указывая смешение и размер картинки спрайта.

2. Загрузить картинку функцией LoadImage. Создать функцией GrabImage новую картинку, содержащую фрагмент исходной. Экспортировать картинку функцией EncodeImage и загрузить ее с помощью CatchSprite. При этом нужно не забывать освобождать память.
0
6804 / 2831 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
11.10.2015, 17:17 5
Лучший ответ Сообщение было отмечено Pro_grammer как решение

Решение

Попробуйте мой код
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
OpenWindow(0,0,0,800,600,"",#PB_Window_ScreenCentered)
InitSprite():InitKeyboard():InitSound()
OpenWindowedScreen(WindowID(0),0,0,800,600)
LoadImage(0,"1.bmp")
StartDrawing(ScreenOutput()):DrawImage(ImageID(0),0,0):
StopDrawing()
 
spr=GrabSprite(#PB_Any,0,0,50,50,#PB_Sprite_AlphaBlending)
CopySprite(spr,1,#PB_Sprite_AlphaBlending); копирую обрезанный спрайт в новый !!!
 
Repeat
  FlipBuffers():ClearScreen(0):ExamineKeyboard()
  DisplayTransparentSprite(1,10,10)
  DisplayTransparentSprite(spr,100,100)
  Repeat:Until WindowEvent()=0
  Until KeyboardReleased(1)
1
1 / 1 / 0
Регистрация: 24.10.2009
Сообщений: 29
11.10.2015, 17:54  [ТС] 6
locm, а можно небольшие примеры по этим двум пунктам, а то я не совсем могу понять саму механику...

Добавлено через 10 минут
Pro_grammer, спасибо, работает, буду пользоваться...
0
11.10.2015, 17:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.10.2015, 17:54
Помогаю со студенческими работами здесь

Как рисуются спрайты?
Как создать простой 2д спрайт, на какой программе вы бы посоветовали это реализовать?

Как реализовать 2D спрайты?
Можно ли в средствами OpenGL создать изображение отдельно от кадрового буфера, привязанного к окну...

Как работают спрайты?
Доброе время суток! помогите пожалуйста разобраться как работают спрайты?, Допустим у меня есть...

Как делать спрайты?
Наведите пример кода со спрайтами, тока полноценный, а то пользуюсь сервисами онлайн для создания...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru