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
Hahmon animointi "ruudukosta"
-
- Member
- Posts: 91
- Joined: Thu Dec 20, 2007 11:11 am
- Location: Espoo
Hahmon animointi "ruudukosta"
+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+
|T|u|r|t|l|e| |P|r|o|d|u|c|t|i|o|n|s|
+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+
|T|u|r|t|l|e| |P|r|o|d|u|c|t|i|o|n|s|
+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+
Re: Hahmon animointi "ruudukosta"
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:
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?
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
Re: Hahmon animointi "ruudukosta"
Asia taisi olla niin, että se ei ole mahdollista.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?
Re: Hahmon animointi "ruudukosta"
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
We're in a simulation, and God is trying to debug us.
Re: Hahmon animointi "ruudukosta"
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
- Misthema
- Advanced Member
- Posts: 312
- Joined: Mon Aug 27, 2007 8:32 pm
- Location: Turku, Finland
- Contact:
Re: Hahmon animointi "ruudukosta"
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.
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