Page 43 of 154

Re: Tyhmät kysymykset

Posted: Wed May 07, 2008 7:23 am
by Harakka
Goto-komentoa ei voi käyttää muuttujien kanssa. Laita Goto y$:n tilalle pelkkä Goto net niin pitäisi toimia.

Re: Tyhmät kysymykset

Posted: Wed May 07, 2008 3:44 pm
by Sepez
Harakka wrote:Goto-komentoa ei voi käyttää muuttujien kanssa. Laita Goto y$:n tilalle pelkkä Goto net niin pitäisi toimia.
Eipä tahdo toimia vieläkään. Kun painan enteriä, mitään ei tapahdu.

Re: Tyhmät kysymykset

Posted: Wed May 07, 2008 4:11 pm
by tuhoojabotti
kuinka saisin laskettua rgb arvot GetPixel komennosta? en keksiny...

Re: Tyhmät kysymykset

Posted: Wed May 07, 2008 4:20 pm
by Aavesoturi
tuhoojabotti wrote:kuinka saisin laskettua rgb arvot GetPixel komennosta? en keksiny...
Aseta se piirtoväriksi Color 0,0,-GetPixelArvo ja käytä getRGB():tä

Re: Tyhmät kysymykset

Posted: Wed May 07, 2008 8:34 pm
by Harakka
Tämä saattaa olla nopeampi (käyttää getpixel2():sta projektissa, josta sen kopioin, mutta toiminee myös getpixel():illä).

Code: Select all

R = RoundDown(pix Shr 16)
gb = pix - R Shl 16
G = RoundDown(gb Shr 8)
B = gb - G Shl 8

Re: Tyhmät kysymykset

Posted: Sat May 10, 2008 1:19 pm
by KoviZZ
Mitä tehdä kun peli muuttuu liian raskaaksi? Eli fps laskee väkisin jonnekkin 20 paikkeille ja se pitäisi saada pysymään ainakin n. 35:ssä.
Pelissäni tällä hetkellä parikymmentä vihulaista ampuu toisiaan ja kun joku tuhoutuu niin soitetaan räjähdysefektiä ja kaikki tämä laskee fps:n n. 20:n.
Vaikka koodi onkin melko purkkaista niin ei kai senkään pitäisi aiheuttaa noin suurta fps:n putoamista näin vähillä objecteilla.
Olisiko siis mitään neuvoja tehdä pelistä vähemmän raskasta.

Re: Tyhmät kysymykset

Posted: Sat May 10, 2008 1:35 pm
by Aavesoturi
KoviZZ wrote:Mitä tehdä kun peli muuttuu liian raskaaksi? Eli fps laskee väkisin jonnekkin 20 paikkeille ja se pitäisi saada pysymään ainakin n. 35:ssä.
Pelissäni tällä hetkellä parikymmentä vihulaista ampuu toisiaan ja kun joku tuhoutuu niin soitetaan räjähdysefektiä ja kaikki tämä laskee fps:n n. 20:n.
Vaikka koodi onkin melko purkkaista niin ei kai senkään pitäisi aiheuttaa noin suurta fps:n putoamista näin vähillä objecteilla.
Olisiko siis mitään neuvoja tehdä pelistä vähemmän raskasta.
Vaikea sanoa, kun ei tiedä miten oot hommat toteuttanu, mutta onko paljon pikselikomentoja? Ne hidastaa. Entäs paljon sisäkkäisiä luuppeja?

Re: Tyhmät kysymykset

Posted: Sat May 10, 2008 1:35 pm
by Jonez
No en tässä rupea mitään romaania kirjoittamaan, mutta ratkaisu on yksinkertaisesti: optimointi.

Ohjemoidessa voi lähes kaikki asiat tehdä monella tapaa. Jotkut ovat parempia, jotkut huonompia, kaikkia ei voi verrata koska kokonaisuus ratkaisee. Yritä kuitenkin laskea silmukoiden määrää mahdollisimman paljon. Se on aika yleinen alottelijoiden virhe, että jotain tiettyä silmukkaa käytetään monta kertaa yhden framen aikana. Lähes aina riittää vain yksi silmukka esim. kaikille ammuksille tai ukkeleille.

