Tyhmät kysymykset (I/2010)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
User avatar
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: Tyhmät kysymykset (I/2010)

Post by phons » Thu Oct 14, 2010 10:25 pm

En ole nyt täysin varma, mutta muistaakseni komento ResetObjectCollision obj, tjs. poistaa kaikki törmäystunnistukset jotka on asetettu objektille obj.
Image

User avatar
Akuji
Member
Posts: 60
Joined: Fri Oct 08, 2010 5:59 pm
Location: Turku
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by Akuji » Thu Oct 14, 2010 10:49 pm

Oikeastaan koitin myös juuri tuota tekniikkaa eikä se toiminut. Se juuri onkin kumma, että raatoon törmää, vaikkei sille ole annettu mitään törmäystunnistetta.

User avatar
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: Tyhmät kysymykset (I/2010)

Post by JATothrim » Thu Oct 14, 2010 11:16 pm

Akuji wrote:Oikeastaan koitin myös juuri tuota tekniikkaa eikä se toiminut. Se juuri onkin kumma, että raatoon törmää, vaikkei sille ole annettu mitään törmäystunnistetta.
Onko raato objekti klooni?
CB:ssä ei ole komentoa jolla saisi poistettua objektilta törmäykset kokonaan niiden asettamisen jälkeen. Suosittelisin näin ollen vain karkeasti poistamaan vihulasen DeleteObjectilla ja luomaan uuden raato objektin tilalle samaan paikaan.
ResetObjectCollision nollaa jo löydetyt törmäykset sitten UpdateGamen tai Drawscreenin, mutta ei poista törmäystarkistusta kokonaan objektilta.
-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.

User avatar
Akuji
Member
Posts: 60
Joined: Fri Oct 08, 2010 5:59 pm
Location: Turku
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by Akuji » Fri Oct 15, 2010 12:24 pm

Raato ei ole tyyppi. Lataan sen vain suoraan ja Paintobjectilla laitan sen sitten vihollisen kuoltua sen tilalle. En siis deletoi vihua, vaan maalaan raadon sen päälle.
Tällä tavalla olen oikeastaan aina mennyt, joten jos se siis vaikuttaa törmäykseen, otan mielelläni vastaan uusia menetelmiä.

Tässä taas esimerkkinä tämä pelirunko, jota käytän esimerkeissäni:

Code: Select all

SCREEN 800,600,0,1
FrameLimit 40

playerpoints = 0
font = LoadFont("Verdana",32,1,1)
SetFont font

// Luodaan tyyppikokoelma ammuksia varten
Type BULLETS
    Field obj
End Type

// Ladataan media
GoSub LoadMedia

// Määritetään tyyppikokoelma vihollisille ja luodaan pari vihollista
Type ENEMIES
    Field obj
    Field energy
End Type
GoSub MakeEnemies


/////// PÄÄSILMUKKA ///////
Repeat
    GoSub CheckButtons
    GoSub EnemyAI
    GoSub CheckBullets
    GoSub DrawGUI
        
    // Siirretään kameraa pelaajan mukana
    CloneCameraPosition player
    
    // Tarkistetaan onko taustamusiikki pysähtynyt ja käynnistetään tarvittaessa uudelleen
    If SoundPlaying(backgroundmusic) = 0 Then
        backgroundmusic = PlaySound("Media\SK_Battle2.mp3", 40)
    EndIf
    
    DrawScreen 

Until EscapeKey()


