Aseiden vaihto

Voit pyytää apua ohjelmointiongelmiin täältä.
Post Reply
User avatar
wilizucoder
Member
Posts: 81
Joined: Sat Sep 08, 2007 11:24 pm
Location: Espoo
Contact:

Aseiden vaihto

Post by wilizucoder »

Eli ongelmana on se, että kun aseenvaihtonäppäimestä vaihtaa vaan luodit, mutta ukon kuva vaihtuu vasta, kun on painanut ampumisnäppäintä. Miten tämän voisi korjata niin, että kun painaa pelkkää aseenvaihtonappia, sekä luodit, että ukon kuva muuttuu?

Koodi:

Code: Select all

Type AMMUS
Field id 
Field obj
End Type

FrameLimit 40
SCREEN 800,600

Global hiiritähtäys
hiiritähtäys = True

tausta=MakeObjectFloor 
kuva=LoadImage("media\grass.bmp")
PaintObject tausta,kuva

ukko1=LoadObject("media\guy.bmp",72)
ShowObject ukko1,OFF 
ukko2=LoadObject("media\soldier.bmp",72)
ShowObject ukko2,OFF 
apuobj=MakeObject()

master=CloneObject(ukko1)

pati=LoadObject("media\bullet.bmp",72)
ShowObject pati, OFF

tähtäin = LoadObject("media\target.bmp")

panokset1=15
panokset2=30

ASE=0


Repeat 


CloneObjectPosition master,apuobj

If hiiritähtäys = True Then //tarkistetaan onko hiiritähtäys päällä            
    PositionObject tähtäin, MouseWX(), MouseWY()//sijoitetaan tähtäinobjekti hiiren kohdalle            
    PointObject master, tähtäin
EndIf

If KeyDown(cbkeyW) Then MoveObject apuobj,0,-4
If KeyDown(cbkeyS) Then MoveObject apuobj,0,4
If KeyDown(cbkeyA) Then MoveObject apuobj,-4
If KeyDown(cbkeyD) Then MoveObject apuobj,4

If ObjectX(apuobj)<-400 Then PositionObject apuobj,-400,ObjectY(apuobj)
If ObjectX(apuobj)>400 Then PositionObject apuobj,400,ObjectY(apuobj)
If ObjectY(apuobj)<-300 Then PositionObject apuobj,ObjectX(apuobj),-300
If ObjectY(apuobj)>300 Then PositionObject apuobj,ObjectX(apuobj),300


If MouseHit(2) Then ASE=Not ASE 


If MouseDown(1) And reload=0 Then
    Select ASE
      Case 0
        PaintObject master,ukko1
        If panokset1>0 Then
            panokset1-1
            luoti.AMMUS = New(AMMUS)
            luoti\id=0
            luoti\obj=CloneObject(pati)      
            CloneObjectPosition luoti\obj,master                
            CloneObjectOrientation luoti\obj,master
            ResetObjectCollision luoti\obj
            MoveObject luoti\obj,5,-3
            TurnObject luoti\obj,Rand(1,-1)
            reload=15
        Else 
            reload=50
            If Timer()>lataus+600 Then 
                valmis=Not valmis 
                lataus=Timer()
            EndIf
            If valmis Then 
                panokset1=15   
            EndIf     
        EndIf
      Case 1
        PaintObject master,ukko2
        If panokset2>0 Then
            panokset2-1
            luoti.AMMUS = New(AMMUS)
            luoti\id=1
            luoti\obj=CloneObject(pati)      
            CloneObjectPosition luoti\obj,master                
            CloneObjectOrientation luoti\obj,master
            ResetObjectCollision luoti\obj
            MoveObject luoti\obj,3,0
            TurnObject luoti\obj,Rand(3,-3)
            reload=6
        Else 
            reload=40
            If Timer()>lataus+500 Then 
                valmis=Not valmis 
                lataus=Timer()
            EndIf
            If valmis Then 
                panokset2=30   
            EndIf     
        EndIf
      EndSelect   
    EndIf