Toinen optimointitapa on ottaa hieman raskaammat laskutoimitukset tai funktiokutsut ylös muuttujiin, jos niitä käytetään monta kertaa ja tiedetään ettei niiden arvo muutu.

Sellaista. Muitakin on, ohjelmointi on päättelyä. Päättele itse :)

Re: Tyhmät kysymykset

Posted: Tue May 13, 2008 11:29 pm
by wilizucoder
Mul ois tällanen ongelma, et kun muutaman kerran ammus osuu vihuun, niin tulee MAV. Mistä johtuu?

Code: Select all

Type AMMUS
Field id
Field obj
End Type

Type VIHUT2
Field obj2 
End Type 

FrameLimit 60
SCREEN 800,600,16,cbzisable

tausta=MakeObjectFloor()
kuva=LoadImage("media\grass.bmp")
PaintObject tausta,kuva

oma=LoadObject("media\guy.bmp")
ShowObject oma,OFF
master=CloneObject(oma)
PositionObject master,-300,0
 
vihulainen=LoadObject("media\soldier.bmp",2)
ShowObject vihulainen,OFF  
vihulainen2=LoadAnimObject("media\cow.bmp",2)
ShowObject vihulainen2,OFF   

pati=LoadObject("media\bullet.bmp")
ShowObject pati,OFF  

elkku=100
vihukuoli=0 
pisteet=0
  
taustanopeus#=6 

ASE=0

Gosub kontrollit
Gosub aseet
Gosub vihuäly
Gosub törmäykset  
Gosub tekstit
 
Repeat 



kontrollit:

vauhti#=0
If UpKey() Then 
    vauhti=5
    MoveObject master,0,-vauhti
EndIf 
If DownKey() Then
    vauhti=5
    MoveObject master,0,vauhti
EndIf
If LeftKey() Then 
    vauhti=5
    MoveObject master,-vauhti,0
EndIf
If RightKey() Then
    vauhti=5
    MoveObject master,vauhti,0
EndIf
If KeyDown(17) Then
    vauhti=10
    MoveObject master,vauhti,0
ElseIf KeyDown(157) And RightKey() Then 
    vauhti=5
    MoveObject master,vauhti,0
Else 
    vauhti=0
    MoveObject master,vauhti,vauhti
EndIf 
 
If ObjectX(master)<-400 Then PositionObject master,-400,ObjectY(master)
If ObjectX(master)>400 Then PositionObject master,400,ObjectY(master)
If ObjectY(master)<-300 Then PositionObject master,ObjectX(master),-300
If ObjectY(master)>300 Then PositionObject master,ObjectX(master),300

Return



aseet:

If KeyHit(16) And ASE=0 Then 
    ASE=1
ElseIf KeyHit(16) And ASE=1 Then 
    ASE=2
ElseIf KeyHit(16) And ASE=2 Then 
    ASE=0
EndIf 

If KeyDown(cbkeyspace) And reload=0 Then 
    Select ASE
        Case 0
            luoti.AMMUS=New(AMMUS)
            luoti\id=0
            luoti\obj=CloneObject(pati)
            CloneObjectPosition luoti\obj,master 
            MoveObject luoti\obj,13,0
            TurnObject luoti\obj,Rand(1,-1)
            reload=10
        Case 1
            luoti.AMMUS=New(AMMUS)
            luoti\id=1
            luoti\obj=CloneObject(pati)
            CloneObjectPosition luoti\obj,master 
            MoveObject luoti\obj,10,-19
            TurnObject luoti\obj,Rand(1,-1)
            luoti.AMMUS=New(AMMUS)
            luoti\id=1
            luoti\obj=CloneObject(pati)
            CloneObjectPosition luoti\obj,master 
            MoveObject luoti\obj,10,19
            TurnObject luoti\obj,Rand(1,-1)
            reload=6
        Case 2
            luoti.AMMUS=New(AMMUS)
            luoti\id=2
            luoti\obj=CloneObject(pati)
            CloneObjectPosition luoti\obj,master 
            MoveObject luoti\obj,10,-19
            TurnObject luoti\obj,8
            luoti.AMMUS=New(AMMUS)
            luoti\id=2
            luoti\obj=CloneObject(pati)
            CloneObjectPosition luoti\obj,master 
            MoveObject luoti\obj,10,19
            TurnObject luoti\obj,-8
            luoti.AMMUS=New(AMMUS)
            luoti\id=2
            luoti\obj=CloneObject(pati)
            CloneObjectPosition luoti\obj,master 
            MoveObject luoti\obj,13,0
            TurnObject luoti\obj,Rand(1,-1)
            reload=8
        EndSelect
    EndIf 

