RotatedText - pyöriteltävä teksti

Oletko tehnyt jotain, mistä muut voisivat hyötyä. Postita vinkit tänne.
Post Reply
User avatar
Execute
Active Member
Posts: 110
Joined: Fri Feb 11, 2011 7:41 pm

RotatedText - pyöriteltävä teksti

Post by Execute » Wed Jun 29, 2011 5:59 pm

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.
Last edited by Execute on Wed Jun 29, 2011 9:46 pm, edited 1 time in total.
SpaceCraft on kokopitkä peli! Nyt ladattavissa! Tsekkaa!

User avatar
Viltzu
Guru
Posts: 1132
Joined: Sun Aug 26, 2007 5:45 pm
Location: Alavieska
Contact:

Re: RotatedText - pyöriteltävä teksti

Post by Viltzu » Wed Jun 29, 2011 7:52 pm

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.

User avatar
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: RotatedText - pyöriteltävä teksti

Post by MaGetzUb » Wed Jun 29, 2011 8:48 pm

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ö. :)
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.

User avatar
Execute
Active Member
Posts: 110
Joined: Fri Feb 11, 2011 7:41 pm

RotatedText - pyöriteltävä teksti

Post by Execute » Wed Jun 29, 2011 9:48 pm

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ä.
SpaceCraft on kokopitkä peli! Nyt ladattavissa! Tsekkaa!

User avatar
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: RotatedText - pyöriteltävä teksti

Post by MaGetzUb » Thu Jun 30, 2011 8:28 am

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. :/
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.

Dimple
Active Member
Posts: 103
Joined: Wed Nov 17, 2010 6:43 pm

Re: RotatedText - pyöriteltävä teksti

Post by Dimple » Thu Jun 30, 2011 10:04 am

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).

User avatar
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: RotatedText - pyöriteltävä teksti

Post by MaGetzUb » Thu Jun 30, 2011 3:09 pm

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
Last edited by MaGetzUb on Mon Jul 04, 2011 6:30 am, edited 1 time in total.
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.

User avatar
Timblex
Advanced Member
Posts: 252
Joined: Sun Apr 11, 2010 10:37 am
Location: Kouvola

Re: RotatedText - pyöriteltävä teksti

Post by Timblex » Fri Jul 01, 2011 2:49 pm

Ei toimi!
ReturnSprite() funktio?
Entinen timpe99...
Demokisa 2013 demo valmis, Check it out!

User avatar
valscion
Moderator
Moderator
Posts: 1587
Joined: Thu Dec 06, 2007 8:46 pm
Location: Espoo
Contact:

Re: RotatedText - pyöriteltävä teksti

Post by valscion » Fri Jul 01, 2011 4:49 pm

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?
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com

User avatar
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: RotatedText - pyöriteltävä teksti

Post by MaGetzUb » Mon Jul 04, 2011 6:31 am

Tuota, sieltä olin vahingossa vaihtanut ReturnSprite():n -> GetSpriteImg():si. :D Nyt toimii kun kopsaat koodin tuolta ylemmästä viestistä. :)
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.

Post Reply