Тема: FAQ по B3D
Показать сообщение отдельно
Старый 28.08.2007, 10:41   #13
H@NON
Дэвелопер
 
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений
(для 772 пользователей)
Re: FAQ по B3D

ВОПРОС : так как же все-таки загрузить gif картинку как анимационную ленту?
ОТВЕТ:

можно так:
; Animated Gif file loader by Peter Scheutz 2003.03.13
; Load animated Gif and returns an animImage
; Stores number of frames in gifframecount

Global gifframecount

; useage:
;myanim=LoadAnimGif("mygif.gif")



Function LoadAnimGif(fname$)

    Local fbank
    Local f
    Local thegif
    Local animPic
    Local count
    Local framecount
    fbank=CreateBank(FileSize(fname$))

    f=OpenFile(fname$)
        ReadBytes fbank,f,0,BankSize(fbank)
    CloseFile f
    
    ; This is a quick hack and not quite good enough,
    ; as it could count too many frames
    ; Works for all the gifs I tested though...
    ; Looks for "Gif magic marker"
    For n=0 To BankSize(fbank)-1
        If PeekByte(fbank,n)=0
        If PeekByte(fbank,n+1)=33
        If PeekByte(fbank,n+2)=249
            ;DebugLog "Gif Magic found at: " + n
            framecount=framecount+1
        EndIf
        EndIf
        EndIf
    
    Next

    FreeBank fbank

    thegif=OpenMovie(fname$)

    animPic=CreateImage(MovieWidth(thegif),MovieHeight(thegif),framecount)

    SetBuffer BackBuffer()
    
    count=0
    While MoviePlaying(thegif) And count<framecount
        DrawMovie thegif,0,0    
        GrabImage animPic,0,0,count
        count=count+1
    Wend

    CloseMovie thegif
    
    Cls
    Flip

    ; store framecount in global variable
    gifframecount=framecount

    Return animPic

End Function
ВОПРОС : как узнать scancode нужной мне клавиши?
ОТВЕТ: нужно нажать на кнопку ввиде домика на главной панели и вы попадете на главную страницу helpa , далее жмем Command Reference . Теперь на панели слева будут надписи Scancodes и Scancodes picker. Нажав на первую надпись вы попадете на страницу где бедет записаны все сканкоды клавиш в виде " Key - scancode". Нажав на другой надписи перед вами появится изображение клавиатуры. Нажав на нужную вам клавишу в верхнем поле с надписью Scan Code появится число, которое и является сканкодом выбранной клавиши.

ВОПРОС : как узнать сколько треугольников в текущем фрейме?
ОТВЕТ:для этого есть команда TrisRendered(), которая возвращает число треугольников попавших в камеру. Посмотреть можно так: Text 10,10,trisRendered()


ВОПРОС : что делать если мне надо в типе сделать массив, например для элемета patrons?
ОТВЕТ: Для этого просто впишите следующую строку в тип :
Field patrons[100]
Теперь обращатся к этому массиву можно так:
указатель\patrons[13] = zaklinit_pistolet()

ВОПРОС : У меня есть переменная. Она у меня должна вызываться в разных функциях, но этого не происходит.В чем может быть проблема?
ОТВЕТ: Раз у вас переменная вызывается в разных функциях, то ее нужно обзывать как глобальную, тогда она будет доступна в любой части кода. Обзывать ее можно перед главным циклом, сразу после инициализации графики( после строчки graphics....), вот так:
global имя_переменной
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Yalenz (02.03.2009)