If reload>0 Then reload=reload-1

For luoti.AMMUS=Each AMMUS
    Select luoti\id
        Case 0
            MoveObject luoti\obj,15
            If Distance2(luoti\obj,master)>700 Then            
                DeleteObject luoti\obj 
                Delete luoti
            EndIf
        Case 1
            MoveObject luoti\obj,18
            If Distance2(luoti\obj,master)>700 Then            
                DeleteObject luoti\obj 
                Delete luoti
            EndIf
        Case 2
            MoveObject luoti\obj,18
            If Distance2(luoti\obj,master)>700 Then            
                DeleteObject luoti\obj 
                Delete luoti
            EndIf
        EndSelect
Next luoti

Return 



vihuäly:

MoveObject tausta,taustanopeus 

If Timer()>aika2+7000 Then  
    vihu2.VIHUT2 = New(VIHUT2)
    vihu2\obj2 = CloneObject(vihulainen2)
    RotateObject vihu2\obj2,180
    RotateObject vihu2\obj2,180
    PositionObject vihu2\obj2,500,100
    vihu2.VIHUT2 = New(VIHUT2)
    vihu2\obj2 = CloneObject(vihulainen2)
    RotateObject vihu2\obj2,180
    PositionObject vihu2\obj2,500,-100 
    aika2=Timer()
EndIf 
              
For vihu2.VIHUT2 = Each VIHUT2
        nopeus3#=Rand(0.5,1.0)
        MoveObject vihu2\obj2,nopeus3
        PaintObject vihu2\obj2,vihulainen2
        PlayObject vihu2\obj2,0,2,0.5
        If Distance2(vihu2\obj2,master)<200 Then 
            PointObject vihu2\obj2,master 
        Else 
            RotateObject vihu2\obj2,180
            MoveObject vihu2\obj2,nopeus3
        EndIf 
        If ObjectX(vihu2\obj2)<-500 Then 
            DeleteObject vihu2\obj2
            Delete vihu2
        EndIf 
Next vihu2

Return 



törmäykset:

For luoti.AMMUS=Each AMMUS
  For vihu2.VIHUT2=Each VIHUT2
        If ObjectsOverlap(luoti\obj,vihu2\obj2) Then
            vihukuoli+1
            DeleteObject luoti\obj
            Delete luoti
            DeleteObject vihu2\obj2
            Delete vihu2
        EndIf 
  Next vihu2
Next luoti

Return 



tekstit:

DrawGame 
Color cbyellow
Text 10,5,"FPS: "+FPS()
Text 10,25,"Energia: "+elkku
Text 10,45,"Tapot: "+vihukuoli
Text 10,65,"Pisteet: "+pisteet

Return 



DrawScreen 
Until KeyHit(1) 

Re: Tyhmät kysymykset

Posted: Wed May 14, 2008 7:11 am
by Jonez
Ongelma on tässä: (tosin niitä saattaa olla useampiakin)

Code: Select all

törmäykset:

For luoti.AMMUS=Each AMMUS
  For vihu2.VIHUT2=Each VIHUT2
        If ObjectsOverlap(luoti\obj,vihu2\obj2) Then
            vihukuoli+1
            DeleteObject luoti\obj
            Delete luoti
            DeleteObject vihu2\obj2
            Delete vihu2
        EndIf
  Next vihu2
