Page 1 of 1

RotatedText - pyöriteltävä teksti

Posted: Wed Jun 29, 2011 5:59 pm
by Execute
Tässä ajattelin että pyöriteltävä teksti olisi mukava. Juttu oli helppo toteuttaa joten tulosta tuli! RotatedText tarvitsee neljä parametria toimiakseen. x ja y akselit. Montako astetta tekstiä pyöritetään ja itse tekstin.

Itse functio:

Code: Select all

    Function RotatedText(x,y,aste,tex$)
    pituus = TextWidth(tex$)
    korkeus = TextHeight(tex$)
    teksti = MakeImage(pituus,korkeus)
    DrawToImage teksti
    Text 0,0, "" +tex$
    DrawToScreen
    Smooth2D ON
    RotateImage teksti,aste
    DrawImage teksti,x,y
    Smooth2D OFF
    DeleteImage teksti
    EndFunction 
Sitten functio kökköisellä esimerkillä:

Code: Select all

font = LoadFont("Impact",50)
SetFont font

Repeat 
Color cbred
RotatedText(200,200,aste,"MOI")
DrawScreen 
If takas = 0 Then 
aste = aste+5
Else 
aste = aste-5
EndIf  
If aste > 50 Then 
takas = 1
EndIf 
If aste < -50 Then 
takas = 0
EndIf 
Forever 

    Function RotatedText(x,y,aste,tex$)
    pituus = TextWidth(tex$)
    korkeus = TextHeight(tex$)
    teksti = MakeImage(pituus,korkeus)
    DrawToImage teksti
    Text 0,0, "" +tex$
    DrawToScreen
    Smooth2D ON
    RotateImage teksti,aste
    DrawImage teksti,x,y
    Smooth2D OFF
    DeleteImage teksti
    EndFunction 
Jos koodissa on joitain epäkohtia niin mainitkaa.

Re: RotatedText - pyöriteltävä teksti

Posted: Wed Jun 29, 2011 7:52 pm
by Viltzu
Execute wrote: Itse functio:
Se on funktio suomeksi.
Execute wrote: Sitten functio kökköisellä esimerkillä:
*koodia*
Jos koodissa on joitain epäkohtia niin mainitkaa.
Koodi ei ole sisennetty.

Mutta aika perus funktio. Onhan näitä on ollut useampiakin.

Re: RotatedText - pyöriteltävä teksti

Posted: Wed Jun 29, 2011 8:48 pm
by MaGetzUb
Execute wrote:Tässä ajattelin että pyöriteltävä teksti olisi mukava. Juttu oli helppo toteuttaa joten tulosta tuli! RotatedText tarvitsee neljä parametria toimiakseen. x ja y akselit. Montako astetta tekstiä pyöritetään ja itse tekstin.

Itse functio:

Code: Select all

..funkkari.. 

Jos koodissa on joitain epäkohtia niin mainitkaa.
Kannattaisi varmaan poistaakkin tuo teksti(kuva) muuttuja tuola funktion sisällä, koska nyt luot noita teksti(kuva) muuttujia kokoajan lisää etkä poistele niitä. Muistisyöppö, mikä muistisyöppö. :)

RotatedText - pyöriteltävä teksti

Posted: Wed Jun 29, 2011 9:48 pm
by Execute
MaGetzUb wrote: Kannattaisi varmaan poistaakkin tuo teksti(kuva) muuttuja tuola funktion sisällä, koska nyt luot noita teksti(kuva) muuttujia kokoajan lisää etkä poistele niitä. Muistisyöppö, mikä muistisyöppö. :)
No kiitos tiedosta. Korjattu funkkari ja esimerkki aloitusviestissä.

Re: RotatedText - pyöriteltävä teksti

