Lagi
Re: Lagi
En suoraan löytänyt virhettä, mikä olisi aiheuttanut hidastumista. Koodia oli kuitenkin aika hankala lukea hyvin erikoisen ja epäsäännöllisen sisennyksen takia ja viholliset olisi ehdottomasti kannattanut toteuttaa tyyppien avulla. FrameLimit oli niin suuri, että sillä ei ole mitään merkitystä. DrawGamea on vähän turhankin monessa paikassa ja oudoissa paikoissa. Järjestys kuuluisi olla UpdateGame, DrawGame, DrawScreen. Jos aikaisempaa ei ole suoritettu sitten viime DrawScreenin niin jälkimmäinen suorittaa sen.
Re: Lagi
Se toimi aivan normaalisti vielä tänään, en tiedä minkä lisäyksen tein koodiin ja alkoi lagittamaan
En ole käsittänyt tyyppejä, vaikka olen lukenut hyvin monta opetusta, selityksiä yms.. Se harmittaa minua. Niitä en ole oppinut.Latexi95 wrote:En suoraan löytänyt virhettä, mikä olisi aiheuttanut hidastumista. Koodia oli kuitenkin aika hankala lukea hyvin erikoisen ja epäsäännöllisen sisennyksen takia ja viholliset olisi ehdottomasti kannattanut toteuttaa tyyppien avulla. FrameLimit oli niin suuri, että sillä ei ole mitään merkitystä. DrawGamea on vähän turhankin monessa paikassa ja oudoissa paikoissa. Järjestys kuuluisi olla UpdateGame, DrawGame, DrawScreen. Jos aikaisempaa ei ole suoritettu sitten viime DrawScreenin niin jälkimmäinen suorittaa sen.
¤ Art
Re: Lagi
Tyypit on aluksi todella vaikeita, itselläkin meni todella kauan, ennen ko tajusin niiden idean, mutta sitten ko ne oppii, niin niistä on todella paljon hyötyäArt wrote:En ole käsittänyt tyyppejä, vaikka olen lukenut hyvin monta opetusta, selityksiä yms.. Se harmittaa minua. Niitä en ole oppinut.
Kirjoitin pienen esimerkin, jos sen toiminta auttaisi yhtään selkiyttämään asiaa. Asiavirheitä saattaa löytyä, joten kokeneemmat minua korjatkoon
Code: Select all
guy_obj = LoadObject("media/guy.bmp",72) // Ladataan objekti.
ShowObject guy_obj, OFF // Piilotetaan objekti.
Type PLAYER // Luodaan kokoelma nimeltään 'PLAYER'.
Field obj // Ja kokoelmaan muuttuja 'obj', johon tallennetaan myöhemmin luotavan jäsenen objekti.
Field healt // Ja toinen muuttuja 'healt', johon tallenetaan energiat.
EndType
create_new_player: // Kirjanmerkki, tänne hypätään myöhemmin.
guy.PLAYER = New(PLAYER) // Tässä luodaan uusi JÄSEN, johon päästään käsiksi 'guy'-muuttujan kautta.
guy\obj = CloneObject(guy_obj) // Tässä tallenetaan vastaluodun jäsenen 'obj'-muuttujaan alussa ladatun 'guy_obj'-objektin kopio.
guy\healt = Rand(500,1000) // Ja täällä vielä asetetaan jäsenen 'healt'-muuttujaan arvo väliltä 500-1000 satunnaisesti arpoen.
Repeat // Aloitetaan pääsilmukka.
// Seuraavaksi hoidetaan objektin liikuttaminen, eli ihan perusasioita.
// Huomion arvoinen seikka on kuitenkin, että emme liikuta ladattua 'guy_obj'-objektia, vaan nimenomaan jäsenmuuttujaan tallennettua kopiota.
If KeyDown(200) Then MoveObject guy\obj, 1
If KeyDown(208) Then MoveObject guy\obj,-1
If KeyDown(203) Then TurnObject guy\obj, 1
If KeyDown(205) Then TurnObject guy\obj,-1
// Näytetään energian määrä yläkulmassa.
Text 0,0,"Healt: "+guy\healt
Box 50,50,300,200,0 // Piirretään tavallinen laatikko, tähän ei siis liity mitään ihmeellistä.
// Tässä tehdään tarkistus, onko 'guy\obj'-objekti määrättyjen rajojen ulkopuolella, ja jos on, niin vähennetään muuttujasta 'guy\healt' yksi, ja tämä tarkistus siis jokaisella silmukan pyörähdyksellä.
If ObjectX(guy\obj) < -150 Or ObjectX(guy\obj) > 150 Or ObjectY(guy\obj) < -100 Or ObjectY(guy\obj) > 100 Then guy\healt = guy\healt - 1
// Ja mikäli muuttujan 'guy\healt' arvo on 0 tai alle 0, niin poistetaan jäseneen sidottu media,
// eli 'guy\obj'-objekti (rivillä 38) ja sen jälkeen poistetaan itse jäsen (rivillä 39)
// ja hypätään ohjelmassa kohtaan 'create_new_player', jonka jälkeen siis luodaan taas uusi jäsen.
If guy\healt =< 0 Then
DeleteObject guy\obj
Delete guy
Goto create_new_player
EndIf
DrawScreen // Piirretään ruutu.
// Lopuksi poistutaan silmukasta, mikäli painetaan ESC-näppäintä.
// (CB tekee niin muutenkin, jos SAFEEXIT-toiminto on päällä, oletuksena on.)
Until KeyHit(1)
Re: Lagi
Kiitos, tuo auttoi minua tajuamaan jo hieman tyypeistä. Nyt vaan testailemaan niin opin sen varmaan muutamassa päivässä. :3MrMonday wrote:Tyypit on aluksi todella vaikeita, itselläkin meni todella kauan, ennen ko tajusin niiden idean, mutta sitten ko ne oppii, niin niistä on todella paljon hyötyäArt wrote:En ole käsittänyt tyyppejä, vaikka olen lukenut hyvin monta opetusta, selityksiä yms.. Se harmittaa minua. Niitä en ole oppinut.
Kirjoitin pienen esimerkin, jos sen toiminta auttaisi yhtään selkiyttämään asiaa. Asiavirheitä saattaa löytyä, joten kokeneemmat minua korjatkoon
Code: Select all
guy_obj = LoadObject("media/guy.bmp",72) // Ladataan objekti. ShowObject guy_obj, OFF // Piilotetaan objekti. Type PLAYER // Luodaan kokoelma nimeltään 'PLAYER'. Field obj // Ja kokoelmaan muuttuja 'obj', johon tallennetaan myöhemmin luotavan jäsenen objekti. Field healt // Ja toinen muuttuja 'healt', johon tallenetaan energiat. EndType create_new_player: // Kirjanmerkki, tänne hypätään myöhemmin. guy.PLAYER = New(PLAYER) // Tässä luodaan uusi JÄSEN, johon päästään käsiksi 'guy'-muuttujan kautta. guy\obj = CloneObject(guy_obj) // Tässä tallenetaan vastaluodun jäsenen 'obj'-muuttujaan alussa ladatun 'guy_obj'-objektin kopio. guy\healt = Rand(500,1000) // Ja täällä vielä asetetaan jäsenen 'healt'-muuttujaan arvo väliltä 500-1000 satunnaisesti arpoen. Repeat // Aloitetaan pääsilmukka. // Seuraavaksi hoidetaan objektin liikuttaminen, eli ihan perusasioita. // Huomion arvoinen seikka on kuitenkin, että emme liikuta ladattua 'guy_obj'-objektia, vaan nimenomaan jäsenmuuttujaan tallennettua kopiota. If KeyDown(200) Then MoveObject guy\obj, 1 If KeyDown(208) Then MoveObject guy\obj,-1 If KeyDown(203) Then TurnObject guy\obj, 1 If KeyDown(205) Then TurnObject guy\obj,-1 // Näytetään energian määrä yläkulmassa. Text 0,0,"Healt: "+guy\healt Box 50,50,300,200,0 // Piirretään tavallinen laatikko, tähän ei siis liity mitään ihmeellistä. // Tässä tehdään tarkistus, onko 'guy\obj'-objekti määrättyjen rajojen ulkopuolella, ja jos on, niin vähennetään muuttujasta 'guy\healt' yksi, ja tämä tarkistus siis jokaisella silmukan pyörähdyksellä. If ObjectX(guy\obj) < -150 Or ObjectX(guy\obj) > 150 Or ObjectY(guy\obj) < -100 Or ObjectY(guy\obj) > 100 Then guy\healt = guy\healt - 1 // Ja mikäli muuttujan 'guy\healt' arvo on 0 tai alle 0, niin poistetaan jäseneen sidottu media, // eli 'guy\obj'-objekti (rivillä 38) ja sen jälkeen poistetaan itse jäsen (rivillä 39) // ja hypätään ohjelmassa kohtaan 'create_new_player', jonka jälkeen siis luodaan taas uusi jäsen. If guy\healt =< 0 Then DeleteObject guy\obj Delete guy Goto create_new_player EndIf DrawScreen // Piirretään ruutu. // Lopuksi poistutaan silmukasta, mikäli painetaan ESC-näppäintä. // (CB tekee niin muutenkin, jos SAFEEXIT-toiminto on päällä, oletuksena on.) Until KeyHit(1)
Edit:Tajusinkin jo koko homman. Kiitos !! En tiedä miten voin sinua kylliksi kiittää
Edit: Ongelma ratkaistu ! Ottakaa alusta framelimit ja screen pois ja pastetkaa "SCREEN 1260,960" toi siihen..
Edit: Kokeilkaahan nyt, peli ei lagita yhtään ja muutan kaikki typellä huomenna, nyt muutin vain viholliset
Last edited by Art on Thu Nov 29, 2012 11:19 am, edited 1 time in total.
¤ Art
Re: Lagi
Selostukset ja koodi oli hyvää, myös vain yhden objektin kloonaaminen ja type hommeli selkeytti asiaa. Nyt aijon toteuttaa todella paljon typeä, koska ennen en ollut sitä tajunnut.MrMonday wrote:Hieno kuulla että saatoin olla avuksi Mahdollisesti muutkin hyötyvät tuosta esimerkistä, vaikka voisin sitä kyllä vielä hieman parannella, eli selkeyttää
Voi laittaa lukkoon. (mikäli näillä foorumeilla se on tapana :/ )
¤ Art
Re: Lagi
Seuraavaksi kannattaa tutustua ezben kirjoittamaan type-tutoriaaliin, kunhan ensin sisäistät typet kunnolla, se on todella pätevä opastus Ja ideahan typeissä on, että saat vaikka sata vihollista tehtyä todella vähällä koodilla:Art wrote:Selostukset ja koodi oli hyvää, myös vain yhden objektin kloonaaminen ja type hommeli selkeytti asiaa. Nyt aijon toteuttaa todella paljon typeä, koska ennen en ollut sitä tajunnut.MrMonday wrote:Hieno kuulla että saatoin olla avuksi Mahdollisesti muutkin hyötyvät tuosta esimerkistä, vaikka voisin sitä kyllä vielä hieman parannella, eli selkeyttää
Voi laittaa lukkoon. (mikäli näillä foorumeilla se on tapana :/ )
Code: Select all
For i = 0 To 99
// Luo uusi jäsen tässä.
Next i
EDIT:
Ja silti jokaisella jäsenellä on omat muuttujat, vaikka ne saman nimisiä onkin Kokeile vaikka For-silmukassa luodessasi asettaa guy\healt = i
Re: Lagi
Mistähän tähän tutoriaaliin pääsee ?MrMonday wrote:Seuraavaksi kannattaa tutustua ezben kirjoittamaan type-tutoriaaliin, kunhan ensin sisäistät typet kunnolla, se on todella pätevä opastus Ja ideahan typeissä on, että saat vaikka sata vihollista tehtyä todella vähällä koodilla:Art wrote:Selostukset ja koodi oli hyvää, myös vain yhden objektin kloonaaminen ja type hommeli selkeytti asiaa. Nyt aijon toteuttaa todella paljon typeä, koska ennen en ollut sitä tajunnut.MrMonday wrote:Hieno kuulla että saatoin olla avuksi Mahdollisesti muutkin hyötyvät tuosta esimerkistä, vaikka voisin sitä kyllä vielä hieman parannella, eli selkeyttää
Voi laittaa lukkoon. (mikäli näillä foorumeilla se on tapana :/ )
Code: Select all
For i = 0 To 99 // Luo uusi jäsen tässä. Next i
EDIT:Ja silti jokaisella jäsenellä on omat muuttujat, vaikka ne saman nimisiä onkin Kokeile vaikka For-silmukassa luodessasi asettaa guy\healt = i
¤ Art
Re: Lagi
Ezben tyyppitutoriaali löytyy "Esimerkit ja tutorialit" alueen yläreunaan liimattuna: viewtopic.php?f=12&t=1618