Page 9 of 50

Re: Tyhmät kysymykset (I/2011)

Posted: Tue Mar 15, 2011 10:28 pm
by Latexi95
Kokkelkhan wrote:Olen pohtinut pääni puhki yrittäessäni saada eräänlaista energia systeemia toimimaan. Eli tarkoitus olisi tehdä rutiini (funktio mahdollisesti?) joka vähentäisi energiaa aina tietyn määrän kun joku ehto kävisi toteen, ja sitten palauttaisi vähennetyn energian kun ehto ei ole enää tosi.
Tässä ongelma tiivistettynä:

Code: Select all

var1=0
energy=100

if var1=true then
    energy=energy-30
elseif var1=false then
    energy=energy+30
endif
Tälläinen toteutushan ei tietenkään toimi koska energiaa vähennettäisiin loputtomiin.

Ehdotuksia? Esimerkkejä? Kiitos.
Siis haluaisit, että energiaa vähennettäisiin kertaalleen vain ehdon toteutuessa?
Voisit tehdä toisen muuttujan, johon tallennat sen, onko energia jo vähennetty.

Code: Select all

var1=0
vähennetty = false
energy=100

if var1=true and vähennetty = false then
    energy=energy-30
    vähennetty = true
elseif var1=false and vähennetty = true then
    energy=energy+30
    vähennetty = false
endif
Nyt energiaa lisätään/vähennetään vain kun var1 muuttuu.

Re: Tyhmät kysymykset (I/2011)

Posted: Thu Mar 17, 2011 3:27 pm
by Timblex
Muistelisin että jossain oli kysymys jossa kysyttiin miten saa cooltown-talojen katot läpinäkyviksi
selasin ongelmia kahteenkymmeneen asti mutta en löytänyt eli:
miten saan cooltown-talojen katot läpinäkyviksi :?:

Re: Tyhmät kysymykset (I/2011)

Posted: Thu Mar 17, 2011 4:11 pm
by Jonez
Veikkaan, että cooltownissa sisäseiniä ei ikinä piirretä, eli jos saat katon läpinäkyväksi, ei se silti näytä hyvältä (sisäseinät puuttuvat). Mutta ainahan voit tehdä neljästä eri talosta seinät yhdelle talolle, jolloin saat myös sisäseinät näkyviksi. Ja ilman kattoa.

Re: Tyhmät kysymykset (I/2011)

Posted: Thu Mar 17, 2011 4:55 pm
by Timblex
sainkin katon helposti läpinäkyväksi :oops:
mutta tein niin että myös etuseinä muuttuu läpinäkyväksi niin näyttää kuin talo katoaisi

Re: Tyhmät kysymykset (I/2011)

Posted: Thu Mar 17, 2011 5:31 pm
by Timblex
Taas kysymys :roll:
miten saan objektin kääntymään hiireen päin :?:

Re: Tyhmät kysymykset (I/2011)

Posted: Thu Mar 17, 2011 6:31 pm
by Dimple
timpe99 wrote:Taas kysymys :roll:
miten saan objektin kääntymään hiireen päin :?:
Sly_Jack0 wrote:

Code: Select all

RotateObject objekti,-GetAngle(ObjectX(objekti),ObjectY(objekti),MouseWX(),mouseWY())
EDIT:

Lisäsin miinuksen GetAngle():n eteen. Nyt toimii oikein. Kiitos JATothrim, kun huomasit koodini toimimattomuuden.


Re: Tyhmät kysymykset (I/2011)

Posted: Thu Mar 17, 2011 6:59 pm
by Kokkelkhan
Dimple wrote:
timpe99 wrote:Taas kysymys :roll:
miten saan objektin kääntymään hiireen päin :?:
Sly_Jack0 wrote:

Code: Select all

RotateObject objekti,-GetAngle(ObjectX(objekti),ObjectY(objekti),MouseWX(),mouseWY())
Mielestäni ehdottomasti kätevin tapa olisi kiinnittää objecti hiireen:

Code: Select all

hiiri=Makeobject()
obj1=Loadobject("media/soldier.bmp",72)

Repeat
   Positionobject hiiri,MouseWX(),MouseWY()
   Pointobject obj1,hiiri

   Drawscreen
Forever

Re: Tyhmät kysymykset (I/2011)

Posted: Thu Mar 17, 2011 10:54 pm
by Sly_Jack0
Kokkelkhan wrote:Mielestäni ehdottomasti kätevin tapa olisi kiinnittää objecti hiireen:

Code: Select all

hiiri=Makeobject()
obj1=Loadobject("media/soldier.bmp",72)

Repeat
   Positionobject hiiri,MouseWX(),MouseWY()
   Pointobject obj1,hiiri

   Drawscreen
Forever
Mitenkä niin tämä on kätevin? Enemmän koodia ja yksi turha objekti.

Re: Tyhmät kysymykset (I/2011)

