Tyhmät kysymykset (I/2009)
Re: Tyhmät kysymykset
Goto-komentoa ei voi käyttää muuttujien kanssa. Laita Goto y$:n tilalle pelkkä Goto net niin pitäisi toimia.
Peli piirtokomennoilla - voittaja, Virtuaalilemmikkipeli - voittaja,
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)
Re: Tyhmät kysymykset
Eipä tahdo toimia vieläkään. Kun painan enteriä, mitään ei tapahdu.Harakka wrote:Goto-komentoa ei voi käyttää muuttujien kanssa. Laita Goto y$:n tilalle pelkkä Goto net niin pitäisi toimia.
-
- Advanced Member
- Posts: 485
- Joined: Tue Aug 28, 2007 3:53 pm
- Location: Suomi, Finland
- Contact:
Re: Tyhmät kysymykset
kuinka saisin laskettua rgb arvot GetPixel komennosta? en keksiny...
-
- Active Member
- Posts: 163
- Joined: Fri Aug 31, 2007 7:07 pm
- Location: Helsinki
- Contact:
Re: Tyhmät kysymykset
Aseta se piirtoväriksi Color 0,0,-GetPixelArvo ja käytä getRGB():tätuhoojabotti wrote:kuinka saisin laskettua rgb arvot GetPixel komennosta? en keksiny...
Re: Tyhmät kysymykset
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
Peli piirtokomennoilla - voittaja, Virtuaalilemmikkipeli - voittaja,
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)
Re: Tyhmät kysymykset
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.
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.
-
- Active Member
- Posts: 163
- Joined: Fri Aug 31, 2007 7:07 pm
- Location: Helsinki
- Contact:
Re: Tyhmät kysymykset
Vaikea sanoa, kun ei tiedä miten oot hommat toteuttanu, mutta onko paljon pikselikomentoja? Ne hidastaa. Entäs paljon sisäkkäisiä luuppeja?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.
Re: Tyhmät kysymykset
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
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
- wilizucoder
- Member
- Posts: 81
- Joined: Sat Sep 08, 2007 11:24 pm
- Location: Espoo
- Contact:
Re: Tyhmät kysymykset
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
Ongelma on tässä: (tosin niitä saattaa olla useampiakin)
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)
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
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)
Last edited by Jonez on Thu May 15, 2008 12:35 pm, edited 1 time in total.
- wilizucoder
- Member
- Posts: 81
- Joined: Sat Sep 08, 2007 11:24 pm
- Location: Espoo
- Contact:
Re: Tyhmät kysymykset
Joo, kiitos paljon, oon vasta alottanu koodamisen ja yritän harjoitella tuota tyyppien käyttöä.
-
- Member
- Posts: 75
- Joined: Tue Aug 28, 2007 6:59 am
Re: Tyhmät kysymykset
kuinka piirtää kuvaan toinen kuva nopeasti läpinäkyvyydellä??
-
- Moderator
- Posts: 227
- Joined: Wed Aug 29, 2007 3:55 pm
Re: Tyhmät kysymykset
DrawToImagella ja DrawGhostImagella... Mikäli oikein muistan.
-
- Member
- Posts: 75
- Joined: Tue Aug 28, 2007 6:59 am
Re: Tyhmät kysymykset
itselläni tuo ghostimage ei ole toiminut
-
- Forum Veteran
- Posts: 2396
- Joined: Tue Aug 28, 2007 4:20 pm
Re: Tyhmät kysymykset
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 :Dcheeshelmet.jr wrote:itselläni tuo ghostimage ei ole toiminut
Re: Tyhmät kysymykset
CBSDK:ssa on tätä varten jo valmiiksi funktio BlendImages(). Kannattaa kurkata.
Peli piirtokomennoilla - voittaja, Virtuaalilemmikkipeli - voittaja,
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)
Re: Tyhmät kysymykset
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.
CoolBasic henkilökuntaa
Graafikko
Graafikko
-
- Member
- Posts: 75
- Joined: Tue Aug 28, 2007 6:59 am
Re: Tyhmät kysymykset
jaa jaa no kiitoksia tästä
Re: Tyhmät kysymykset
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
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:
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