ampumisongelma
-
- Newcomer
- Posts: 30
- Joined: Sat Feb 06, 2010 8:20 pm
ampumisongelma
moi!
tuli tässä pikku ongelma kun tei sellasen tankkipelin jossa pitää ampuu vihuja..
itse pystyy ampumaan pelissä vain 2 kutia alussa. miksi?
ja vihollisetkaan ei ammu jos on itse alussa ampunut. korkeintaan siis 2 kutia / peli vaikka en niin tarkoittanut. miten saisin pelin toimimaan oikein?
lataa tästä ja katso ongelma:
http://niksuttaja.suntuubi.com/datafile ... ojekti.rar
tuli tässä pikku ongelma kun tei sellasen tankkipelin jossa pitää ampuu vihuja..
itse pystyy ampumaan pelissä vain 2 kutia alussa. miksi?
ja vihollisetkaan ei ammu jos on itse alussa ampunut. korkeintaan siis 2 kutia / peli vaikka en niin tarkoittanut. miten saisin pelin toimimaan oikein?
lataa tästä ja katso ongelma:
http://niksuttaja.suntuubi.com/datafile ... ojekti.rar
Last edited by cbaloittelija on Wed Feb 10, 2010 3:07 pm, edited 1 time in total.
Re: ampumisongelma
En nyt viitsi ladata pakettia, mutta veikkaisin, että sinulla on siellä näin:
Ongelma johtuu tässä tapauksessa siis siitä, että Reload menee negatiiviseksi, joten se ei enää ole 0, joten et voi ampua. Korjaus: If Reload Then Reload -1.
Vihujen ampumisongelma, jos tosiaan koodi oli tuollainen, taas johtuu siitä, että käytät samaa Reloadia kuin pelaajakin (joka on sitäpaitsi negatiivinen), joten vaikka se olisikin jo korjattu, niin joka kerralla, kun pystyisit ampumaan, saattaakin ampua ensimmäisenä luotu vihu ja muut eivät voi ampua ollenkaan. Korjaus:
Code: Select all
If reload = 0 Then
newAmmus.AMMUKSET = New (AMMUKSET)
Code: Select all
For iVihu.VIHUT = Each VIHUT
If reload = 0 Then
newAmmus.AMMUKSET = New (AMMUKSET)
Code: Select all
Reload -1
Vihujen ampumisongelma, jos tosiaan koodi oli tuollainen, taas johtuu siitä, että käytät samaa Reloadia kuin pelaajakin (joka on sitäpaitsi negatiivinen), joten vaikka se olisikin jo korjattu, niin joka kerralla, kun pystyisit ampumaan, saattaakin ampua ensimmäisenä luotu vihu ja muut eivät voi ampua ollenkaan. Korjaus:
Code: Select all
Type VIHUT
Field obj
Field reload
EndType
Code: Select all
For iVihu.VIHUT = Each VIHUT
If iVihu\reload = 0 Then
newAmmus.AMMUKSET = New (AMMUKSET)
Else
iVihu\reload -1
EndIf
Next iVihu
-
- Newcomer
- Posts: 30
- Joined: Sat Feb 06, 2010 8:20 pm
Re: ampumisongelma
ei ollu nyt kyse tuosta. laitan tähän lähdekoodin, jos joku ei viitsi ladata ja katsoa projektin koodia...
PS: olen pahoillani ettei minulla ollut aikaa sisennellä koodia. (lue allekirjoitus)
PS: olen pahoillani ettei minulla ollut aikaa sisennellä koodia. (lue allekirjoitus)
Code: Select all
SCREEN 800,640
FrameLimit 30
k=LoadMap("Kartat\lab.til","Kartat\tiilit.png")
tausta=LoadSound("Äänet\bgsound.mp3")
PlaySound tausta
tankki=LoadObject("Objektit\tankki.jpg",80)
tankscroll=LoadSound("Äänet\tankscroll.wma")
tankturn=LoadSound("Äänet\tankturn.wma")
vihu=LoadObject("Objektit\vihu.png",40)
tykki=LoadObject("Objektit\tykki.png",80)
tykitys=LoadSound("Äänet\tykki.mp3")
ShowObject vihu,OFF
MoveObject tankki,-400,-400
SetupCollision tankki,k,1,4,2
pati=LoadObject("Objektit\tykinkuula.jpg",1)
ShowObject pati,OFF
Dim AMMUS_ELOSSA(100) 'tämä sisältää omat ammukset
Dim AMMUS_OBJ(100) 'tämä sisältää omat ammukset
Dim AMMUS_ELOSSA2(100) 'tämä sisältää vihollisten ammukset
Dim AMMUS_OBJ2(100) 'tämä sisältää vihollisten ammukset
Dim vih(1000) 'vihollisten objektit (tosi kökkö juttu että limitti on 1000, vie tilaa mutta en jaksanut tehdä parempaa)
reload=1
reload2=100
p=0
lataavihu=400
For i = 1 To 100
AMMUS_OBJ(i) = CloneObject(pati)
ShowObject AMMUS_OBJ(i),OFF
AMMUS_OBJ2(i) = CloneObject(pati)
ShowObject AMMUS_OBJ2(i),OFF
Next i
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Repeat
reload2-1
lataavihu-1
If lataavihu = 0 Then lataavihu=300 : Gosub luovihu
If UpKey() Then MoveObject tankki,-8,0 : PlaySound tankscroll
If DownKey() Then MoveObject tankki,8,0 : PlaySound tankscroll
If LeftKey() Then TurnObject tankki,10 : TurnObject tykki,10 : PlaySound tankturn
If RightKey() Then TurnObject tankki,-10 : TurnObject tykki,-10 : PlaySound tankturn
If KeyDown(30) Then TurnObject tykki,6
If KeyDown(32) Then TurnObject tykki,-6
If KeyDown(57) Then Gosub LisääAmmus
CloneObjectPosition tykki,tankki
CloneCameraPosition tankki
If reload > 0 Then reload-1
Gosub PäivitäAmmukset
Gosub PäivitäAmmukset2
If reload2 = 0 Then reload=100 : Gosub LisääAmmus2
Gosub päivitävihut
DrawScreen
Forever
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
LisääAmmus:
If reload = 0 Then
PlaySound tykitys
reload=20
asento=ObjectAngle(tankki)
CloneObjectOrientation tankki,tykki
MoveObject tankki,-35,0
RotateObject tankki,asento
'ammutaan, eli luodaan uusi pati
'monistamalla ladattu pati ja asettamalla
'se samaan paikkaan kuin ukko.
'ensin tarkastetaan, onko paikoja vapaana
For i=1 To 100
If AMMUS_ELOSSA(i)=OFF Then
'vapaa paikka löytyi, luodaan pati
AMMUS_ELOSSA(i)=ON
AMMUS_OBJ(i)=CloneObject(pati)
ShowObject AMMUS_OBJ(i),ON
'asetetaan pati samaan paikkaan
CloneObjectPosition AMMUS_OBJ(i),tykki
'käännetään pati samaan suuntaan
CloneObjectOrientation AMMUS_OBJ(i),tykki
MoveObject AMMUS_OBJ(i),9,0
'enempää paikka-tarkistuksia ei tarvita,
'joten voimme paeta silmukasta
Exit
EndIf
Next i
EndIf
Return 'palaa takaisin pääsilmukkaan
'-----------------------------------------------
PäivitäAmmukset:
'liikutetaan kaikkia ammuksia, ja katsotaan
'törmäävätkö ne oransseihin seiniin. Jos
'törmäävät, niin ne poistetaan ammuslistasta,
'ja paikka vapautuu uudelle ammukselle.
'käydään KAIKKI läpi
For i=1 To 100
If AMMUS_ELOSSA(i) Then
MoveObject AMMUS_OBJ(i),8
If ObjectX(AMMUS_OBJ(i))<-2520 Or ObjectX(AMMUS_OBJ(i))>2520 Or ObjectY(AMMUS_OBJ(i))<-2520 Or ObjectY(AMMUS_OBJ(i))>2500 Then
'vapauta paikka tyhjäksi
AMMUS_ELOSSA(i)=OFF
EndIf
EndIf
Next i
Return 'palaa takaisin pääsilmukkaan
LisääAmmus2:
If reload2 = 0 Then
reload2=20
For i=1 To 1000
If vih(i) Then MoveObject vih(i),-35,0
Next i
'ammutaan, eli luodaan uusi pati
'monistamalla ladattu pati ja asettamalla
'se samaan paikkaan kuin ukko.
'ensin tarkastetaan, onko paikoja vapaana
For i=1 To 100
For o=1 To 1000
If vih(o) Then
If AMMUS_ELOSSA2(i)=OFF Then
'vapaa paikka löytyi, luodaan pati
AMMUS_ELOSSA2(i)=ON
AMMUS_OBJ2(i)=CloneObject(pati)
ShowObject AMMUS_OBJ2(i),ON
'asetetaan pati samaan paikkaan
CloneObjectPosition AMMUS_OBJ2(i),vih(o)
'käännetään pati samaan suuntaan
CloneObjectOrientation AMMUS_OBJ2(i),vih(o)
MoveObject AMMUS_OBJ2(i),9,0
'enempää paikka-tarkistuksia ei tarvita,
'joten voimme paeta silmukasta
Exit
PlaySound tykitys
EndIf
EndIf
Next o
Next i
EndIf
Return 'palaa takaisin pääsilmukkaan
'-----------------------------------------------
PäivitäAmmukset2:
'liikutetaan kaikkia ammuksia, ja katsotaan
'törmäävätkö ne oransseihin seiniin. Jos
'törmäävät, niin ne poistetaan ammuslistasta,
'ja paikka vapautuu uudelle ammukselle.
'käydään KAIKKI läpi
For i=1 To 100
If AMMUS_ELOSSA2(i) Then
MoveObject AMMUS_OBJ2(i),8
If ObjectX(AMMUS_OBJ2(i))<-2520 Or ObjectX(AMMUS_OBJ2(i))>2520 Or ObjectY(AMMUS_OBJ2(i))<-2520 Or ObjectY(AMMUS_OBJ2(i))>2500 Then
'vapauta paikka tyhjäksi
AMMUS_ELOSSA2(i)=OFF
EndIf
EndIf
Next i
Return 'palaa takaisin pääsilmukkaan
luovihu:
p+1
vih(p)=CloneObject(vihu)
CloneObjectPosition vih(p),tankki
MoveObject vih(p),Rnd(-400,400),Rnd(-400,400)
PointObject vih(p),tankki
SetupCollision vih(p),k,1,4,2
SetupCollision vih(p),tankki,1,1,2
Return
päivitävihut:
For i = 1 TO 1000
If vih(i) Then
PointObject vih(i),tankki
MoveObject vih(i),4,0
For o = 1 To 100
If ObjectsOverlap(AMMUS_OBJ(o),vih(i)) Then
MoveObject vih(i),100000,100000
EndIf
Next o
EndIf
Next i
Return
-
- Active Member
- Posts: 170
- Joined: Mon Jun 23, 2008 9:04 pm
Re: ampumisongelma
Kopio tämä koodinpätkä projektiisi ennen drawscreeniä:
Katso miten muuttujat saavat erilaisia arvoja. Menevät aika hassusti, eikös
No, katso riviä 53. Siinä on syyllinen.
Luulen että haluaisit sen menevän jotenkin näin:
Tosin, LisääAmmus2-aliohjelmassa reload2 arvoksi asetataan 20?
Vihollisten ampumisesta huomasin sen, että ainoastaan yksi tankki näyttäisi ampuvan.
Huomautan vielä, että tyypeillä (oppitunti 18) projektisi olisi varmasti selkeämpää/helpompaa toteuttaa.
Code: Select all
DrawGame
Text 10,10,"reload: " + reload
Text 10,20,"reload2: " + reload2
No, katso riviä 53. Siinä on syyllinen.
Code: Select all
If reload2 = 0 Then reload=100 : Gosub LisääAmmus2
Code: Select all
If reload2 = 0 Then
Gosub LisääAmmus2
reload2=100
EndIf
Vihollisten ampumisesta huomasin sen, että ainoastaan yksi tankki näyttäisi ampuvan.
Huomautan vielä, että tyypeillä (oppitunti 18) projektisi olisi varmasti selkeämpää/helpompaa toteuttaa.
Väsyttää niin ettei jaksa edes mennä lepäämään.
-
- Newcomer
- Posts: 30
- Joined: Sat Feb 06, 2010 8:20 pm
Re: ampumisongelma
joo, kiitti! oma ampuminen alko toimia hyvin! mutta edelleen vaivaa tuo vastustajan ampuminen: kaikki vihut yrittää ampuu samaan aikaan. vihut tömähtävätkin taaksepäin kuin olisivat ampumassa, mutta panosta ei lähde. mikä vikana?
-
- Newcomer
- Posts: 30
- Joined: Sat Feb 06, 2010 8:20 pm
Re: ampumisongelma
sillä joku on ihan varmasti pielessä LisääAmmus2 :ssa, joka säätelee kaikkien vihujen ampumista.
nytkähdys siis toimii, mutta sitten tulee joku ongelma. mikäköhän olisi???
nytkähdys siis toimii, mutta sitten tulee joku ongelma. mikäköhän olisi???
-
- Newcomer
- Posts: 30
- Joined: Sat Feb 06, 2010 8:20 pm
Re: ampumisongelma
vielä on joku pikkujuttu kun noi vihut ei ammu kunnolla!
Last edited by cbaloittelija on Thu Feb 11, 2010 7:07 am, edited 1 time in total.
-
- Advanced Member
- Posts: 308
- Joined: Tue Nov 25, 2008 8:06 pm
- Contact:
Re: ampumisongelma
Joo, phpBB3 :n foorumeilla on sellainen MAHTAVA, MULLISTAVA ettei jopa YLILUONNOLLINEN näppäin, jossa lukee ""EDIT"
Opetteles käyttämään sitä, ettet postaile aina uutta...
Opetteles käyttämään sitä, ettet postaile aina uutta...
Alussa oli asiakas, projekti ja Koodari...
[/size]
Code: Select all
[23:36:33] <Minixmix> jos nyt viel yhen lastin heittäis
[23:36:48] <Minixmix> Sit loput vois hoitaa kännyllä :/
[00:14:49] <Minixmix> mutta nyt tyhjennykselle ->