/////// ALIOHJELMAT ///////
// Aliohjelma jossa ladataan pelissä tarvittava media
LoadMedia:
    // Ladataan kartta ja animoidaan se
    map = LoadMap("Media\cdm2.til", "Media\Tileset.bmp")
    PlayObject map,0,0,0.5
    
    fireball=LoadObject("media\fireball.bmp",72)
    ShowObject fireball,OFF
    
    // Ladataan panosobjektin grafiikat ja piilotetaan objekti
    bulletobject = LoadObject("Media\bullet.bmp", 72)
    ShowObject bulletobject, OFF
    
    // Ladataan pelaaja ja asetetaan törmäyksentunnistus kartan seinien ja pelaaja välille
    player = LoadObject("Media\soldier.bmp", 72)
    SetupCollision player,map,2,4,2
    
    // Ladataan vihollinen ja piilotetaan objekti
    enemyobject = LoadObject("Media\guy.bmp", 72)
    ShowObject enemyobject, OFF
    
    // Ladataan äänet
    backgroundmusic = PlaySound("Media\SK_Battle2.mp3", 40)
    shot = LoadSound("Media\gun 1.wav")
    scream = LoadSound("Media\scream1.wav")
Return

// Aliohjelma joka tarkistaa näppäinpainallukset
CheckButtons:
    If UpKey() Then MoveObject player,4
    If DownKey() Then MoveObject player,-4
    If LeftKey() Then TurnObject player,5
    If RightKey() Then TurnObject player,-5    
    
    // Tarkistetaan painetaanko ampumisnäppäintä ja jos, 
    // niin luodaan ammus ja törmäystunnistus sille
    If KeyHit(cbkeySpace) Then
        PlaySound shot, 40
        blt.BULLETS = New(BULLETS)
        blt\obj = CloneObject(bulletobject)
        CloneObjectPosition blt\obj, player
        CloneObjectOrientation blt\obj, player
        MoveObject blt\obj,15
        SetupCollision blt\obj,map,2,4,1
        ResetObjectCollision blt\obj
    EndIf
Return



// Aliohjelma, jossa tehdään viholliselle alkeellinen tekoäly
EnemyAI:
    For enem.ENEMIES = Each ENEMIES
        // Tarkistetaan näkeekö vihollisobjekti pelaajaobjekti ja
        // jos näkee niin aloitetaan liikuttamaan pelaajaa kohti
        If ObjectSight(enem\obj,player) Then
            PointObject enem\obj, player
            MoveObject enem\obj, 2
        EndIf
    Next enem
Return

// Aliohjelma, jossa läpikäydään ammukset
CheckBullets:
    For blt.BULLETS = Each BULLETS
        MoveObject blt\obj, 10
        For enem.ENEMIES = Each ENEMIES
            // Tarkistetaan osuuko ammus viholliseen
            If ObjectsOverlap(blt\obj, enem\obj, 2) Then
                deleteobj = 1
                enem\energy = enem\energy -20
                playerpoints = playerpoints + 5
            EndIf
        Next enem
        bulcollisions = CountCollisions(blt\obj)
        For i = 1 To bulcollisions
            // Tarkistetaan onko ammus osunut seinään
            If GetCollision(blt\obj, i) > 1 Then deleteobj = 1
        Next i
        If deleteobj = 1 Then
            DeleteObject blt\obj
            Delete blt
            deleteobj = 0
        EndIf
    Next blt
Return

// Aliohjelma jossa piirretään "käyttöliittymä"
DrawGUI:
    DrawGame
    DrawToWorld ON
    // Käydään viholliset läpi
    For enem.ENEMIES = Each ENEMIES
        PosX = ObjectX(enem\obj) - (ObjectSizeX(enem\obj)/2)
        PosY = ObjectY(enem\obj) + ObjectSizeY(enem\obj)
        EnWidth = enem\energy / 3
        Color cbWhite
        Box PosX,PosY,33,6
        Color cbRed
        Box PosX+1,PosY-1,EnWidth-2,4
        If enem\energy <= 0 Then
            // Jos energia nollassa, niin toistetaan huuto ja poistetaan vihollistyyppi
            PlaySound scream,40
            PaintObject enem\obj,fireball   'HUOMIOI TÄMÄ
            Delete enem
        EndIf
    Next enem
    DrawToWorld OFF
    
    // Kirjoitetaan pisteet näytölle (ensimmäinen on varjostus)
    Color cbBlack : Text 12,12, playerpoints
    Color cbWhite : Text 10,10, playerpoints
