forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=109)
-   -   что-то страшное и непонятное (http://forum.boolean.name/showthread.php?t=12306)

cheaters-hater 30.03.2010 23:25

что-то страшное и непонятное
 
где-то страшная и непонятная ошибка.. не могу понять где.:SOS:
к массиву в типе обращается отлично, а к картинке в том же типе (даже на 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


Жека 31.03.2010 07:22

Ответ: что-то страшное и непонятное
 
Ты пропустил параметр CELL_START в функции загрузки.
Вот как надо:
Код:

Local image:TImage = LoadAnimImage(name, cell_width, cell_height, cell_start, cell_count, flags)
Если всегда все кадры грузить будешь, то можно в параметр твоей функции загрузки не добавлять его, а просто ноль поставить для LoadAnimImage и всё.

cheaters-hater 31.03.2010 17:42

Ответ: что-то страшное и непонятное
 
спс. а то запарился уже искать ошибку. просто раньше в функциях подставлял 0, привык уже cell_count не использовать. вот и забыл.. :)

Randomize 31.03.2010 17:50

Ответ: что-то страшное и непонятное
 
Ать.
PHP код:

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 


cheaters-hater 31.03.2010 18:38

Ответ: что-то страшное и непонятное
 
тоже вариант. но только если вся картинка должна резатся. можно конечно еще ввести параметр, сколько фреймов с конца выкинуть, но суть остается та же.

можно еще сделать так (быстрее ~в 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




Randomize 31.03.2010 21:10

Ответ: что-то страшное и непонятное
 
отличный вариант :super:
Ну лично я ни разу не использовал картинку, которая резалась бы не вся :)
такчто ф-ция годная


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot