Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > BlitzMax > 2D-программирование

Ответ
 
Опции темы
Старый 30.03.2010, 23:25   #1
cheaters-hater
Оператор ЭВМ
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
cheaters-hater (31.03.2010)
Старый 31.03.2010, 17:42   #3
cheaters-hater
Оператор ЭВМ
 
Регистрация: 09.10.2007
Сообщений: 45
Написано 8 полезных сообщений
(для 16 пользователей)
Ответ: что-то страшное и непонятное

спс. а то запарился уже искать ошибку. просто раньше в функциях подставлял 0, привык уже cell_count не использовать. вот и забыл..
(Offline)
 
Ответить с цитированием
Старый 31.03.2010, 17:50   #4
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,354
Написано 2,470 полезных сообщений
(для 6,850 пользователей)
Ответ: что-то страшное и непонятное

Ать.
Function LoadTiledImage:TImage(url:Objecttile_w:Inttile_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(urltile_wtile_h0c)
EndFunction 
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 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
cheaters-hater
Оператор ЭВМ
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Randomize (31.03.2010)
Старый 31.03.2010, 21:10   #6
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,354
Написано 2,470 полезных сообщений
(для 6,850 пользователей)
Ответ: что-то страшное и непонятное

отличный вариант
Ну лично я ни разу не использовал картинку, которая резалась бы не вся
такчто ф-ция годная
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 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)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 13:44.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com