Return

// Aliohjelma, jossa määritetään kaksi vihollista ja niiden energia
MakeEnemies:
    enem.ENEMIES = New(ENEMIES)
    enem\obj = CloneObject(enemyobject)
    PositionObject enem\obj,0,-500
    SetupCollision enem\obj,map,2,4,1
    SetupCollision enem\obj,player,2,2,2
    SetupCollision player,enem\obj,2,2,2
    ResetObjectCollision enem\obj
    enem\energy = 100
    
    enem.ENEMIES = New(ENEMIES)
    enem\obj = CloneObject(enemyobject)
    PositionObject enem\obj,0,500
    SetupCollision enem\obj,map,2,4,1
    SetupCollision enem\obj,player,2,2,2
    SetupCollision player,enem\obj,2,2,2
    ResetObjectCollision enem\obj
    enem\energy = 100
    
    enem.ENEMIES = New(ENEMIES)
    enem\obj = CloneObject(enemyobject)
    PositionObject enem\obj,0,-800
    SetupCollision enem\obj,map,2,4,1
    SetupCollision enem\obj,player,2,2,2
    SetupCollision player,enem\obj,2,2,2
    ResetObjectCollision enem\obj
    enem\energy = 100
    
    enem.ENEMIES = New(ENEMIES)
    enem\obj = CloneObject(enemyobject)
    PositionObject enem\obj,0,800
    SetupCollision enem\obj,map,2,4,1
    SetupCollision enem\obj,player,2,2,2
    SetupCollision player,enem\obj,2,2,2
    ResetObjectCollision enem\obj
    enem\energy = 100
    
Return
Elikkä lataan alussa raadon, joka on vaikka Fireball
Sitten vain muutan ohjelman loppupuolella olevan Deleteobject enem\obj -komennon Paintobject enem\obj.

Olenko siis tässä tehnyt jotain väärin, vai pystyykö tuosta jotenkin poistamaan törmäystunnistuksen?

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

Re: Tyhmät kysymykset (I/2010)

Post by valscion » Fri Oct 15, 2010 3:15 pm

Akuji wrote:Sitten vain muutan ohjelman loppupuolella olevan Deleteobject enem\obj -komennon Paintobject enem\obj.

Olenko siis tässä tehnyt jotain väärin, vai pystyykö tuosta jotenkin poistamaan törmäystunnistuksen?
Sun _PITÄÄ_ poistaa se objekti kokonaan, jos haluat ettei törmäystunnistus vaikuta siihen. Jotta saisit raadon näkymään kuitenkin samoissa koordinaateissa, niin kloonaa siitä master-objekti-raadosta uusi objekti ja aseta se kuolleen enem\obj objektin koordinaatteihin. Näin selviät yksinkertaisesti törmäystunnistuksista ja muista elossa olevien vihujen jutuista. Asiaa selkeyttämään voit jopa luoda kokonaan toisen tyyppikokoelman, joka sisältää vain raatojen objektit, jolloin ne eivät häiritse muuta vihollisia koskevia pelimekaniikkoja.

Elikkä esimerkkikoodina näin:

Code: Select all

Type ENEMIES
    Field obj
EndType
Type RAADOT
    Field obj
EndType

// Tämä olkoon se master-objekti-raato
master_raato = LoadObject("Media/fireball.bmp")
ShowObject master_raato, OFF


For enem.ENEMIES = Each ENEMIES
    // Käydään kaikki vihut läpi
    // .....
    
    // Noniin, nyt vihollinen kuolee. 
    // Luodaan uusi raato kokoelmaan RAADOT.
    newRaato.RAADOT = New(RAADOT)
    newRaato\obj = CloneObject( master_raato )
    
    // Siirretään raato samaan paikkaan kuin kuoleva vihollinen.
    CloneObjectPosition enem\obj, newRaato\obj
    // käännetään raato samaan suuntaan myös :P
    CloneObjectOrientation enem\obj, newRaato\obj
    
    // Noin, nyt on luotu raato, joten kuollut vihollinen
    // voidaan poistaa pelistä.
    DeleteObject enem\obj
    Delete enem