Posted: Thu Jun 30, 2011 8:28 am
by MaGetzUb
Execute wrote:
MaGetzUb wrote: Kannattaisi varmaan poistaakkin tuo teksti(kuva) muuttuja tuola funktion sisällä, koska nyt luot noita teksti(kuva) muuttujia kokoajan lisää etkä poistele niitä. Muistisyöppö, mikä muistisyöppö. :)
No kiitos tiedosta. Korjattu funkkari ja esimerkki aloitusviestissä.
Viiden kirjaimen pituisella tekstillä alkaa minulla jo hidastamaan funktiosi.. Toinen tyylihän olisi että kaikki kirjaimet pyöriteltäisiin valmiiksi talukkoon ja piirreltäisiin sieltä. Mutta CB:ltä pyörittely vie oman aikansa. :/

Re: RotatedText - pyöriteltävä teksti

Posted: Thu Jun 30, 2011 10:04 am
by Dimple
Käytännössä CB:llä tuollainen funktio kannattaisi jakaa kahteen osaan. Ensimmäinen funktio luo kuvan ja pyörittelee sen taulukkoon, ja toinen funktio piirtää sen oikeassa asennossa. Todennäköisesti käyttäjä joutuu kuitenkin itse esittelemään sen taulukon ennen sitä funktiota, jos ei joku väännä jotain muistipala-systeemiä. CB:llä kun ei onnistu samat temput kuin esim. C++:lla (varataan taulukko heapilta ja passataan pointteri, tai luodaan olio ja annetaan se).

Re: RotatedText - pyöriteltävä teksti

Posted: Thu Jun 30, 2011 3:09 pm
by MaGetzUb
Dimple wrote:Käytännössä CB:llä tuollainen funktio kannattaisi jakaa kahteen osaan. Ensimmäinen funktio luo kuvan ja pyörittelee sen taulukkoon, ja toinen funktio piirtää sen oikeassa asennossa. Todennäköisesti käyttäjä joutuu kuitenkin itse esittelemään sen taulukon ennen sitä funktiota, jos ei joku väännä jotain muistipala-systeemiä. CB:llä kun ei onnistu samat temput kuin esim. C++:lla (varataan taulukko heapilta ja passataan pointteri, tai luodaan olio ja annetaan se).
Muinoin tekemäni kirjasto juuri tuohon tarkoitukseen(SPuntte:la on samanlainen kirjasto myös olemassa. ;));

Code: Select all

     
Type Sprites
    Field Sprite_Rot As Short
    Field Sprite_Images As Integer 
    Field Sprite_Width As Integer
    Field Sprite_Height As Integer
EndType 

Function LoadSprite(f$, rotation = 72, maskr = 0, maskg = 0, maskb = 0)
    AngStep = 360 / rotation
    Tmp = LoadImage(f$)
    MaskImage Tmp,maskr,maskg,maskb
    Sprite.Sprites = New(Sprites)
    Sprite\Sprite_Rot = rotation
    Sprite\Sprite_Images = MakeMEMBlock((rotation+1)*4)
    Sprite\Sprite_Width = ImageWidth(tmp)
    Sprite\Sprite_Height = ImageHeight(tmp)
    For i = 0 To rotation
        IMG = CloneImage(TMP)
        HotSpot IMG, 320, 240
        RotateImage IMG,-i*Angstep
        PokeInt Sprite\Sprite_Images, i*4, IMG
    Next i
    Return ConvertToInteger(Sprite)
EndFunction 

Function CreateSprite(tmp, rotation = 72, maskr = 0, maskg = 0, maskb = 0)
    Sprite.Sprites = New(Sprites)
    Sprite\Sprite_Rot = rotation
    Sprite\Sprite_Images = MakeMEMBlock((rotation+1)*4)
    Sprite\Sprite_Width = ImageWidth(tmp)
    Sprite\Sprite_Height = ImageHeight(tmp)
    For i = 0 To rotation
        IMG = CloneImage(TMP)
        MaskImage IMG, maskr, maskg, maskb
        HotSpot IMG, 320, 240
        RotateImage IMG,-i*Angstep
        PokeInt Sprite\Sprite_Images, i*4, IMG
    Next i
    Return ConvertToInteger(Sprite)
EndFunction

