Tyhmät kysymykset (I/2011)

Voit pyytää apua ohjelmointiongelmiin täältä.
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: Tyhmät kysymykset (I/2011)

Post by esa94 » Mon Dec 19, 2011 7:39 pm

If GetMap2(3, ObjectX(pelihahmo), ObjectY(pelihahmo)) = 1 Then pitäisi toimia

onkelma

Re: Tyhmät kysymykset (I/2011)

Post by onkelma » Mon Dec 19, 2011 7:45 pm

se nyt ei jostain syystä näyttäisi toimivan?

Art
Member
Posts: 53
Joined: Wed Dec 07, 2011 6:37 pm

Re: Tyhmät kysymykset (I/2011)

Post by Art » Mon Dec 19, 2011 7:51 pm

onkelma wrote:se nyt ei jostain syystä näyttäisi toimivan?
oletko tarkastanut kaikki muuttajat, ja mahd. virheet koodissa ?
¤ Art

onkelma

Re: Tyhmät kysymykset (I/2011)

Post by onkelma » Mon Dec 19, 2011 7:56 pm

Koodi oli lyhkänen joten laitoin tänne. Koottu esimerkin päälle. Ei kyllä tule mieleen mikä ois väärin :?

Code: Select all

Const PAINOVOIMA = -0.3 'painoviman voimakkuus
                        'pienempi->suurempi pv.
                        'positiiviset arvot->
                        'painovoima ylöspäin?!
yPlus#=0                'Tämä hallitsee hyppyä


SCREEN 800,600,0,cbwindowed
FrameLimit 40 
'-------------------------------------------------

kenttä=LoadMap("Map1.til","malli tileset.png")
PositionObject kenttä,0,50
MaskObject kenttä,cbmagenta
PlayObject kenttä,0,0,0.5


oikea=LoadAnimObject("pelihahmo.png",40,64,0,13)
MaskObject oikea,cbMagenta
ShowObject oikea,OFF
ObjectRange oikea,40,64 


vasen=LoadAnimObject("pelihahmo2.png",40,64,0,13)
MaskObject vasen,cbMagenta
ShowObject vasen,OFF
ObjectRange vasen,40,64 

pelihahmo=CloneObject(oikea)
SetupCollision pelihahmo,kenttä,1,4,2
ObjectRange pelihahmo,40,64 '


'-------------------------------------------------
'Pääsilmukka

Repeat

ClsColor cbsilver

    vauhti=0 'oletuksena ei liikettä

    If RightKey() Then 
        PaintObject pelihahmo,oikea .
        If maassa Then PlayObject pelihahmo,2,13,0.3
        vauhti=4 
    ElseIf LeftKey() Then
        PaintObject pelihahmo,vasen 
        If maassa Then PlayObject pelihahmo,2,13,0.25
        vauhti=-4 
    Else 
        PlayObject pelihahmo,0
    EndIf
    
    TranslateObject pelihahmo,vauhti,yPlus#
    yPlus=yPlus+PAINOVOIMA
    
    UpdateGame 
    CloneCameraPosition pelihahmo 
    
    maassa=0 
    törmäykset=CountCollisions(pelihahmo)

    For i=1 To törmäykset
        If GetCollision(pelihahmo,i)=kenttä
            If CollisionAngle(pelihahmo,i)=90 Then 
                yPlus#=-1
                maassa=1 
            EndIf
            If CollisionAngle(pelihahmo,i)=270 Then 
                yPlus#=-1
            EndIf
        EndIf
    Next i 
       
    If törmäykset=0 Then PlayObject pelihahmo,12,0
    
    If KeyDown(cbKeyZ) And maassa Then
        yPlus#=7.7
    EndIf 
    
    
    If GetMap2(3, ObjectX(pelihahmo), ObjectY(pelihahmo)) = 1  Then
     yPlus#=0.5
    EndIf 
    
    
    DrawScreen 

Until EscapeKey()

User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: Tyhmät kysymykset (I/2011)

Post by esa94 » Mon Dec 19, 2011 7:58 pm

No ensinnäkin nythän pelaaja liikkuu automaattisesti tikkailla jos sattuu niille päätymään...