Next enem 
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
Akuji
Member
Posts: 60
Joined: Fri Oct 08, 2010 5:59 pm
Location: Turku
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by Akuji » Fri Oct 15, 2010 4:07 pm

Kiitti. Toi toimi :)
Huomasin muuten pienen virheen: Cloneobjectpositionissa oli newRaato\obj ja enem\obj väärin päin. Korjasin ja alkoi toimia.
Anteeks kauheesti tämä kyseleminen, mutta miten saisi vielä pelihahmon kävelemään raadon päältä, kun nyt se jää pelaajan päälle.
Latausjärjestys ja objectorder ei nimittäin auta.
Muuten alkaa hommat olla suht koht OK.

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

Re: Tyhmät kysymykset (I/2010)

Post by valscion » Fri Oct 15, 2010 4:32 pm

Akuji wrote:Kiitti. Toi toimi :)
Huomasin muuten pienen virheen: Cloneobjectpositionissa oli newRaato\obj ja enem\obj väärin päin. Korjasin ja alkoi toimia.
Anteeks kauheesti tämä kyseleminen, mutta miten saisi vielä pelihahmon kävelemään raadon päältä, kun nyt se jää pelaajan päälle.
Latausjärjestys ja objectorder ei nimittäin auta.
Muuten alkaa hommat olla suht koht OK.
Aha hupsista että sellanen moka, mutta hyvä kun huomasit. Tuohon pelaajan päälle jäämiseen, niin vilkaiseppas manuaalista komento ObjectOrder. Sen pitäisi auttaa.
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
Akuji
Member
Posts: 60
Joined: Fri Oct 08, 2010 5:59 pm
Location: Turku
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by Akuji » Fri Oct 15, 2010 4:43 pm

Sillä yritin, mutta ei vaikuttanut mitenkään.

User avatar
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: Tyhmät kysymykset (I/2010)

Post by JATothrim » Fri Oct 15, 2010 5:45 pm

Akuji wrote:Sillä yritin, mutta ei vaikuttanut mitenkään.
Huomaa että ObjectOrder siirtää objektin joko "alimmaiseksi" - eli objekti saatetaan piirtää mm. ennen tilekarttaa tai päällimmäiseksi. Aina kun luot uusia objekteja ne ovat oletuksellisesti "päälimmäisiä" eli ne piirretään viimeisenä ja piirtyvät siis muiden objektien päälle.
Ratkaisu tähän on siirtää pelihahmo päälimmäiseksi kun uusia objekteja luodaan.


PS: Ja älä pyytele anteeksi täällä, kysymyksesi ovat olleet erinomaisia. :)
-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.

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

Re: Tyhmät kysymykset (I/2010)

Post by Timblex » Fri Oct 15, 2010 6:46 pm

Miten sais ohjelman lähettämään tietoa toiseen samaan ohjelmaan ilman internet yhteyttä?
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: Tyhmät kysymykset (I/2010)

Post by valscion » Fri Oct 15, 2010 6:55 pm

timpe99 wrote:Miten sais ohjelman lähettämään tietoa toiseen samaan ohjelmaan ilman internet yhteyttä?
Tee joku tiedosto, johon kirjoitat toisella ohjelmalla ja josta luet toisella ohjelmalla. Jos taas tartteet nopeampaa tiedonsiirtoa, niin kyllä se cbNetwork toimii ihan hyvin niinkin, ettei siihen tartte olla internet-yhteyttä olemassa. Sillon vaan muut koneet ei pääse ohjelmien väliin lukemaan/lähettämään dataa.
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
Akuji
Member
Posts: 60
Joined: Fri Oct 08, 2010 5:59 pm
Location: Turku
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by Akuji » Fri Oct 15, 2010 6:57 pm

