avaruuspelin ampuminen mavittaa

Voit pyytää apua ohjelmointiongelmiin täältä.
Post Reply
The best naab ever

avaruuspelin ampuminen mavittaa

Post by The best naab ever »

aloittelin taas koodailun pitkästä aikaa ja rupesin tekemään avaruus räiskintää joka nyt on jo aivan valmis jos ei ota pikkusta onkelmaa nimittäin ampumimsta ,se MAVittaa heti kun lisään se Type AMMUS jutun ja kun poistan Updatespace():n nii se mavittaa vasta kun yritän ampuu missä vika?
ainii oon käyttäny SDK:n komentoja jotta saan pelini "painottomaksi"
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: avaruuspelin ampuminen mavittaa

Post by Koodiapina »

Koodia tulemaan. Noilla ohjeilla on mahdoton auttaa.
The best naab ever

Re: avaruuspelin ampuminen mavittaa

Post by The best naab ever »

Täs:

Code: Select all

Include "sdk/include/cbGravitationPhysics.cb"

SCREEN 1280,1024,8

peli:

Type AMMUS 
    Field obj 
End Type 

alus = LoadObject("media/ship.bmp",360)
pati = LoadObject("media/bullet.bmp")
reload4=100
healt=100
Repeat 
    
 If KeyHit(cbKeyS) And reload4=100 Then 
   setobjectspeed(alus,ObjectAngle(alus),0)
   reload4=0
   EndIf 
   If reload4<100 Then reload4 = reload4+1
          
  
    If LeftKey() Then TurnObject alus, 3
    If RightKey() Then TurnObject alus, -3
    If UpKey() Then ThrustObject(alus,.1)
    If DownKey() Then ThrustObject(alus,-.2)
    
    If KeyDown(cbKeySpace) And reload=0 Then    
        luoti.AMMUS = New(AMMUS)
        luoti\obj=CloneObject(pati)
        CloneObjectPosition luoti\obj,alus              
        CloneObjectOrientation luoti\obj,alus   
        reload=14     
    EndIf
    If reload>0 Then reload=reload-1
     For luoti.AMMUS = Each AMMUS
        ThrustObject(luoti\obj,2)
     Next luoti
    
UpdateGame 
DrawGame


  UpdateSpace()
  
Text 950,10,"FPS: " + FPS()

DrawScreen

Forever
Aavesoturi
Active Member
Posts: 163
Joined: Fri Aug 31, 2007 7:07 pm
Location: Helsinki
Contact:

Re: avaruuspelin ampuminen mavittaa

Post by Aavesoturi »

Johtuu siitä että UpdateSpace on kamalaa purkkaa, joka paukahtaa rikki pienestäkin. Tässä tapauksessa tuo Type tavallaan luo jo objektin, joskaan sitä ei voi käyttää (tms), joten UpdateSpace mavittaa. Lisäksi objektien poistaminen (mikä ammuksien tapauksessa lienee yleistä) rikkoo indeksit, jolloin funktio on käyttökelvoton.

Suosittelen ottamaan tarvittavat objektit johonkin taulukkoon tai listaan ja sitten tekemään UpdateSpace funktion koodin pohjalta omaan tarkoitukseen sopiva rutiini. Koska et ole vetovoimia käyttänyt, voisit hylätä UpdateSpacen sisemmän luupin kokonaan.

Korjaan tuon joskus. (UpdateGravity toimii erilailla ja paremmin, jos tasoloikkia tekee)
The best naab ever

Re: avaruuspelin ampuminen mavittaa

Post by The best naab ever »

no siihe sitten jääty projektini
Aavesoturi
Active Member
Posts: 163
Joined: Fri Aug 31, 2007 7:07 pm
Location: Helsinki
Contact:

Re: avaruuspelin ampuminen mavittaa

Post by Aavesoturi »

Käytäpä tätä funktiota UpdateSpacen tilalla. Se näytti toimivan.

Code: Select all

Function UpdateSpace2(map=0)
    InitObjectList
    o = NextObject()
    While o <> 0
        If o <> map And ObjectInteger(o) <> -1
            xmove# = GetObjectSpeed(o,xcomp)
            ymove# = GetObjectSpeed(o,ycomp)
            TranslateObject o, xmove, ymove
        EndIf
        o = NextObject()
    Wend
End Function
Eli jos joskus otat kartan mukaan peliin, anna se parametrinä funktiolle, niin se ei turhaan sitä rupea liikuttelemaan. jos et halua että joku on mukana fysiikassa, niin komenna ObjectInteger objekti, -1

Tuosta on siis riisuttu vetovoima (eli kappaleiden väliset vuorovaikutukset), mutta alus käyttäytyy sillai hianosti kaarteissa ja kiihtyy koko ajan lujemmaksi vauhdiksi. Huomaa että koska avaruudessa ei ole kitkaa, yksi ThrustObject riittää kullekin padille, muutoin niitä kiihdytetään joka frame koko ajan enemmän, joka johtaa aivan hurjiin vauhteihin lopulta (ellei tuo juuri ollut tarkoituskin).
Post Reply