Next luoti

Return
Tuhoat siis luodin (jos vihuun osuu), mutta silti teet törmäyksentarkistuksen seuraavan vihun kanssa samalla luodilla jota ei ole olemassakaan. Seuraa mav.

Ei todellakaan kannata tehdä niinkuin olet tehnyt, eli käydä ammuksia ja ukkeleita erikseen läpi vain liikuttaaksesi niitä ja tehdäksesi törmyäksentarkistuksia. Loppupeleissä peli hidastuu liikaa. Kannattaa tehdä kaikki yhdessä silmukassa. (Eli ammuksille yksi silmukka, ukoille yksi silmukka jne)

Re: Tyhmät kysymykset

Posted: Wed May 14, 2008 9:18 am
by wilizucoder
Joo, kiitos paljon, oon vasta alottanu koodamisen ja yritän harjoitella tuota tyyppien käyttöä.

Re: Tyhmät kysymykset

Posted: Fri May 16, 2008 2:22 pm
by cheeshelmet.jr
kuinka piirtää kuvaan toinen kuva nopeasti läpinäkyvyydellä??

Re: Tyhmät kysymykset

Posted: Fri May 16, 2008 4:55 pm
by atomimalli
DrawToImagella ja DrawGhostImagella... Mikäli oikein muistan.

Re: Tyhmät kysymykset

Posted: Fri May 16, 2008 5:33 pm
by cheeshelmet.jr
itselläni tuo ghostimage ei ole toiminut

Re: Tyhmät kysymykset

Posted: Fri May 16, 2008 6:20 pm
by Koodiapina
cheeshelmet.jr wrote:itselläni tuo ghostimage ei ole toiminut
Kokeile kuvapiste komentoja. Eli luet vain kuvan pikseleiden värit ja sitten piirrät haluamiisi paikkoihin samat pikselit hieman erivärisenä. Eli voit esimerkiksi laskea miltä pikseli näyttäisi kun siihen sekoitetaan tietyn kuvan kohtaa tietyn kuvan kohtaan. Liiasta nopeudesta ei kannata edes haaveilla :D

Re: Tyhmät kysymykset

Posted: Fri May 16, 2008 7:24 pm
by Harakka
CBSDK:ssa on tätä varten jo valmiiksi funktio BlendImages(). Kannattaa kurkata.

Re: Tyhmät kysymykset

Posted: Fri May 16, 2008 9:05 pm
by Pate5
DrawGhostImage toimii, mutta siinä on pieni bugi, nimittäin se ei suostu piirtämään kuvaa koordinaatteihin 0,0. Kokeile laittaa 1,1, niin pitäisi toimia.

Re: Tyhmät kysymykset

Posted: Fri May 16, 2008 10:08 pm
by cheeshelmet.jr
jaa jaa no kiitoksia tästä :D

Re: Tyhmät kysymykset

Posted: Sun May 18, 2008 7:49 pm
by AmatôôrOfCodinG
Erittäin tyhmä kysymys : Unohdin miten saan Curveanglella tehtyy pehmeän kääntymisen vihuille.Muistan kyllä täällä nähneeni esimerkin siitä,mutta en löytänyt enää :?

Re: Tyhmät kysymykset

Posted: Sun May 18, 2008 8:12 pm
by Jonez
No CurveAnglen käyttötapahan löytyy manuaalista. Voit hiukan miettiä että miten sitä voi soveltaa ukon kääntymiseen.
Tein kuitenkin esimerkin jossa näytetään täsmälleen miten se tehdään:

Code: Select all

ukko = LoadObject( "media\guy.bmp", 72 )
pyöreys = 10

Repeat

    kulma# = GetAngle( ObjectX( ukko ), -ObjectY( ukko ), MouseWX(), -MouseWY() )
    RotateObject ukko, CurveAngle( kulma, ObjectAngle( ukko ), pyöreys )
    
    DrawScreen
Forever