Ratkaisu tähän on siirtää pelihahmo päälimmäiseksi kun uusia objekteja luodaan.
Tuota olenkin yrittänyt, mutta ei toimi. Pitäisiköhän siirtää jotain muuta :?:

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

Re: Tyhmät kysymykset (I/2010)

Post by esa94 » Fri Oct 15, 2010 8:01 pm

timpe99 wrote:Miten sais ohjelman lähettämään tietoa toiseen samaan ohjelmaan ilman internet yhteyttä?
Avaat kuuntelevan socketin johonkin porttiin ja yhdistät toisesta ohjelmasta siihen osoitteena localhost ja porttina ko. portti.

User avatar
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: Tyhmät kysymykset (I/2010)

Post by JATothrim » Fri Oct 15, 2010 8:05 pm

Akuji wrote:
Ratkaisu tähän on siirtää pelihahmo päälimmäiseksi kun uusia objekteja luodaan.
Tuota olenkin yrittänyt, mutta ei toimi. Pitäisiköhän siirtää jotain muuta :?:
Hmm.. tarkennatko kuinka yrität siirää pelihahmon ObjectOrderilla?
-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.

User avatar
Akuji
Member
Posts: 60
Joined: Fri Oct 08, 2010 5:59 pm
Location: Turku
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by Akuji » Sat Oct 16, 2010 10:19 pm

Ensin lataan pelaajan ja laitan sen Objectorderiksi 1. Sitten kun testaan peliä, jää pelaaja raadon alle, vaikka olen käyttänyt objectorderia. Myöskään pelaajan siirtäminen päällimmäiseksi ei auta. Raatoonkaan kyseinen komento ei tehoa. Laitan koodia, jotta saa selvää:

Code: Select all

SCREEN 800,600,0,1
FrameLimit 40

playerpoints = 0
font = LoadFont("Verdana",32,1,1)
SetFont font

// Tyyppikokoelma ammuksia varten
Type BULLETS
    Field obj
End Type

// Ladataan media
GoSub LoadMedia

// Määritetään tyyppikokoelma vihollisille ja luodaan 4 vihollista
Type ENEMIES
    Field obj
    Field energy
End Type
GoSub MakeEnemies

Type RAADOT
    Field obj
EndType

/////// PÄÄSILMUKKA ///////
Repeat
    GoSub CheckButtons
    GoSub EnemyAI
    GoSub CheckBullets
    GoSub DrawGUI
        
    // Siirretään kameraa pelaajan mukana
    CloneCameraPosition player
    
    // Tarkistetaan onko taustamusiikki pysähtynyt ja käynnistetään tarvittaessa uudelleen
    If SoundPlaying(backgroundmusic) = 0 Then
        backgroundmusic = PlaySound("Media\SK_Battle2.mp3", 40)
    EndIf
    
    DrawScreen 

Until EscapeKey()


/////// ALIOHJELMAT ///////
// Aliohjelma jossa ladataan pelissä tarvittava media
LoadMedia:
    // Ladataan kartta ja animoidaan se
    map = LoadMap("Media\cdm2.til", "Media\Tileset.bmp")
    PlayObject map,0,0,0.5
    
    // Ladataan panosobjektin grafiikat ja piilotetaan objekti
    bulletobject = LoadObject("Media\bullet.bmp", 72)
    ShowObject bulletobject, OFF
    
    // Ladataan pelaaja ja asetetaan törmäyksentunnistus kartan seinien ja pelaaja välille
    player = LoadObject("Media\soldier.bmp", 72)
    SetupCollision player,map,2,4,2
    
    
    // Ladataan vihollinen ja piilotetaan objekti
    enemyobject = LoadObject("Media\guy.bmp", 72)
    ShowObject enemyobject, OFF
    
    // Tämä olkoon se master-objekti-raato