Posted: Fri Mar 18, 2011 8:16 am
by Awaclus
Sly_Jack0 wrote:
Kokkelkhan wrote:Mielestäni ehdottomasti kätevin tapa olisi kiinnittää objecti hiireen:

Code: Select all

hiiri=Makeobject()
obj1=Loadobject("media/soldier.bmp",72)

Repeat
   Positionobject hiiri,MouseWX(),MouseWY()
   Pointobject obj1,hiiri

   Drawscreen
Forever
Mitenkä niin tämä on kätevin? Enemmän koodia ja yksi turha objekti.
Jos tarkoituksena on pelkästään obj1:n kääntäminen, niin tämähän on kaikkein vähiten kätevä tapa toteuttaa haluttu tulos. Mutta ainakin minä olen yleensä räiskintäpeleissä halunnut kääntää myöskin targettia sitä mukaa kun pelaajahahmoa käännetään, jolloin tarvitaan hiirelle oma objekti joka tapauksessa muutenkin, ja myöskin PositionObject -rivi tarvitaan, joten ainakin koodin pituuden kannalta sen jälkeen tuommoinen PointObject on lyhyempi kuin jokin aikaisemmin mainituista.

Re: Tyhmät kysymykset (I/2011)

Posted: Sat Mar 19, 2011 2:01 pm
by 6yrdyh
Miten saan objektin2 pysymään objektin1 vasemmalla puolella kokoajan? Eli sitä objekti1 voi liikuttaa ja käännellä ja ton objekti2 pitää pysyä kokoajan sen vasemmalla puolella n.30pikselin päässä.

Re: Tyhmät kysymykset (I/2011)

Posted: Sat Mar 19, 2011 2:09 pm
by Ilmuri
6yrdyh wrote:Miten saan objektin2 pysymään objektin1 vasemmalla puolella kokoajan? Eli sitä objekti1 voi liikuttaa ja käännellä ja ton objekti2 pitää pysyä kokoajan sen vasemmalla puolella n.30pikselin päässä.
CloneObjectPosition, CloneObjectOrientation, TurnObject, MoveObject.

Re: Tyhmät kysymykset (I/2011)

Posted: Sat Mar 19, 2011 3:01 pm
by ItzRaines
Yritän vaihtaa eri aseeseen vaihtamalla kokonaan ukko objektia. Ainoa ongelma on se, että playermp40 objekti on näkymätön, sekä se ilmestyy samaan paikkaan, kuin aloitettaessa peli. Sen pitäisi ilmestyä juuri samaan kohtaan, kuin edellinen player objekti oli.

Code: Select all

SCREEN 800,600,0,1
FrameLimit 100
playerpoints = 0
Playerhealth=100
clip=8
font = LoadFont("arial",30,1,0)
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
    
    Color cbDarkGreen
    Text 280,564,"FPS:"+FPS()
    
    Color cbDarkGreen : Text 280,468, playerpoints
    Color cbDarkGreen : Text 560,468,"Health:"+playerhealth 
    Color cbdarkgreen : Text 450,564,"Clip:"+clip
     
    DrawScreen

Until EscapeKey()


/////// ALIOHJELMAT ///////
// Aliohjelma jossa ladataan pelissä tarvittava media
LoadMedia:
    // Ladataan kartta ja animoidaan se
    map = LoadMap("media/finalbeta.til", "media/Tileset.bmp")
    
    colt = LoadImage("media/colt.bmp")
    
    screenbox = LoadImage("media/screenbox.bmp")
   
    // Ladataan panosobjektin grafiikat ja piilotetaan objekti
    bulletobject = LoadObject("Media\bullet.bmp", 90)
    ShowObject bulletobject, OFF
   
    // Ladataan pelaaja ja asetetaan törmäyksentunnistus kartan seinien ja pelaaja välille
    player = LoadObject("Media\Player_Colt.bmp", 90)
    ShowObject player, ON
    SetupCollision player,map,2,4,2
    //Pelaaja aseella Mp 40
    playermp40 = LoadObject("media\Player_Mp 40.bmp",90)
    ShowObject playermp40, OFF
    SetupCollision playermp40,map,2,4,2
    // Ladataan vihollinen ja piilotetaan objekti
    enemyobject = LoadObject("Media\Enemy_Bar1918.bmp", 90)
    ShowObject enemyobject, OFF
   
    shot = LoadSound("Media\gun 2.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,8
    If RightKey() Then TurnObject player,-8
    If KeyHit(cbkeyc) Then 
        player = playermp40
        ShowObject playermp40, ON
        clip=32
        ShowObject player, OFF
    EndIf
    // Tarkistetaan painetaanko ampumisnäppäintä ja jos,
    // niin luodaan ammus ja törmäystunnistus sille
    If KeyHit(cbkeylcontrol) Then
        clip=clip-1
        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
    If clip=-1 Then clip=8
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, 4
        If ObjectsOverlap (enem\obj,player) Then playerhealth = playerhealth -5
       
        EndIf
    Next enem
Return

// Aliohjelma, jossa läpikäydään ammukset
CheckBullets:
    For blt.BULLETS = Each BULLETS
        MoveObject blt\obj, 50
        For enem.ENEMIES = Each ENEMIES
            // Tarkistetaan osuuko ammus viholliseen
            If ObjectsOverlap(blt\obj, enem\obj, 2) Then
                deleteobj = 1
                enem\energy = enem\energy - 40
                playerpoints = playerpoints + 10
            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 cbBlue
        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
            DeleteObject enem\obj
            Delete enem
        EndIf
    Next enem
    DrawToWorld OFF
   
    // Kirjoitetaan muuttujat näytölle 
    
    DrawImage colt,40,472
    DrawImage screenbox,0,460
Return

// Aliohjelma, jossa määritetään viholliset 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,-500,0
    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,560,0
    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

Re: Tyhmät kysymykset (I/2011)

Posted: Sat Mar 19, 2011 4:48 pm
by Timblex
Miksi ihmeessä keksin vastauksen kysymykseeni aina vasta juuri sen jälkeen kun olen kysynyt sitä foorumilla

Re: Tyhmät kysymykset (I/2011)

Posted: Sat Mar 19, 2011 5:24 pm
by valscion
ItzRaines wrote:Yritän vaihtaa eri aseeseen vaihtamalla kokonaan ukko objektia. Ainoa ongelma on se, että playermp40 objekti on näkymätön, sekä se ilmestyy samaan paikkaan, kuin aloitettaessa peli. Sen pitäisi ilmestyä juuri samaan kohtaan, kuin edellinen player objekti oli.
CloneObjectPosition ja CloneObjectOrientation ovat ne komennot joita tarvitset. Lisää tietoa manuaalista ;)