Toinen ongelma saattaisi olla että objektin sijaintipiste on jossain aivan hevon kuusessa kun sen todennäköisesti pitäisi olla objektin keskellä ainakin tätä varten.
EDIT:

Jaha, GetMap lukee pikseleinä eikä GetMap2. Siinä se ongelma, poista kakkonen.

Last edited by esa94 on Mon Dec 19, 2011 7:59 pm, edited 1 time in total.

Art
Member
Posts: 53
Joined: Wed Dec 07, 2011 6:37 pm

Re: Tyhmät kysymykset (I/2011)

Post by Art » Mon Dec 19, 2011 7:59 pm

painovoima on vakio ja ei voi muuttua
¤ Art

onkelma

Re: Tyhmät kysymykset (I/2011)

Post by onkelma » Mon Dec 19, 2011 8:03 pm

Kiitoksia! :)

Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Tyhmät kysymykset (I/2011)

Post by Awaclus » Mon Dec 19, 2011 9:20 pm

Art wrote:painovoima on vakio ja ei voi muuttua
Senhän kuuluu ollakin.

EDIT: Onnea, pääsit juuri allekirjoitukseeni.
Last edited by Awaclus on Mon Dec 19, 2011 9:35 pm, edited 1 time in total.

User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: Tyhmät kysymykset (I/2011)

Post by esa94 » Mon Dec 19, 2011 9:26 pm

Art wrote:painovoima on vakio ja ei voi muuttua
Kiitos tästä fysiikan oppitunnista.

Art
Member
Posts: 53
Joined: Wed Dec 07, 2011 6:37 pm

Re: Tyhmät kysymykset (I/2011)

Post by Art » Mon Dec 19, 2011 11:49 pm

Code: Select all

Const PAINOVOIMA = -0.3 'painoviman voimakkuus
                        'pienempi->suurempi pv.
                        'positiiviset arvot->
                        'painovoima ylöspäin?!
yPlus#=0                'Tämä hallitsee hyppyä


SCREEN 800,600,0,cbwindowed
FrameLimit 40 
'-------------------------------------------------

kenttä=LoadMap("Map1.til","malli tileset.png")
PositionObject kenttä,0,50
MaskObject kenttä,cbmagenta
PlayObject kenttä,0,0,0.5


oikea=LoadAnimObject("pelihahmo.png",40,64,0,13)
MaskObject oikea,cbMagenta
ShowObject oikea,OFF
ObjectRange oikea,40,64 


vasen=LoadAnimObject("pelihahmo2.png",40,64,0,13)
MaskObject vasen,cbMagenta
ShowObject vasen,OFF
ObjectRange vasen,40,64 

pelihahmo=CloneObject(oikea)
SetupCollision pelihahmo,kenttä,1,4,2
ObjectRange pelihahmo,40,64 


'-------------------------------------------------
'Pääsilmukka

Repeat

ClsColor cbsilver

    vauhti=0 'oletuksena ei liikettä

    If RightKey() Then 
        PaintObject pelihahmo,oikea 
        If maassa Then PlayObject pelihahmo,2,13,0.3
        vauhti=4 
    ElseIf LeftKey() Then
        PaintObject pelihahmo,vasen 
        If maassa Then PlayObject pelihahmo,2,13,0.25
        vauhti=-4 
    Else 
        PlayObject pelihahmo,0
    EndIf
    
    TranslateObject pelihahmo,vauhti,yPlus#
    yPlus=yPlus+PAINOVOIMA
    
    UpdateGame 
    CloneCameraPosition pelihahmo 
    
    maassa=0 
    törmäykset=CountCollisions(pelihahmo)

    For i=1 To törmäykset
        If GetCollision(pelihahmo,i)=kenttä
            If CollisionAngle(pelihahmo,i)=90 Then 
                yPlus#=-1
                maassa=1 
            EndIf
            If CollisionAngle(pelihahmo,i)=270 Then 
                yPlus#=-1
            EndIf
        EndIf
    Next i 
       
    If törmäykset=0 Then PlayObject pelihahmo,12,0
    
    If KeyDown(cbKeyZ) And maassa Then
        yPlus#=7.7
    EndIf 

Poistin 2 pistettä väärästä kohtaa ja itselläni ainakin toimii, niin kauvan kunnes ei voi ladata karttaa jota ei mulla luonnollisesti ole..
¤ Art

Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Tyhmät kysymykset (I/2011)