master_raato = LoadObject("Media/fireball.bmp")
ShowObject master_raato, OFF


    
    // Ladataan äänet
    backgroundmusic = PlaySound("Media\SK_Battle2.mp3", 40)
    shot = LoadSound("Media\gun 1.wav")
    scream = LoadSound("Media\scream1.wav")
Return

// Aliohjelma joka tarkistaa näppäinpainallukset
CheckButtons:
    If UpKey() Then MoveObject player,4
    If DownKey() Then MoveObject player,-4
    If LeftKey() Then TurnObject player,5
    If RightKey() Then TurnObject player,-5    
    
    // Tarkistetaan painetaanko ampumisnäppäintä ja jos, 
    // niin luodaan ammus ja törmäystunnistus sille
    If KeyHit(cbkeySpace) Then
        PlaySound shot, 40
        blt.BULLETS = New(BULLETS)
        blt\obj = CloneObject(bulletobject)
        CloneObjectPosition blt\obj, player
        CloneObjectOrientation blt\obj, player
        MoveObject blt\obj,15
        SetupCollision blt\obj,map,2,4,1
        ResetObjectCollision blt\obj
    EndIf
Return



// Tehdään viholliselle alkeellinen tekoäly
EnemyAI:
    For enem.ENEMIES = Each ENEMIES
        // Tarkistetaan näkeekö vihollisobjekti pelaajaobjektin ja
        // aloitetaan liikuttamaan pelaajaa kohti
        If ObjectSight(enem\obj,player) Then
            PointObject enem\obj, player
            MoveObject enem\obj, 2
        EndIf
    Next enem
Return

// Läpikäydään ammukset
CheckBullets:
    For blt.BULLETS = Each BULLETS
        MoveObject blt\obj, 10
        For enem.ENEMIES = Each ENEMIES
            // Tarkistetaan osuuko ammus viholliseen
            If ObjectsOverlap(blt\obj, enem\obj, 2) Then
                deleteobj = 1
                enem\energy = enem\energy -20
                playerpoints = playerpoints + 5
            EndIf
        Next enem
        bulcollisions = CountCollisions(blt\obj)
        For i = 1 To bulcollisions
            // Tarkistetaan onko ammus osunut seinään
            If GetCollision(blt\obj, i) > 1 Then deleteobj = 1
        Next i
        If deleteobj = 1 Then
            DeleteObject blt\obj
            Delete blt
            deleteobj = 0
        EndIf
    Next blt
Return

// Piirretään "käyttöliittymä"
DrawGUI:
    DrawGame
    DrawToWorld ON
    // Käydään viholliset läpi
    For enem.ENEMIES = Each ENEMIES
        PosX = ObjectX(enem\obj) - (ObjectSizeX(enem\obj)/2)
        PosY = ObjectY(enem\obj) + ObjectSizeY(enem\obj)
        EnWidth = enem\energy / 3
        Color cbWhite
        Box PosX,PosY,33,6
        Color cbRed
        Box PosX+1,PosY-1,EnWidth-2,4
        If enem\energy <= 0 Then
            // Jos energia nollassa, niin toistetaan huuto ja deletoidaan vihollistyyppi
            PlaySound scream,40
            
            // Vihollinen kuolee.
    // Uusi raato kokoelmaan RAADOT.
    newRaato.RAADOT = New(RAADOT)
    newRaato\obj = CloneObject( master_raato )
   
    // Raato samaan paikkaan kuin kuoleva vihollinen.
    CloneObjectPosition newRaato\obj,enem\obj
    // käännetään raato samaan suuntaan.
    CloneObjectOrientation enem\obj, newRaato\obj
            
            DeleteObject enem\obj
            Delete enem
        EndIf
    Next enem
    DrawToWorld OFF
    
    // Kirjoitetaan pisteet näytölle (ensimmäinen on varjostus)
    Color cbBlack : Text 12,12, playerpoints
    Color cbWhite : Text 10,10, playerpoints
Return

