Ongelma räiskintäpelin kanssa.

Voit pyytää apua ohjelmointiongelmiin täältä.
Post Reply
User avatar
TukeKoodi
Active Member
Posts: 142
Joined: Thu Feb 03, 2011 7:40 pm
Location: C:\Työpöytä

Ongelma räiskintäpelin kanssa.

Post by TukeKoodi »

Päätin kerrankin tehdä antipurkkaisen koodin, ja aloitin räiskintäpelin. Nyt kuitenkin tulee MAV. Koska tämä toimii aliohjelmilla, paikallistin vian 'TsekkaaVihut' -aliohjelmaan. Minkä ihmeen takia tuo minun ObjectsOverlap (rivit 124-126) ei toimi? Tässä koodi:

Code: Select all

FrameLimit 40 'rajoita nopeutta

Gosub Tyypit
Gosub LataaMedia
Gosub Kartta

//Muuttujat

Tapot#=0
luodit#=50

Repeat

Gosub PäivitäTekstit
Gosub Teeammus
Gosub TarkistaAmmukset
Gosub LiikutaUkkoa 
Gosub TeeVihu
Gosub TsekkaaVihut

Until EscapeKey()

Kartta:
//Toistaiseksi :D
ClsColor cbBlue
Return

PäivitäTekstit:
Color cbBlack
Text 0,0, "FPS: "+FPS()
Text 0,40, "Olet päättänyt "+Tapot+" örkin päivät :D"
Text 0,60, "Luoteja lippaassa "+luodit
Return

Tyypit:
Type AMMUS
    Field obj
End Type 

Type OKKI
    Field obj2
    Field hp
End Type 
Return

LataaMedia:
shoot=LoadSound("Media\Gun 1.wav")
preload=LoadSound("Media\Pistol reload.wav")
ukko=LoadObject("Media\soldier.bmp",72)
pati=LoadObject("Media\bullet.bmp")
ShowObject pati,OFF
monki=LoadObject("Peli\okki.bmp",72)
ShowObject monki, OFF
hiiri=LoadImage("Media\Crosshair.bmp")
ShowMouse hiiri
Return


TeeAmmus:
    If KeyDown(cbKeyRControl) And reload=0 Then 
        luoti.AMMUS = New(AMMUS) 'luo uusi ammus
        luoti\obj=CloneObject(pati) 'tee klooni
        luodit=luodit-1
        PlaySound shoot
        'asetetaan pati samaan paikkaan
        CloneObjectPosition luoti\obj,ukko                
        'käännetään pati samaan suuntaan
        CloneObjectOrientation luoti\obj,ukko            
        reload=3.5 'aseen lataus        
    EndIf
    'päivitä aseen lataaminen
    If reload>0 Then reload=reload-1
    If luodit<1 Then
    Wait 2000
    luodit=50
    PlaySound preload
    PlaySound preload
    EndIf
    Return
    
TarkistaAmmukset:
    For luoti.AMMUS = Each AMMUS
        MoveObject luoti\obj,6
        If ObjectX(luoti\obj)<-180 Or ObjectX(luoti\obj)>180 Or ObjectY(luoti\obj)<-130 Or ObjectY(luoti\obj)>130 Then               
            DeleteObject luoti\obj
            Delete luoti
        EndIf        
    Next luoti
    Return
    
LiikutaUkkoa:
    MoveObject ukko, nopeus
    If KeyDown(cbKeyA) Then TurnObject ukko,5
    If KeyDown(cbKeyD) Then TurnObject ukko,-5
    If KeyDown(cbKeyW) Then MoveObject ukko, 2  
    If KeyDown(cbKeyS) Then MoveObject ukko,-2    

Return

TeeVihu:
    If okoaika=0 Then    
        oko.OKKI = New(OKKI)
        oko\obj2=CloneObject(monki)
        oko\hp=100
        PositionObject oko\obj2, Rand(0,400), Rand(0,300)               
        PointObject oko\obj2, ukko           
        okoaika=50      
    EndIf
    If okoaika>0 Then okoaika=okoaika-1
    Return
    