If reload>0 Then reload=reload-1

    For luoti.AMMUS = Each AMMUS
        Select luoti\id
          Case 0
            MoveObject luoti\obj,25
            If Distance2(luoti\obj,master)>800 Then            
                DeleteObject luoti\obj 'poista objekti
                Delete luoti 'poista luoti kokonaan
            EndIf 
          Case 1
            MoveObject luoti\obj,30
            If Distance2(luoti\obj,master)>800 Then            
                DeleteObject luoti\obj 'poista objekti
                Delete luoti 'poista luoti kokonaan
            EndIf
        End Select  
    Next luoti


DrawScreen 
Forever
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Aseiden vaihto

Post by Jonez »

Vaikka tähän tyyliin (huomaa, että koodi ei toimi itsessään mitenkään. Se on vain suuntaa antava)

Code: Select all

if ase = 1 then
    luotiKuva = luoti1
    ukkoVasen = ukkoVasen1
    ukkoOikea = ukkoOikea1
    ukkoAmpuu = ukkoAmpuu1
    ukkoHyppää = ukkoHyppää1
elseif ase = 2 then
    luotiKuva = luoti2
    ukkoVasen = ukkoVasen2
    ukkoOikea = ukkoOikea2
    ukkoAmpuu = ukkoAmpuu2
    ukkoHyppää = ukkoHyppää2
endif

if leftkey() then
    xSuunta = -3
    paintObject ukko, UkkoVasen
elseif rightkey() then
    xSuunta = 3
    paintObject ukko, UkkoOikea
elseif upkey() then
    ySuunta# = 4
    maassa = false
    paintobject ukko, UkkoHyppää
endif

if keydown( cbkeyspace ) then
     ammu()
    painobject ukko, ukkoAmpuu
endif

translateobject ukko, xSuunta, ySuunta
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
User avatar
wilizucoder
Member
Posts: 81
Joined: Sat Sep 08, 2007 11:24 pm
Location: Espoo
Contact:

Re: Aseiden vaihto

Post by wilizucoder »

Kiitos, yritämpä saada sovellettua tuota omaan koodiini.
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: Aseiden vaihto

Post by Koodiapina »

Itseäni on hyödyttänyt käyttää vakioita osana tilanteita kuten tämä. Jostain luin, että vakiot eivät veisi muistia, mutta en voi vahvistaa tätä väitettä. Näin ollen on helpompi muistaa mistä aseesta oli kysymys:

Code: Select all

Const Ei_ASETTA = 0
Const KIVÄÄRI = 1
Const KONEKIVÄÄRI = 2
Const PISTOOLI = 3

Dim Ase As integer
Ase = Rand(3)

While True
    Select Ase
    Case KIVÄÄRI
        'koodi
    Case KONEKIVÄÄRI
        'koodi
    Case PISTOOLI
        'koodi
    Default    'EI_ASETTA
        'koodi
    EndSelect
    DrawScreen
Wend
User avatar
wilizucoder
Member
Posts: 81
Joined: Sat Sep 08, 2007 11:24 pm
Location: Espoo
Contact:

Re: Aseiden vaihto

Post by wilizucoder »

Entä mitenkä se ukon kuvan vaihto onnistuisi, samalla, kun asetta vaihdetaan?
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: Aseiden vaihto

Post by Koodiapina »

Jos käytät objekteja, käytä komentoa PaintObject. Ohjeet käyttöön löytyy tietenkin manuaalista.
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: Aseiden vaihto

Post by esa94 »

Grandi wrote:Jostain luin, että vakiot eivät veisi muistia, mutta en voi vahvistaa tätä väitettä.
Näin pikaisena offtopiccina: Vakiot eivät käsittääkseni vie muistia, koska ne jo käännösvaiheessa korvataan varsinaisilla arvoillaan. Tosin en minäkään voi tätä vahvistaa.
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: Aseiden vaihto

Post by MaGetzUb »

Jos ongelmana on ukon kuvan vaihto kun vaihtaa aseen, niin itse teen näin:
oldase = ase
If oldase<>ase then Paintobject Ukko,UkkoAse(ase)
ase = ase + Mousemovez()

(huomaa ukon aseitten pitely kuvat on dimmattu)
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
Post Reply