// Aliohjelma, jossa määritetään kaksi vihollista ja niiden energia
MakeEnemies:
    enem.ENEMIES = New(ENEMIES)
    enem\obj = CloneObject(enemyobject)
    PositionObject enem\obj,0,-500
    SetupCollision enem\obj,map,2,4,1
    SetupCollision enem\obj,player,2,2,2
    SetupCollision player,enem\obj,2,2,2
    ResetObjectCollision enem\obj
    enem\energy = 100
    
    enem.ENEMIES = New(ENEMIES)
    enem\obj = CloneObject(enemyobject)
    PositionObject enem\obj,0,500
    SetupCollision enem\obj,map,2,4,1
    SetupCollision enem\obj,player,2,2,2
    SetupCollision player,enem\obj,2,2,2
    ResetObjectCollision enem\obj
    enem\energy = 100
    
    enem.ENEMIES = New(ENEMIES)
    enem\obj = CloneObject(enemyobject)
    PositionObject enem\obj,0,-800
    SetupCollision enem\obj,map,2,4,1
    SetupCollision enem\obj,player,2,2,2
    SetupCollision player,enem\obj,2,2,2
    ResetObjectCollision enem\obj
    enem\energy = 100
    
    enem.ENEMIES = New(ENEMIES)
    enem\obj = CloneObject(enemyobject)
    PositionObject enem\obj,0,800
    SetupCollision enem\obj,map,2,4,1
    SetupCollision enem\obj,player,2,2,2
    SetupCollision player,enem\obj,2,2,2
    ResetObjectCollision enem\obj
    enem\energy = 100
    
Return

User avatar
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset (I/2010)

Post by koodaaja » Sat Oct 16, 2010 10:34 pm

Tee se spawnatessasi vihollisen, silloin juuri luotu vihollinen jää alle. Objectorder ei tee mitään pysyviä järjestyksiä, se vain siirtää objektin tämänhetkisistä päällimmäiseksi, jolloin kaikki sen luotu menee jälleen päälle.

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

Re: Tyhmät kysymykset (I/2010)

Post by MaGetzUb » Thu Oct 21, 2010 11:34 pm

Aina kun luot raadon, pitää komentaa ObjectOrder pelaaja, 1
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.

DJ-Filbe
Devoted Member
Posts: 854
Joined: Sat Feb 20, 2010 3:18 pm

Re: Tyhmät kysymykset (I/2010)

Post by DJ-Filbe » Fri Oct 22, 2010 11:06 pm

Miten piirrän 3d-koordinaateista pisteen näytölle niin että huomioin myös kameran 3d-koordinaatit?

Code: Select all

Repeat
	Cx = Cx + KeyDown(32) - KeyDown(30) // A- ja D -näppäimistä liikutaan sivulle
	Cy = Cy + KeyDown(200) - KeyDown(208) // Ylä- ja alanuolista muutetaan kameran korkeutta ylös/alaspäin
	Cz = Cz + KeyDown(17) - KeyDown(31) // W- ja S -näppäimistä liikutaan eteen/taakse
	DrawScreen
Forever
tuosta lähdetään

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

Re: Tyhmät kysymykset (I/2010)

Post by MaGetzUb » Fri Oct 22, 2010 11:57 pm

Haitko DJ tätä?

Code: Select all

x# = 100
y# = 50
z# = 100
Repeat
     
     ClearText 
     AddText "Liikuta kameraa nuolilla"
     AddText "Liiuta pistettä W,A,S,D"
     AddText "Pisteen Syvyys Z,X"
    
     x# = x# + 2*(KeyDown(cbkeyd) - KeyDown(cbkeya))
     y# = y# + 2*(KeyDown(cbkeyw) - KeyDown(cbkeys))
     z# = z# + 2*(KeyDown(cbkeyz) - KeyDown(cbkeyx))
     
     MoveCamera 2*(RightKey() - LeftKey()), 2*(UpKey() - DownKey())
        
     s_z# = (1 / z#) 'z-akseli skaalain.
     s_x# = ScreenWidth() / 2 + ((x - CameraX()) * s_z * 100)
     s_y# = ScreenHeight() / 2 - ((y + CameraY()) * s_z * 100)
     
   
     Dot s_x#, s_y#
    
     DrawScreen