TsekkaaVihut:
    For oko.OKKI = Each OKKI
        MoveObject oko\obj2, 0, 2
        If oko\hp<1 Then             
            Tapot=Tapot+1
            DeleteObject oko\obj2
            Delete oko
        EndIf        
    Next oko

    For oko.OKKI = Each OKKI
        If ObjectsOverlap (oko\obj2,luoti\obj) Then     
            oko\hp=oko\hp-20
        EndIf        
    Next oko

    Return
EDIT:

Poistin pari turhaa muuttujaa

Aloittelija, koodaaja, jotain...
CbFUN :D
TheFish
Developer
Developer
Posts: 477
Joined: Mon Aug 27, 2007 9:28 pm
Location: Joensuu

Re: Ongelma räiskintäpelin kanssa.

Post by TheFish »

TukeKoodi wrote:Päätin kerrankin tehdä antipurkkaisen koodin, ja aloitin räiskintäpelin. Nyt kuitenkin tulee MAV. Koska tämä toimii aliohjelmilla, paikallistin vian 'TsekkaaVihut' -aliohjelmaan. Minkä ihmeen takia tuo minun ObjectsOverlap (rivit 124-126) ei toimi? Tässä koodi:

Code: Select all

...
    For oko.OKKI = Each OKKI
        If ObjectsOverlap (oko\obj2,luoti\obj) Then     
            oko\hp=oko\hp-20
        EndIf        
    Next oko
...
Käyt läpi ainoastaan OKKI tyypin. Sinun pitäisi lisätä tuohon toinen looppi, jossa käyt ammukset läpi.
CoolBasic henkilökuntaa
Kehittäjä
User avatar
TukeKoodi
Active Member
Posts: 142
Joined: Thu Feb 03, 2011 7:40 pm
Location: C:\Työpöytä

Re: Ongelma räiskintäpelin kanssa.

Post by TukeKoodi »

Anteeksi tyhmä kysymys, mutta mihin väliin koodia lisään tuon toisen loopin joka äsken mainittiin?
Aloittelija, koodaaja, jotain...
CbFUN :D
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Ongelma räiskintäpelin kanssa.

Post by valscion »

TukeKoodi wrote:Anteeksi tyhmä kysymys, mutta mihin väliin koodia lisään tuon toisen loopin joka äsken mainittiin?
Siihen "For oko.OKKI = Each OKKI" silmukan sisälle. Eli en nyt anna sinulle suoraa vastausta, vaan esimerkin:

Code: Select all

For otus.OTUKSET = Each OTUKSET
    For saalistaja.SAALISTAJAT = Each SAALISTAJAT
        If Distance2( otus\obj, saalistaja\obj ) < 10 Then
            MakeError "Saalistaja söi otuksen!"
        EndIf
    Next saalistaja
Next otus
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
TukeKoodi
Active Member
Posts: 142
Joined: Thu Feb 03, 2011 7:40 pm
Location: C:\Työpöytä

Re: Ongelma räiskintäpelin kanssa.

Post by TukeKoodi »

VesQ wrote:
TukeKoodi wrote:Anteeksi tyhmä kysymys, mutta mihin väliin koodia lisään tuon toisen loopin joka äsken mainittiin?
Siihen "For oko.OKKI = Each OKKI" silmukan sisälle. Eli en nyt anna sinulle suoraa vastausta, vaan esimerkin:

Code: Select all

For otus.OTUKSET = Each OTUKSET
    For saalistaja.SAALISTAJAT = Each SAALISTAJAT
        If Distance2( otus\obj, saalistaja\obj ) < 10 Then
            MakeError "Saalistaja söi otuksen!"
        EndIf
    Next saalistaja
Next otus
Kiitos!
Aloittelija, koodaaja, jotain...
CbFUN :D
Post Reply