|
30.03.2010, 23:25
|
#1
|
Оператор ЭВМ
Регистрация: 09.10.2007
Сообщений: 45
Написано 8 полезных сообщений (для 16 пользователей)
|
что-то страшное и непонятное
где-то страшная и непонятная ошибка.. не могу понять где.
к массиву в типе обращается отлично, а к картинке в том же типе (даже на 0-й фрейм) - говорит "Unhandled Exception:Attempt to index array element beyound array length"
'>> тип страйпа
Type TStrip
Field strip:TImage
Field frame_id:String[] 'размерностью в количество фреймов
EndType
'>> массив страйпов
Global strip_vault:TStrip[]
'>> загрузка страйпа
Function strip_load:TStrip(name:Object, cell_width:Short, cell_height:Short, cell_count:Byte, flags:Int=-1)
' загрузка изображения
Local image:TImage= LoadAnimImage(name, cell_width, cell_height, cell_count, flags)
If Not(image) Then DEBUG_log_it("stip_load()<~tневерный адрес изображения. размер vault'a= "+strip_vault.length) Return(Null)
' добавление ячейки в массив
Local strip_last:Int = strip_vault.length
strip_vault = strip_vault[..strip_last+1]
' создание в ячейке нового страйпа
strip_vault[strip_last] = New TStrip
strip_vault[strip_last].strip = image
strip_vault[strip_last].frame_id = strip_vault[strip_last].frame_id[..cell_count]
DEBUG_log_it("stip_load()<~tстрайп: "+strip_last+" загружен= "+(Not(strip_vault[strip_last])=False))
EndFunction
|
(Offline)
|
|
31.03.2010, 07:22
|
#2
|
Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
Ответ: что-то страшное и непонятное
Ты пропустил параметр CELL_START в функции загрузки.
Вот как надо:
Local image:TImage = LoadAnimImage(name, cell_width, cell_height, cell_start, cell_count, flags)
Если всегда все кадры грузить будешь, то можно в параметр твоей функции загрузки не добавлять его, а просто ноль поставить для LoadAnimImage и всё.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
31.03.2010, 17:42
|
#3
|
Оператор ЭВМ
Регистрация: 09.10.2007
Сообщений: 45
Написано 8 полезных сообщений (для 16 пользователей)
|
Ответ: что-то страшное и непонятное
спс. а то запарился уже искать ошибку. просто раньше в функциях подставлял 0, привык уже cell_count не использовать. вот и забыл..
|
(Offline)
|
|
31.03.2010, 17:50
|
#4
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,361
Написано 2,473 полезных сообщений (для 6,856 пользователей)
|
Ответ: что-то страшное и непонятное
Ать.
Function LoadTiledImage:TImage(url:Object, tile_w:Int, tile_h:Int) Local img:TImage = LoadImage(url) If img = Null RuntimeError("<ERROR> Image '" + url.ToString() + "'") End EndIf Local iw:Int = ImageWidth(img) Local ih:Int = ImageHeight(img) Local c:Int = (iw / tile_w) * (ih / tile_h) Return LoadAnimImage(url, tile_w, tile_h, 0, c) EndFunction
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 4090 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
31.03.2010, 18:38
|
#5
|
Оператор ЭВМ
Регистрация: 09.10.2007
Сообщений: 45
Написано 8 полезных сообщений (для 16 пользователей)
|
Ответ: что-то страшное и непонятное
тоже вариант. но только если вся картинка должна резатся. можно конечно еще ввести параметр, сколько фреймов с конца выкинуть, но суть остается та же.
можно еще сделать так (быстрее ~в 2.5 раза):
Function LoadTiledImage:TImage(url:Object, tile_w:Int, tile_h:Int)
Local pixa:TPixmap
// такой же код проверки сидит и в LoadImage и LoadAnimImage :-)
If TPixmap(url) Then
pixa = url
Else
pixa = LoadPixmap(url)
endif
If pixa = Null
RuntimeError("<ERROR> Image '" + url.ToString() + "'")
End
EndIf
Local iw:Int = PixmapWidth(pixa)
Local ih:Int = PixmapHeight(pixa)
Local c:Int = (iw / tile_w) * (ih / tile_h)
Return LoadAnimImage(pixa, tile_w, tile_h, 0, c)
EndFunction
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
31.03.2010, 21:10
|
#6
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,361
Написано 2,473 полезных сообщений (для 6,856 пользователей)
|
Ответ: что-то страшное и непонятное
отличный вариант
Ну лично я ни разу не использовал картинку, которая резалась бы не вся
такчто ф-ция годная
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 4090 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:53.
|