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"
avaruuspelin ampuminen mavittaa
-
- Forum Veteran
- Posts: 2396
- Joined: Tue Aug 28, 2007 4:20 pm
Re: avaruuspelin ampuminen mavittaa
Koodia tulemaan. Noilla ohjeilla on mahdoton auttaa.
Re: avaruuspelin ampuminen mavittaa
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
-
- Active Member
- Posts: 163
- Joined: Fri Aug 31, 2007 7:07 pm
- Location: Helsinki
- Contact:
Re: avaruuspelin ampuminen mavittaa
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)
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)
-
- Active Member
- Posts: 163
- Joined: Fri Aug 31, 2007 7:07 pm
- Location: Helsinki
- Contact:
Re: avaruuspelin ampuminen mavittaa
Käytäpä tätä funktiota UpdateSpacen tilalla. Se näytti toimivan.
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).
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
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).