Function LoadAnimSprite(f$, w,h, start, frames, rotation = 72, maskr = 0, maskg = 0, maskb = 0)
    AngStep = 360 / rotation
    Tmp = LoadAnimImage(f$,w,h, start, frames)
    MaskImage Tmp,maskr,maskg,maskb
    Sprite.Sprites = New(Sprites)
    Sprite\Sprite_Rot = rotation
    Sprite\Sprite_Images = MakeMEMBlock((rotation+1)*4)
    Sprite\Sprite_Width = ImageWidth(tmp)
    Sprite\Sprite_Height = ImageHeight(tmp)    
    For i = 0 To rotation
        IMG = CloneImage(TMP)
        RotateImage IMG,-i*Angstep
        PokeInt Sprite\Sprite_Images, i*4, IMG
    Next i
    Return ConvertToInteger(Sprite)
EndFunction 

Function DrawSprite(handle,x,y,angle#,frame=0)
    angle = WrapAngle(angle)
    Sprite.Sprites = ConvertToType(handle)
    kulma = Int((Float(Sprite\Sprite_Rot)  / 360) * Float(angle))
    kuvahandle = PeekInt(Sprite\Sprite_Images, kulma * 4)
    DrawImage kuvahandle, x, y, frame 
EndFunction 




//Tässä funktiossa oli jotain vikaa muistaakseni.
Function DrawSpriteBetween(handle, x, y, x2, y2, style, frame=0)
    angle = GetAngle(x, y, x2, y2)
    Sprite.Sprites = ConvertToType(handle)
    kulma = Int((Float(Sprite\Sprite_Rot)  / 360) * Float(angle))
    kuvahandle = PeekInt(Sprite\Sprite_Images, kulma * 4)
    If style <> 1 Then 
        dpoint = Sqrt((x2 - x)^2 + (y2 - y)^2)
        DrawImage kuvahandle, x + Cos(angle) * dpoint/2, y - Sin(angle) * dpoint/2, frame 
    Else 
        dpoint = ImageWidth(GetSpriteImg(kuvahandle, angle))
        DrawImage kuvahandle, x + Cos(angle) * dpoint/2, y - Sin(angle) * dpoint/2, frame
    EndIf 
EndFunction 


Function GetSpriteImg(handle,angle#)
    angle = WrapAngle(angle)
    Sprite.Sprites = ConvertToType(handle)
    angle = Int((Float(Sprite\Sprite_Rot)  / 360) * Float(angle))
    kuvahandle = PeekInt(Sprite\Sprite_Images, Int(angle) * 4)
    Return kuvahandle
EndFunction 


Function GetSpriteWidth(sprite_)
    Sprite.Sprites = ConvertToType(sprite_)
    Return Sprite\Sprite_Width
EndFunction 

Function GetSpriteHeight(sprite_)
    Sprite.Sprites = ConvertToType(sprite_)
    Return Sprite\Sprite_Height
EndFunction 

Function DeleteSprite(sprite_)
    Sprite.Sprites = ConvertToType(sprite_)
    DeleteMEMBlock Sprite\Sprite_Images
    Delete Sprite
EndFunction

Re: RotatedText - pyöriteltävä teksti

Posted: Fri Jul 01, 2011 2:49 pm
by Timblex
Ei toimi!
ReturnSprite() funktio?

Re: RotatedText - pyöriteltävä teksti

Posted: Fri Jul 01, 2011 4:49 pm
by valscion
timpe99 wrote:Ei toimi!
ReturnSprite() funktio?
CreateSprite()-funktio palauttaa sen spriten tyyppikokoelman osoitteen, jota käytät sitten muissa funktioissa. Piirrät spriten sitten DrawSprite-funktiolla. Mitä siinä on hankalaa?

Re: RotatedText - pyöriteltävä teksti

Posted: Mon Jul 04, 2011 6:31 am
by MaGetzUb
Tuota, sieltä olin vahingossa vaihtanut ReturnSprite():n -> GetSpriteImg():si. :D Nyt toimii kun kopsaat koodin tuolta ylemmästä viestistä. :)