ampumisongelma

Voit pyytää apua ohjelmointiongelmiin täältä.
Post Reply
cbaloittelija
Newcomer
Posts: 30
Joined: Sat Feb 06, 2010 8:20 pm

ampumisongelma

Post by cbaloittelija »

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
Last edited by cbaloittelija on Wed Feb 10, 2010 3:07 pm, edited 1 time in total.
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: ampumisongelma

Post by Awaclus »

En nyt viitsi ladata pakettia, mutta veikkaisin, että sinulla on siellä näin:

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
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

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
cbaloittelija
Newcomer
Posts: 30
Joined: Sat Feb 06, 2010 8:20 pm

Re: ampumisongelma

Post by cbaloittelija »

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)

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



KankiKalle
Active Member
Posts: 170
Joined: Mon Jun 23, 2008 9:04 pm

Re: ampumisongelma

Post by KankiKalle »

Kopio tämä koodinpätkä projektiisi ennen drawscreeniä:

Code: Select all

DrawGame 
Text 10,10,"reload: " + reload
Text 10,20,"reload2: " + reload2
Katso miten muuttujat saavat erilaisia arvoja. Menevät aika hassusti, eikös :D

No, katso riviä 53. Siinä on syyllinen.

Code: Select all

If reload2 = 0 Then reload=100 : Gosub LisääAmmus2
Luulen että haluaisit sen menevän jotenkin näin:

Code: Select all

If reload2 = 0 Then 
    Gosub LisääAmmus2
    reload2=100 
EndIf 
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.
Väsyttää niin ettei jaksa edes mennä lepäämään.
cbaloittelija
Newcomer
Posts: 30
Joined: Sat Feb 06, 2010 8:20 pm

Re: ampumisongelma

Post by cbaloittelija »

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?
cbaloittelija
Newcomer
Posts: 30
Joined: Sat Feb 06, 2010 8:20 pm

Re: ampumisongelma

Post by cbaloittelija »

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???
cbaloittelija
Newcomer
Posts: 30
Joined: Sat Feb 06, 2010 8:20 pm

Re: ampumisongelma

Post by cbaloittelija »

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.
Herra Siili
Advanced Member
Posts: 308
Joined: Tue Nov 25, 2008 8:06 pm
Contact:

Re: ampumisongelma

Post by Herra Siili »

Muokkaa, muokkaa...
a.k.a. Gehock
User avatar
Koodari
Active Member
Posts: 201
Joined: Wed Nov 18, 2009 9:01 pm
Contact:

Re: ampumisongelma

Post by Koodari »

Joo, phpBB3 :n foorumeilla on sellainen MAHTAVA, MULLISTAVA ettei jopa YLILUONNOLLINEN näppäin, jossa lukee ""EDIT" :D
Opetteles käyttämään sitä, ettet postaile aina uutta...
Alussa oli asiakas, projekti ja Koodari...

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 ->
[/size]
Post Reply