Post by Awaclus » Tue Dec 20, 2011 12:08 am

Art wrote:

Code: Select all

Const PAINOVOIMA = -0.3 'painoviman voimakkuus
                        'pienempi->suurempi pv.
                        'positiiviset arvot->
                        'painovoima ylöspäin?!
yPlus#=0                'Tämä hallitsee hyppyä


SCREEN 800,600,0,cbwindowed
FrameLimit 40 
'-------------------------------------------------

kenttä=LoadMap("Map1.til","malli tileset.png")
PositionObject kenttä,0,50
MaskObject kenttä,cbmagenta
PlayObject kenttä,0,0,0.5


oikea=LoadAnimObject("pelihahmo.png",40,64,0,13)
MaskObject oikea,cbMagenta
ShowObject oikea,OFF
ObjectRange oikea,40,64 


vasen=LoadAnimObject("pelihahmo2.png",40,64,0,13)
MaskObject vasen,cbMagenta
ShowObject vasen,OFF
ObjectRange vasen,40,64 

pelihahmo=CloneObject(oikea)
SetupCollision pelihahmo,kenttä,1,4,2
ObjectRange pelihahmo,40,64 


'-------------------------------------------------
'Pääsilmukka

Repeat

ClsColor cbsilver

    vauhti=0 'oletuksena ei liikettä

    If RightKey() Then 
        PaintObject pelihahmo,oikea 
        If maassa Then PlayObject pelihahmo,2,13,0.3
        vauhti=4 
    ElseIf LeftKey() Then
        PaintObject pelihahmo,vasen 
        If maassa Then PlayObject pelihahmo,2,13,0.25
        vauhti=-4 
    Else 
        PlayObject pelihahmo,0
    EndIf
    
    TranslateObject pelihahmo,vauhti,yPlus#
    yPlus=yPlus+PAINOVOIMA
    
    UpdateGame 
    CloneCameraPosition pelihahmo 
    
    maassa=0 
    törmäykset=CountCollisions(pelihahmo)

    For i=1 To törmäykset
        If GetCollision(pelihahmo,i)=kenttä
            If CollisionAngle(pelihahmo,i)=90 Then 
                yPlus#=-1
                maassa=1 
            EndIf
            If CollisionAngle(pelihahmo,i)=270 Then 
                yPlus#=-1
            EndIf
        EndIf
    Next i 
       
    If törmäykset=0 Then PlayObject pelihahmo,12,0
    
    If KeyDown(cbKeyZ) And maassa Then
        yPlus#=7.7
    EndIf 

Poistin 2 pistettä väärästä kohtaa ja itselläni ainakin toimii, niin kauvan kunnes ei voi ladata karttaa jota ei mulla luonnollisesti ole..
No shit sherlock. Se koodin alkuosahan on suoraan kopioitu CoolBasicin painovoimaesimerkistä pienillä arvojen muutoksilla, totta kai se toimii. Eikä alkuperäinen kysyjäkään tainnut sanoa mitään sellaisesta, että ohjelma ei käynnisty.

User avatar
naputtelija
Devoted Member
Posts: 718
Joined: Wed Nov 03, 2010 8:56 pm
Location: Joku piste pohjoisessa.

Re: Tyhmät kysymykset (I/2011)

Post by naputtelija » Tue Dec 20, 2011 9:42 am

Art wrote:

Code: Select all

Const PAINOVOIMA = -0.3 'painoviman voimakkuus
                        'pienempi->suurempi pv.
                        'positiiviset arvot->
                        'painovoima ylöspäin?!
yPlus#=0                'Tämä hallitsee hyppyä


SCREEN 800,600,0,cbwindowed
FrameLimit 40 
'-------------------------------------------------

kenttä=LoadMap("Map1.til","malli tileset.png")
PositionObject kenttä,0,50
MaskObject kenttä,cbmagenta
PlayObject kenttä,0,0,0.5


oikea=LoadAnimObject("pelihahmo.png",40,64,0,13)
MaskObject oikea,cbMagenta
ShowObject oikea,OFF
ObjectRange oikea,40,64 


vasen=LoadAnimObject("pelihahmo2.png",40,64,0,13)
MaskObject vasen,cbMagenta
ShowObject vasen,OFF
ObjectRange vasen,40,64 

