Hahmon animointi "ruudukosta"

Voit pyytää apua ohjelmointiongelmiin täältä.
Post Reply
Turtle Productions
Member
Posts: 91
Joined: Thu Dec 20, 2007 11:11 am
Location: Espoo

Hahmon animointi "ruudukosta"

Post by Turtle Productions »

Morjes,
tuli sellanen ongelma, etten tiedä miten saan otettua animaation "ruudukosta", eli esim. tällaisesta (ei oma sprite). (Normaalina ottaa riviltä)
Olen nähnyt että joku olisi käyttänyt tällaisia spritejä CB:ssä.

-TP
+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+
|T|u|r|t|l|e| |P|r|o|d|u|c|t|i|o|n|s|
+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Hahmon animointi "ruudukosta"

Post by Jonez »

Cb:ssä käytettävien animoitujen kuvien täytyy olla horisontaalisessa järjestyksessä kovalevyltä ladatussa kuvassa. Jos siis aiot käyttää cb:n omaa LoadAnimImage-funktiota. Oman animointisysteemin luominen ei kuitenkaan ole kovin hankalaa, ja sillä tavalla saat myös muunlaiset spritet toimimaan.

Voit tehdä oman kuvasarjan monirivisestä kuvasta jollain tällaisella tyylillä. Voi olla että koodissa on virheitä, sitä ei ole testattu:

Code: Select all

img = LoadImage(alkuperainenKuva) //alkuperäinen kuva

Dim kuvasarja(spritemaara)
For i = 0 To spritemaara
   kuvasarja(i)  = MakeImage(spr_leveys, spr_korkeus)
Next i

For y = 0 To (ImageWidth(img) / spr_leveys) - 1
    For x = 0 To (ImageHeight(img) / spr_korkeus) - 1
        i = x + y * spr_maara_leveyssuunnassa
        CopyBox x * spr_leveys, y * spr_korkeus, spr_leveys, spr_korkeus, 0, 0, Image(img), Image(i)
    Next x
Next y
Huomasin juuri että cb:ssä on MakeImage-funktiossa parametrina framemäärä. Tai olen tiennyt tämän ikuisuuksia, mutta yksi kysymys nousi päähän: miten saa piirrettyä kuvan eri frameen?
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
Viltzu
Guru
Posts: 1132
Joined: Sun Aug 26, 2007 5:45 pm
Location: Alavieska
Contact:

Re: Hahmon animointi "ruudukosta"

Post by Viltzu »

Jonez wrote: Huomasin juuri että cb:ssä on MakeImage-funktiossa parametrina framemäärä. Tai olen tiennyt tämän ikuisuuksia, mutta yksi kysymys nousi päähän: miten saa piirrettyä kuvan eri frameen?
Asia taisi olla niin, että se ei ole mahdollista.
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: Hahmon animointi "ruudukosta"

Post by MaGetzUb »

Kuvat ruudukossa käy ihan hyvin animoimiseen. Itsekkin tein oman tilekartta formaatin lataus tutoriaaliin tilesetin pelkästään lataamalla media tileset.bmp:n ja asettamalla tälle frame kooksi 32x32pix. Media tileset.bmp:ä on 256 framea, koska vaaka ja pystysuunnassa on molemmissa 16 tileä. Eli kyllä voit käyttää ruudukkomaisia kuvia animaatioihin.
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
jaahas
Advanced Member
Posts: 307
Joined: Fri Feb 05, 2010 11:36 pm
Location: Tornio

Re: Hahmon animointi "ruudukosta"

Post by jaahas »

Vähän eri tavalla:

Code: Select all

kuva=LoadImage(alkuperäinenkuva)

kuva=makeimagetoanim(kuva,20,20,0,6)


Function makeimagetoanim(img2,x,y,aloitus,pituus,obj/img=0,pyöritys=1) //kuva, joka muutetaan,framen leveys,framen korkeus,aloitus frame,framejen määrä,0=animoitu kuva 1=animoitu objecti,pyörityslaatu(objecti)
    
    img=MakeImage(pituus*x,y)
    
    For i=0 To ImageHeight(img2)/y-1
    
        CopyBox 0,i*y,ImageWidth(img2),y,ImageWidth(img2)*i,0,Image(img2),Image(img)
        
    Next i
    
    SaveImage img,"testi.bmp"
    
    DeleteImage img
    
    If obj/img=0 Then
    
        img=LoadAnimImage("testi.bmp",x,y,aloitus,pituus)
      
    Else
    
        img=LoadAnimObject("testi.bmp",x,y,aloitus,pituus,pyöritys)
        
    EndIf
    
    Return img

EndFunction
User avatar
Misthema
Advanced Member
Posts: 312
Joined: Mon Aug 27, 2007 8:32 pm
Location: Turku, Finland
Contact:

Re: Hahmon animointi "ruudukosta"

Post by Misthema »

Mjoo. Eipä tuota tarvii erikseen muuttaa miksikään, paitsi jos välttämättä haluaa. Tämäkin on yksi mahdollisuus muiden rinnalla:

Kehittele itse paremmaksi. Unisena kun ei voi tämän enempää auttaa.

Code: Select all

Const DIR_UP = 0
Const DIR_RIGHT = 1
Const DIR_DOWN = 2
Const DIR_LEFT = 3

img = LoadImage("JamelaSprite.png")


Repeat

    If Timer()>frameTimer Then
        mones=mones+1
        If mones>2 Then mones=0
        frameTimer=Timer()+250
    EndIf
    
    x = x + (RightKey()-LeftKey())*2
    y = y + (DownKey()-UpKey())*2
    
    If KeyHit(cbKeyD) Then dir=dir+1
    If dir>3 Then dir=0
    
    Animatiaatiointi(img,x,y,mones,dir,3,4)
    
    DrawScreen
    
Forever

Function Animatiaatiointi(img,x,y,mones,dir,kuvia_x,kuvia_y)
    iw=ImageWidth(img)/kuvia_x
    ih=ImageHeight(img)/kuvia_y
    
    DrawImageBox img,x,y, mones*iw,dir*ih, iw,ih
    
EndFunction
Post Reply