Re: Tyhmät kysymykset (I/2011)

Posted: Sat Mar 19, 2011 5:36 pm
by Awaclus
timpe99 wrote:Miksi ihmeessä keksin vastauksen kysymykseeni aina vasta juuri sen jälkeen kun olen kysynyt sitä foorumilla
Tämä oli ensimmäinen tyhmä kysymys koko viestiketjun historiassa. Onnittelut ontopicista.

Re: Tyhmät kysymykset (I/2011)

Posted: Sat Mar 19, 2011 9:49 pm
by ItzRaines
Minulle ei selvinnyt oikein tuon Timerin käyttö, joten jos joku viitsisi hyvää hyvyyttään muuttamaan koodini sellaiseksi, että vihu vahingoittaa pelaajaa joka 3 sekunti.

Code: Select all

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, 4
        If ObjectsOverlap (enem\obj,player) Then playerhealth = playerhealth -5
        EndIf
    Next enem
Return

Re: Tyhmät kysymykset (I/2011)

Posted: Sat Mar 19, 2011 10:01 pm
by TukeKoodi
ItzRaines wrote:Minulle ei selvinnyt oikein tuon Timerin käyttö, joten jos joku viitsisi hyvää hyvyyttään muuttamaan koodini sellaiseksi, että vihu vahingoittaa pelaajaa joka 3 sekunti.

Code: Select all

EnemyAI:
    aika = Timer()//Huom. TÄÄ ENNEN REPEATTIA, MUUTEN EI TOIMI!!
    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,  4
            If Timer() -aika > 3000 Then
            //enemlife = enemlife -???
            aika = Timer() //Päivitetään aika
            EndIf
        If ObjectsOverlap (enem\obj,player) Then playerhealth = playerhealth -5
        EndIf
    Next enem
Return
Noin pitäis toimia. Siirrät siis ton ennen for...each...nextii olevan aika = Timer():in enne repeattia ja poistat sen tosta.

Re: Tyhmät kysymykset (I/2011)

Posted: Sat Mar 19, 2011 11:31 pm
by ItzRaines
Yritin aiemmin saamieni ohjeiden mukaan tehdä kenttää uudestaan, mutta mikään ei muutu. Sama bugitus seinissä.
Jos joku nyt kertoisi ohjeet, joilla saa varmasti oikeanlaisen ja toimivan kentän.
Image
Edit: Niin ja älkää kysykö mitään tuosta healthista :oops:

Re: Tyhmät kysymykset (I/2011)

Posted: Sat Mar 19, 2011 11:45 pm
by TukeKoodi
Sori offtopic, mut onks toi alakulmas oleva 1911 pistooli piirretty ite? Aika siistin näkönen ;)

Re: Tyhmät kysymykset (I/2011)

Posted: Sun Mar 20, 2011 12:12 am
by koodaaja
Yleensä ongelma hit-kerroksen kanssa muodostuu siitä, että tilesterillä valitakseen kerroksen pitää klikata sen nimeä eikä vieressä olevaa boksia. Bokseista valitaan vain kerrosten näkyvyys. Nimen painamisen jälkeen kun valitsee vasemman yläkulman tilen ja sillä piirtää seinien päältä, pitäisi kaiken toimia hyvin.