pelihahmo=CloneObject(oikea)
SetupCollision pelihahmo,kenttä,1,4,2
ObjectRange pelihahmo,40,64 


'-------------------------------------------------
'Pääsilmukka

Repeat

ClsColor cbsilver

    vauhti=0 'oletuksena ei liikettä

    If RightKey() Then 
        PaintObject pelihahmo,oikea 
        If maassa Then PlayObject pelihahmo,2,13,0.3
        vauhti=4 
    ElseIf LeftKey() Then
        PaintObject pelihahmo,vasen 
        If maassa Then PlayObject pelihahmo,2,13,0.25
        vauhti=-4 
    Else 
        PlayObject pelihahmo,0
    EndIf
    
    TranslateObject pelihahmo,vauhti,yPlus#
    yPlus=yPlus+PAINOVOIMA
    
    UpdateGame 
    CloneCameraPosition pelihahmo 
    
    maassa=0 
    törmäykset=CountCollisions(pelihahmo)

    For i=1 To törmäykset
        If GetCollision(pelihahmo,i)=kenttä
            If CollisionAngle(pelihahmo,i)=90 Then 
                yPlus#=-1
                maassa=1 
            EndIf
            If CollisionAngle(pelihahmo,i)=270 Then 
                yPlus#=-1
            EndIf
        EndIf
    Next i 
       
    If törmäykset=0 Then PlayObject pelihahmo,12,0
    
    If KeyDown(cbKeyZ) And maassa Then
        yPlus#=7.7
    EndIf 

Poistin 2 pistettä väärästä kohtaa ja itselläni ainakin toimii, niin kauvan kunnes ei voi ladata karttaa jota ei mulla luonnollisesti ole..
Sijaitsevatko nuo Map1 ja malli tileset siinä samassa kansiossa kuin tämä koodi? Jos ei, niin ongelma on siinä. Ohjelma siis etsii aina sieltä kansiosta ellet määrittele eteen "Kansio\"(seuraava kansio), "...\"(edellinen kansio) tai "C:\" Tai joku muu levyn kirjain. Esim. jos tiedosto sijaitsee: "C:\matti\desktop\map1.til" niin jos koodisikin on sijainnissa "C:\matti\desktop\koodi.cb" niin LoadMap("map1.til,"kuva.jpg") toimii.
<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...

Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Tyhmät kysymykset (I/2011)

Post by Awaclus » Tue Dec 20, 2011 11:27 am

naputtelija wrote:
Art wrote:

Code: Select all

Const PAINOVOIMA = -0.3 'painoviman voimakkuus
                        'pienempi->suurempi pv.
                        'positiiviset arvot->
                        'painovoima ylöspäin?!
yPlus#=0                'Tämä hallitsee hyppyä


SCREEN 800,600,0,cbwindowed
FrameLimit 40 
'-------------------------------------------------

kenttä=LoadMap("Map1.til","malli tileset.png")
PositionObject kenttä,0,50
MaskObject kenttä,cbmagenta
PlayObject kenttä,0,0,0.5


oikea=LoadAnimObject("pelihahmo.png",40,64,0,13)
MaskObject oikea,cbMagenta
ShowObject oikea,OFF
ObjectRange oikea,40,64 


vasen=LoadAnimObject("pelihahmo2.png",40,64,0,13)
MaskObject vasen,cbMagenta
ShowObject vasen,OFF
ObjectRange vasen,40,64 

pelihahmo=CloneObject(oikea)
SetupCollision pelihahmo,kenttä,1,4,2
ObjectRange pelihahmo,40,64 


'-------------------------------------------------
'Pääsilmukka

Repeat