Until EscapeKey()
Tässä on vielä samainen koodi, mutta piste on nyt laatikko.

Code: Select all

x# = 100
y# = 50
z# = 100
Repeat
     
     ClearText 
     AddText "Liikuta kameraa nuolilla"
     AddText "Liiuta pistettä W,A,S,D"
     AddText "Pisteen Syvyys Z,X"
    
     x# = x# + 2*(KeyDown(cbkeyd) - KeyDown(cbkeya))
     y# = y# + 2*(KeyDown(cbkeyw) - KeyDown(cbkeys))
     z# = z# + 2*(KeyDown(cbkeyz) - KeyDown(cbkeyx))
     
     MoveCamera 2*(RightKey() - LeftKey()), 2*(UpKey() - DownKey())
        
     s_z# = (1 / z#) 'z-akseli skaalain.
     s_x# = ScreenWidth() / 2 + ((x - CameraX()) * s_z * 100)
     s_y# = ScreenHeight() / 2 - ((y + CameraY()) * s_z * 100)
     
   
     Box s_x#, s_y#, 10 * s_z * 100, 10 * s_z * 100
    
     DrawScreen
Until EscapeKey()
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.

DJ-Filbe
Devoted Member
Posts: 854
Joined: Sat Feb 20, 2010 3:18 pm

Re: Tyhmät kysymykset (I/2010)

Post by DJ-Filbe » Sat Oct 23, 2010 12:06 am

MaGetzUb wrote:
Haitko DJ tätä?

Code: Select all

x# = 100
y# = 50
z# = 100
Repeat
     
     ClearText 
     AddText "Liikuta kameraa nuolilla"
     AddText "Liiuta pistettä W,A,S,D"
     AddText "Pisteen Syvyys Z,X"
    
     x# = x# + 2*(KeyDown(cbkeyd) - KeyDown(cbkeya))
     y# = y# + 2*(KeyDown(cbkeyw) - KeyDown(cbkeys))
     z# = z# + 2*(KeyDown(cbkeyz) - KeyDown(cbkeyx))
     
     MoveCamera 2*(RightKey() - LeftKey()), 2*(UpKey() - DownKey())
        
     s_z# = (1 / z#) 'z-akseli skaalain.
     s_x# = ScreenWidth() / 2 + ((x - CameraX()) * s_z * 100)
     s_y# = ScreenHeight() / 2 - ((y + CameraY()) * s_z * 100)
     
   
     Dot s_x#, s_y#
    
     DrawScreen
Until EscapeKey()
Tässä on vielä samainen koodi, mutta piste on nyt laatikko.

Code: Select all

x# = 100
y# = 50
z# = 100
Repeat
     
     ClearText 
     AddText "Liikuta kameraa nuolilla"
     AddText "Liiuta pistettä W,A,S,D"
     AddText "Pisteen Syvyys Z,X"
    
     x# = x# + 2*(KeyDown(cbkeyd) - KeyDown(cbkeya))
     y# = y# + 2*(KeyDown(cbkeyw) - KeyDown(cbkeys))
     z# = z# + 2*(KeyDown(cbkeyz) - KeyDown(cbkeyx))
     
     MoveCamera 2*(RightKey() - LeftKey()), 2*(UpKey() - DownKey())
        
     s_z# = (1 / z#) 'z-akseli skaalain.
     s_x# = ScreenWidth() / 2 + ((x - CameraX()) * s_z * 100)
     s_y# = ScreenHeight() / 2 - ((y + CameraY()) * s_z * 100)
     
   
     Box s_x#, s_y#, 10 * s_z * 100, 10 * s_z * 100
    
     DrawScreen
Until EscapeKey()
Yeah! Kiitti!
EDIT:

Entäs sitten kameran kääntäminen?


Locked