ClsColor cbsilver

    vauhti=0 'oletuksena ei liikettä

    If RightKey() Then 
        PaintObject pelihahmo,oikea 
        If maassa Then PlayObject pelihahmo,2,13,0.3
        vauhti=4 
    ElseIf LeftKey() Then
        PaintObject pelihahmo,vasen 
        If maassa Then PlayObject pelihahmo,2,13,0.25
        vauhti=-4 
    Else 
        PlayObject pelihahmo,0
    EndIf
    
    TranslateObject pelihahmo,vauhti,yPlus#
    yPlus=yPlus+PAINOVOIMA
    
    UpdateGame 
    CloneCameraPosition pelihahmo 
    
    maassa=0 
    törmäykset=CountCollisions(pelihahmo)

    For i=1 To törmäykset
        If GetCollision(pelihahmo,i)=kenttä
            If CollisionAngle(pelihahmo,i)=90 Then 
                yPlus#=-1
                maassa=1 
            EndIf
            If CollisionAngle(pelihahmo,i)=270 Then 
                yPlus#=-1
            EndIf
        EndIf
    Next i 
       
    If törmäykset=0 Then PlayObject pelihahmo,12,0
    
    If KeyDown(cbKeyZ) And maassa Then
        yPlus#=7.7
    EndIf 

Poistin 2 pistettä väärästä kohtaa ja itselläni ainakin toimii, niin kauvan kunnes ei voi ladata karttaa jota ei mulla luonnollisesti ole..
Sijaitsevatko nuo Map1 ja malli tileset siinä samassa kansiossa kuin tämä koodi? Jos ei, niin ongelma on siinä. Ohjelma siis etsii aina sieltä kansiosta ellet määrittele eteen "Kansio\"(seuraava kansio), "...\"(edellinen kansio) tai "C:\" Tai joku muu levyn kirjain. Esim. jos tiedosto sijaitsee: "C:\matti\desktop\map1.til" niin jos koodisikin on sijainnissa "C:\matti\desktop\koodi.cb" niin LoadMap("map1.til,"kuva.jpg") toimii.
Ongelmahan ei ole siinä, että koodi ei toimi. Ongelma oli siinä, että alkuperäinen kysyjä (vieras) ei saanut tasohyppelypelissä hahmoa menemään tikkaiden kohdalla ylöspäin. Sen jälkeen, kun Esa oli jo ratkaissut ongelman, Art ensin ilmoitti painovoiman olevan vakio, sitten vähän myöhemmin ilmoitti, että CoolBasicin painovoimaoppitunti toimii ja että hänellä ei ole alkuperäisen kysyjän karttaa, ja sitten sinä lainasit Artia.

faecplam

User avatar
aloittelijamies
Newcomer
Posts: 45
Joined: Fri Nov 18, 2011 10:55 pm

Re: Tyhmät kysymykset (I/2011)

Post by aloittelijamies » Tue Dec 20, 2011 8:05 pm

Yritän saada objecteja (kuten kerättäväviä tavaroita joista saa pisteitä tai hp:ta) peliini. Objectit on sijoitettu tilekarttaan datakerroksen avulla

ja kokeilin tästä topicista hakea koodia hoitamaan homman.

Lopputuloksena peli toimii normaalisti, mutta ilman haluttuja karttaan asetettuja datatilejä ja niille paikoille sijoitettuja objekteja

Saisiko tuohon yllämainittuun koodiin vielä jotain selvennystä yms? Data-arvo(4 kartassa ja myös koodissa) ja cloneobject on jo selvää. Esine objecti on ajettu peliin loadobject kommennolla jo valmiiksi joten cloneobjectista tuskin johtuu.

User avatar
elmo123
Active Member
Posts: 153
Joined: Sun Sep 09, 2007 4:19 pm

Re: Tyhmät kysymykset (I/2011)

Post by elmo123 » Tue Dec 20, 2011 9:03 pm

aloittelijamies wrote:Yritän saada objecteja (kuten kerättäväviä tavaroita joista saa pisteitä tai hp:ta) peliini. Objectit on sijoitettu tilekarttaan datakerroksen avulla

ja kokeilin tästä topicista hakea koodia hoitamaan homman.

Lopputuloksena peli toimii normaalisti, mutta ilman haluttuja karttaan asetettuja datatilejä ja niille paikoille sijoitettuja objekteja

Saisiko tuohon yllämainittuun koodiin vielä jotain selvennystä yms? Data-arvo(4 kartassa ja myös koodissa) ja cloneobject on jo selvää. Esine objecti on ajettu peliin loadobject kommennolla jo valmiiksi joten cloneobjectista tuskin johtuu.
Mainitsemassasi koodissa läpikäydään kahden sisäkkäisen For-silmukan avulla koko kartan datakerros läpi.
Sisemmässä loopissa käydään kaikki tilet vaakasuunnassa läpi, ja sitten ulompi silmukka suorittaa saman uudelleen, mutta y-muuttujan kasvettua yhdellä.

Joka tilen kohdalla tarkistetaan tilen data-arvo. Jos se on 4, siis tässä tapauksessa, luodaan objekti.
Objekti sijoitetaan aloittelijoille hieman epäselvin kaavoin:

Code: Select all

tile_leveys*(-0.5*MapWidth() + x - 0.5) + ObjectX(kartta)
Jaetaanpa lauseke osiin:

Code: Select all

tile_leveys * 
(
-0.5 * MapWidth()
 + x
- 0.5
)
+ ObjectX(kartta)
Sulkeiden sisällä kerrotaan kartan leveys -0.5:llä, eli jaetaan se kahdella ja käännetään negatiiviseksi.
Tämä siksi, että maailmakoordinaateissa 0, 0 on keskellä. Jos kartan koko olisi 32*32, ja esine tulisi laittaa kohtaan 16, 16, tulisi esineen ilmestyä maailman keskelle.
Kertomalla -0.5:llä saadaan kartan vasen yläkulma oikeaan paikkaan.
Seuraavaksi lisätään siihen läpikäytävän paikan vaakakoordinaatti. Jos paikka jälleen on 16, -16+16=0. Vastaavasti -16+0=-16, jos paikka olisi vasen reuna.
Puolikkaan poistaminen koordinaateista ei liity luvulla -0.5 kertomiseen. Sen tarkoitus on siirtää objekti tilen keskelle.
Sitten koko komeus kerrotaan tilen leveydellä. Jos tilejen leveys olisi vaikka 32, eikä sillä kerrottaisi edellä saatuja lukuja, vastaisivat koordinaatit silloin pikseleitä. Silloin tilekartan 0, 0 vastaisi maailmakoordinaattien
kohtaa -32, -32, mikä tarkoittaisi tässä tapauksessa kohtaa keskustan vieressä. Koko sulkeissa oleva laskutoimitus palauttaa tilejen koordinaatit maailmassa. Siispä kerrotaan tilen leveydellä.

Lopuksi pieni viilaus, joka useimmissa tilanteissa lienee turha, mutta jos karttaan on liikuteltu, eivät esineet ilmesty oikein. Siispä siirretään esinettä vielä aiottuun kohtaan suhteessa karttaan.

Nyt saatiin muunnettua melko lyhyellä koodilla kartan tilekoordinaatit maailmakoordinaateiksi, mutta vain vaakasuunnassa. Y-koordinaateille tehdään lähes sama:

Code: Select all

tile_leveys*(-0.5*MapHeight() - y + 0.5) + ObjectY(kartta)
SPuntelta unohtui MapHeight()

Ero on siinä, että kartan keskikohdasta vähennetään aiotun paikan y-koordinaatti. Maailmakoordinaateissa Y kasvaa ylöspäin!

Jotta esineitä ilmestyisi kartalle, täytyy totta kai kartan datakerroksesta löytyä arvoja 4. Tilesteriä käytettäessä klikataan DATA-kerros näkyviin ja DATA-tekstiä klikkaamalla se muuttuu siniseksi.
Kirjoita luku 4 ja piirrä.
Kiinnostuin pelien tekemisestä ennen 1. luokkaa.
Sitten 3. luokalla tuli CB. Ja siitä se alkoi.

Blender! TF2! CB! Game Maker! Nokia-mollaus! Kitaransoitto! Breakdance! MadTracker! Minecraft!

User avatar
aloittelijamies
Newcomer
Posts: 45
Joined: Fri Nov 18, 2011 10:55 pm

Re: Tyhmät kysymykset (I/2011)

Post by aloittelijamies » Tue Dec 20, 2011 11:58 pm

^ kiitos tästä

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

Re: Tyhmät kysymykset (I/2011)

Post by MaGetzUb » Thu Dec 22, 2011 1:05 am

Funktio kartalle sijoituksesta, olettaen ettei karttaa olla siirretty moveobjektilla:

Code: Select all

Function SijoitaObjKartalle(objekti, mapX, mapY, tilenLeveys = 32, tilenKorkeus = 32)
      PositionObject objekti, (-MapWidth()*tilenLeveys)/2+mapX*tilenLeveys-ObjectSizeX(objekti)/2, (MapHeight()*tilenLeveys)/2-mapY*tilenLeveys-ObjectSizeY(objekti)/2
EndfFunction 
Esimerkki:

Code: Select all

FrameLimit 40 

kartta = LoadMap("Media\cdm2.til","Media\tileset.bmp")
PlayObject kartta,0,0,1

ukko = LoadObject ("Media\guy.bmp",72)

SetupCollision ukko, kartta, 1, 4, 2
PositionObjectMap(ukko, 20, 45) //Tässä kohtaa käytetään tekemääni funktiota.

Repeat


    If LeftKey() Then TurnObject ukko,5
    If RightKey() Then TurnObject ukko,-5
    If UpKey() Then MoveObject ukko,2
    If DownKey() Then MoveObject ukko,-2

    UpdateGame

    CloneCameraPosition ukko

    DrawScreen

Forever

Function PositionObjectMap(objekti, mapX, mapY, tilenLeveys = 32, tilenKorkeus = 32)
      PositionObject objekti, (-MapWidth()*tilenLeveys)/2+mapX*tilenLeveys-ObjectSizeX(objekti)/2, (MapHeight()*tilenLeveys)/2-mapY*tilenLeveys+ObjectSizeY(objekti)/2
EndFunction 
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.

User avatar
aloittelijamies
Newcomer
Posts: 45
Joined: Fri Nov 18, 2011 10:55 pm

Re: Tyhmät kysymykset (I/2011)

Post by aloittelijamies » Fri Dec 23, 2011 12:40 am

Koodi toimii oikein(ei heitä mitään erroria kun peli käynnistyy,data-arvot syötetty karttaan ja objektki ladattu mutta silti data-arvoisten tilejen kohdalla ei näy yhtään mitään.

Esine joka ladatiin loadobject komennolla toimii ja näkyy, mutta nämä "kloonanut" ei vaikkakin cloneobject komento on oikein.

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

Re: Tyhmät kysymykset (I/2011)

Post by valscion » Fri Dec 23, 2011 2:49 pm

aloittelijamies wrote:Koodi toimii oikein(ei heitä mitään erroria kun peli käynnistyy,data-arvot syötetty karttaan ja objektki ladattu mutta silti data-arvoisten tilejen kohdalla ei näy yhtään mitään.

Esine joka ladatiin loadobject komennolla toimii ja näkyy, mutta nämä "kloonanut" ei vaikkakin cloneobject komento on oikein.
Koita heittää vaikka MakeErrorilla virhettä siinä kohtaa kun kloonaat objektin. Näet sillä sitten että toimiiko objektien laittaminen kartalle alunperinkään.

On hyvä tapa tehdä kloonattavat objektit niin, että lataa ensin master-objektin, josta sitten kloonataan kaikki muut objektit. Master-objekti sitten piilotettaisiin käyttämällä ShowObject-komentoa. Näin koodi olisi yhtenäistä kun kaikkia objekteja käsiteltäisiin tyyppikokoelman jäseninä.
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

MrMonday
Advanced Member
Posts: 378
Joined: Fri Oct 10, 2008 2:35 pm

Re: Tyhmät kysymykset (I/2011)

Post by MrMonday » Fri Dec 23, 2011 5:29 pm

Tuli ongelmia kartan kanssa:

Code: Select all

If GetMap(3,ObjectX(bullet),ObjectY(bullet)) = 4 Then
    EditMap map,1,ObjectX(bullet),ObjectY(bullet),15
    EditMap map,3,ObjectX(bullet),ObjectY(bullet),5
    DeleteObject bullet
EndIf 
Eli pitäisi toimia seuraavasti: Jos ammuksen koordinaateissa tilen data-kerroksessa on arvo neljä, muokataan over-kerrokseen tileksi järjestyksessään 15. tile ja data-kerroksen arvoksi viisi, eli muokataan sitä tileä minkä päällä ammus on ja sen jälkeen poistetaan ammus-objekti. Nyt käy kuitenkin niin, että ilmoittaa "EditMap Failed" ja peli kaatuu siihen paikkaan. Kiitos jo etukäteen avusta :)

Locked