Kloonattu ammus, kuinka toimii?

Voit pyytää apua ohjelmointiongelmiin täältä.
Post Reply
User avatar
TukeKoodi
Active Member
Posts: 142
Joined: Thu Feb 03, 2011 7:40 pm
Location: C:\Työpöytä

Kloonattu ammus, kuinka toimii?

Post by TukeKoodi »

Epäselvä otsikko, anteeks.
Joo mutta, pitäis saada kloonattu objekti vahingoittamaan pelaajaa.
Olen kokeillut kaikkia mahdollisia keinoja.
Sekä (huonolla) botilla ja pelaajalla on kyllä helttimuuttuja, mutta miten esim. ObjectsOverLapin saa toimimaan kloonatun ammuksen kanssa? Koodi alla.

Code: Select all

Errors ON

sisään:
Repeat
nimi$=Input("ID: ")
DrawScreen
Until KeyHit(28)
CloseInput
AddText nimi

Locate 0,20

Repeat
salasana$=Input("Salasana: ","*")
DrawScreen
Until KeyHit(28)

ClearText

If nimi$="pelaaja342" And salasana$="testikoodi"

Locate 0,0
AddText "Tervetuloa, Pelaaja342"

Repeat 

    DrawScreen
Until KeyHit (28)
ClearText
Goto alku
End

Else

Color cbRed
Locate 0,0
AddText "Väärä tunnus tai salasana"
Repeat

DrawScreen
Until EscapeKey()
Goto sisään
EndIf
alku:
SCREEN 640, 480

Type AMMUS
    Field obj
End Type

Type AMMUS2
    Field obj2 
End Type

FrameLimit 40


ukko1 = LoadObject ("Media\guy.bmp",72)
botti = LoadObject ("Media\guy.bmp",72)
pati = LoadObject ("Media\bullet.bmp")
pati2 = LoadObject ("Media\bullet.bmp")
ShowObject pati,OFF
ShowObject pati2,OFF
//Ukkojen kulma oikein
RotateObject ukko1,0
RotateObject botti,180

//Ukot alkupaikkoihin
PositionObject ukko1,-150,100
PositionObject botti,150,-100

SetupCollision ukko1, botti, 2,2,2
SetupCollision botti, ukko1, 2,2,2

health1=100
health2=100
//Törmäys
Repeat
Color cbWhite
Text 0,0, "Ukko1 Health: "+health1
Text 0,20, "Botti Health: "+health2
If health2=<1 Then MakeError "Kuolit."

MoveObject botti, 1.2

    'Ukon 1 ohjaus
    If LeftKey() Then TurnObject ukko1,5
    If RightKey() Then TurnObject ukko1,-5
    If UpKey() Then MoveObject ukko1,3
    If DownKey() Then MoveObject ukko1,-3

    'Ukon 2 ohjaus
    If ObjectSight (botti, ukko1) Then PointObject botti, ukko1
   

    





 'Ammu-systeemi. Vain, jos ase on ladattu
    If KeyHit(cbKeyRControl) And reload=0 Then    
      
      luoti.AMMUS = New(AMMUS) 'luo uusi ammus
       
       luoti\obj=CloneObject(pati) 'tee klooni
        'asetetaan pati samaan paikkaan
        CloneObjectPosition luoti\obj,ukko1                
        'käännetään pati samaan suuntaan
        CloneObjectOrientation luoti\obj,ukko1           
        reload=10 'aseen lataus        
    EndIf

    If reload>0 Then reload=reload-1


    For luoti.AMMUS = Each AMMUS
        MoveObject luoti\obj,7
        If ObjectX(luoti\obj)<-320 Or ObjectX(luoti\obj)>320 Or ObjectY(luoti\obj)<-240 Or ObjectY(luoti\obj)>240 
                      
            DeleteObject luoti\obj 
            Delete luoti 
        EndIf        
    Next luoti
       

//=================================================//


    If ObjectSight (botti, ukko1) And reload=0 Then    
        luoti2.AMMUS2 = New(AMMUS2) 'luo uusi ammus
        luoti2\obj2=CloneObject(pati2) 'tee klooni
        SetupCollision luoti2\obj2, ukko1, 2,2,2
        'asetetaan pati samaan paikkaan
         a=ObjectsOverlap(luoti2\obj2, ukko1)        
        
        CloneObjectPosition luoti2\obj2, botti              
        'käännetään pati samaan suuntaan
        CloneObjectOrientation luoti2\obj2, ukko1          
        reload=20 'aseen lataus        
    EndIf
   
 If a Then
health1=health1 -10
EndIf  
   'päivitä aseen lataaminen
    If reload>0 Then reload=reload-1

    'Päivitä kaikki ammukset
    For luoti2.AMMUS2 = Each AMMUS2
        MoveObject luoti2\obj2,7
        If ObjectX(luoti2\obj2)<-320 Or ObjectX(luoti2\obj2)>320 Or ObjectY(luoti2\obj2)<-240 Or ObjectY(luoti2\obj2)>240 Then
            'ammus ylittää rajan -> tuhoa se                
            DeleteObject luoti2\obj2 'poista objekti
            Delete luoti2 'poista luoti kokonaan
        EndIf        
    Next luoti2









    'Älä päästä ukkoa 1 seinien ulkopuolelle
    If ObjectX(ukko1)<-320 Then PositionObject ukko1,-320,ObjectY(ukko1)
    If ObjectX(ukko1)>320 Then PositionObject ukko1,320,ObjectY(ukko1)
    If ObjectY(ukko1)<-240 Then PositionObject ukko1,ObjectX(ukko1),-240
    If ObjectY(ukko1)>240 Then PositionObject ukko1,ObjectX(ukko1),240
    
    'Älä päästä ukkoa 2 seinien ulkopuolelle
    If ObjectX(botti)<-320 Then PositionObject botti,-320,ObjectY(botti)
    If ObjectX(botti)>320 Then PositionObject botti,320,ObjectY(botti)
    If ObjectY(botti)<-240 Then PositionObject botti,ObjectX(botti),-240
    If ObjectY(botti)>240 Then PositionObject botti,ObjectX(botti),240
   DrawScreen
Until EscapeKey()
Aloittelija, koodaaja, jotain...
CbFUN :D
Latexi95
Guru
Posts: 1166
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: Kloonattu ammus, kuinka toimii?

Post by Latexi95 »

Sinähän tarkistat ammuksen osumisen vain sen jälkeen, kun se on luotu. Siirrä vain ObjectsOverlap johonkin For-Each silmukkaan.
User avatar
TukeKoodi
Active Member
Posts: 142
Joined: Thu Feb 03, 2011 7:40 pm
Location: C:\Työpöytä

Re: Kloonattu ammus, kuinka toimii?

Post by TukeKoodi »

Jes, kiitti tosi paljon. Laitoin tuon osumisen tarkistuksen For...Each silmukkaan ja toimi. Nyt pääsi projekti ison askeleen eteenpäin. Kiitos.
Aloittelija, koodaaja, jotain...
CbFUN :D
User avatar
Koodari
Active Member
Posts: 201
Joined: Wed Nov 18, 2009 9:01 pm
Contact:

Re: Kloonattu ammus, kuinka toimii?

Post by Koodari »

Vinkkinä vielä, että sisennä koodisi selvästi, kun se on vielä lyhyt. Auttaa paljon mahdollisten ongelmien ratkaisussa, bugien etsinnässä ja mysteerimavien paikantamisessa. :)
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]
User avatar
TukeKoodi
Active Member
Posts: 142
Joined: Thu Feb 03, 2011 7:40 pm
Location: C:\Työpöytä

Re: Kloonattu ammus, kuinka toimii?

Post by TukeKoodi »

Nyt ilmeni 2. ongelma. Kun laitan botin healthille ehdon, jossa botti poisetetaan (DeleteObject) kun health on <1.
Kun olen ampunut bottia tarpeeksi monta kertaa, (kunnes health=0) tulee MAV. Mistä ihmeestä tämä voi johtua?
Täytyykö minun tehdä healhttarkistukselle ja botin poistamiselle oma silmukka?
Tässä koodi: (jokaisella patilla ja botilla on oma tyyppinsä ja objektinsa, koska grafiikat tulee muttumaan)

Code: Select all

Errors ON

sisään:
Repeat
nimi$=Input("ID: ")
DrawScreen
Until KeyHit(28)
CloseInput
AddText nimi

Locate 0,20

Repeat
salasana$=Input("Salasana: ","*")
DrawScreen
Until KeyHit(28)

ClearText

If nimi$="pelaaja342" And salasana$="testikoodi"

Locate 0,0
AddText "Tervetuloa, Pelaaja342"

Repeat 

    DrawScreen
Until KeyHit (28)
ClearText
Goto alku
End

Else

Color cbRed
Locate 0,0
AddText "Väärä tunnus tai salasana"
Repeat

DrawScreen
Until EscapeKey()
Goto sisään
EndIf
alku:
SCREEN 640, 480

Type AMMUS
    Field obj
End Type

Type AMMUS2
    Field obj2 
End Type

Type AMMUS3
    Field obj3
End Type

//Rajoitetaan nopeus
FrameLimit 40

//Ladataan mappi


ukko1 = LoadObject ("Media\soldier.bmp",72)

botti = LoadObject ("Media\guy.bmp",72)

botti2 = LoadObject ("Media\guy.bmp",72)

//======================================

pati = LoadObject ("Media\bullet.bmp")

pati2 = LoadObject ("Media\bullet.bmp")

pati3 = LoadObject ("Media\bullet.bmp")


ShowObject pati,OFF
ShowObject pati2,OFF
//Ukkojen kulma oikein
RotateObject ukko1,0
RotateObject botti,180
RotateObject botti2,180
//Ukot alkupaikkoihin

//PositionObject botti, 0,50
//PositionObject ukko, 0,-50

pisteet=0

SetupCollision ukko1, botti, 2,2,2
SetupCollision botti, ukko1, 2,2,2

SetupCollision ukko1, botti2, 2,2,2
SetupCollision botti2, ukko1, 2,2,2

SetupCollision botti, botti2, 2,2,2
SetupCollision botti2, botti, 2,2,2
//==============================

PositionObject ukko1, 0,100
PositionObject botti, 0,-100
PositionObject botti2, 200,100
health1=100
health2=100
health3=100
//Törmäys
Repeat
angle=GetAngle2(botti, ukko1)
Color cbWhite
Text 0,0, "Ukko1 Health: "+health1
Text 0,20, "Botti Health: "+health2
Text 0,40, "Botti2 Health: "+health2
Text 0,60, "Pisteet: "+pisteet



If health2=<1 And health3=<1 Then MakeError "Sinä tapoit Botin! Voitit!"
If health1=<1 Then MakeError "Botti tappoi sinut. Hävisit"

If health2=<1 Then pisteet=pisteet+200
If health3=<1 Then pisteet=pisteet+200

If health2=<1 Then DeleteObject botti
If health3=<1 Then DeleteObject botti2

MoveObject botti, 1.2
MoveObject botti2, 1.2
 
 'Ukon 1 ohjaus
    If LeftKey() Then TurnObject ukko1,5
    If RightKey() Then TurnObject ukko1,-5
    If UpKey() Then MoveObject ukko1,3
    If DownKey() Then MoveObject ukko1,-3

    'Ukon 2 ohjaus
    If ObjectSight (botti, ukko1) Then PointObject botti, ukko1
   
    
    If ObjectSight (botti2, ukko1) Then PointObject botti2, ukko1


 'Ammu-systeemi. Vain, jos ase on ladattu
    If KeyDown(cbKeyRControl) And reload=0 Then    
      
      luoti.AMMUS = New(AMMUS) 'luo uusi ammus
       
       luoti\obj=CloneObject(pati) 'tee klooni
        'asetetaan pati samaan paikkaan
        CloneObjectPosition luoti\obj,ukko1                
        'käännetään pati samaan suuntaan
        CloneObjectOrientation luoti\obj,ukko1           
        reload=6 'aseen lataus        
    EndIf

    If reload>0 Then reload=reload-1


    For luoti.AMMUS = Each AMMUS
        MoveObject luoti\obj,7
        If ObjectX(luoti\obj)<-320 Or ObjectX(luoti\obj)>320 Or ObjectY(luoti\obj)<-240 Or ObjectY(luoti\obj)>240 
                      
            DeleteObject luoti\obj 
            Delete luoti 
        EndIf        
    Next luoti
       
    For luoti.AMMUS = Each AMMUS
        If ObjectsOverlap (luoti\obj, botti) Then
            health2=health2 -5           
            DeleteObject luoti\obj 'poista objekti
            Delete luoti 'poista luoti kokonaan
        EndIf        
    Next luoti

    For luoti.AMMUS = Each AMMUS
        If ObjectsOverlap (luoti\obj, botti) Then           
            DeleteObject luoti\obj 'poista objekti
            Delete luoti 'poista luoti kokonaan
        EndIf        
    Next luoti
    
    
//=================================================//
//=================================================//
//=================================================//

    If ObjectSight (botti, ukko1) And reload2=0 Then    
        luoti2.AMMUS2 = New(AMMUS2) 'luo uusi ammus
        luoti2\obj2=CloneObject(pati2) 'tee klooni
        SetupCollision luoti2\obj2, ukko1, 2,2,2
        'asetetaan pati samaan paikkaan      
        
        CloneObjectPosition luoti2\obj2, botti              
        'käännetään pati samaan suuntaan
        CloneObjectOrientation luoti2\obj2, ukko1          
        reload2=25 'aseen lataus        
    EndIf
    
   'päivitä aseen lataaminen
    If reload2>0 Then reload2=reload2-1

    'Päivitä kaikki ammukset
    For luoti2.AMMUS2 = Each AMMUS2
        MoveObject luoti2\obj2,7
        If Distance2 (luoti2\obj2, botti)>400 Then 
            'ammus ylittää rajan -> tuhoa se                
            DeleteObject luoti2\obj2 'poista objekti
            Delete luoti2 'poista luoti kokonaan
        EndIf        
    Next luoti2
    

    For luoti2.AMMUS2 = Each AMMUS2
        If ObjectsOverlap (luoti2\obj2, ukko1) Then
            health1=health1 -5           
            DeleteObject luoti2\obj2 'poista objekti
            Delete luoti2 'poista luoti kokonaan
        EndIf        
    Next luoti2

   For luoti2.AMMUS2 = Each AMMUS2
        If ObjectsOverlap (luoti2\obj2, ukko1) Then         
            DeleteObject luoti2\obj2 'poista objekti
            Delete luoti2 'poista luoti kokonaan
        EndIf        
    Next luoti2

   For luoti2.AMMUS2 = Each AMMUS2
        If ObjectsOverlap (luoti2\obj2, ukko1) Then         
            pisteet=pisteet+15
            DeleteObject luoti2\obj2 'poista objekti
            Delete luoti2 'poista luoti kokonaan
        EndIf        
    Next luoti2

'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1


    If ObjectSight (botti2, ukko1) And reload2=0 Then    
        luoti3.AMMUS3 = New(AMMUS3) 'luo uusi ammus
        luoti3\obj3=CloneObject(pati3) 'tee klooni
        SetupCollision luoti3\obj3, ukko1, 2,2,2
        'asetetaan pati samaan paikkaan      
        
        CloneObjectPosition luoti3\obj3, botti2              
        'käännetään pati samaan suuntaan
        CloneObjectOrientation luoti3\obj3, ukko1          
        reload2=25 'aseen lataus        
    EndIf
    
   'päivitä aseen lataaminen
    If reload2>0 Then reload2=reload2-1

    'Päivitä kaikki ammukset
    For luoti3.AMMUS3 = Each AMMUS3
        MoveObject luoti3\obj3,7
        If Distance2 (luoti3\obj3, botti)>400 Then 
            'ammus ylittää rajan -> tuhoa se                
            DeleteObject luoti3\obj3 'poista objekti
            Delete luoti3 'poista luoti kokonaan
        EndIf        
    Next luoti3
    

    For luoti3.AMMUS3 = Each AMMUS3
        If ObjectsOverlap (luoti3\obj3, ukko1) Then
            health1=health1 -5           
            DeleteObject luoti3\obj3 'poista objekti
            Delete luoti3 'poista luoti kokonaan
        EndIf        
    Next luoti3

   For luoti3.AMMUS3 = Each AMMUS3
        If ObjectsOverlap (luoti3\obj3, ukko1) Then         
            DeleteObject luoti3\obj3 'poista objekti
            Delete luoti3 'poista luoti kokonaan
        EndIf        
    Next luoti3

   For luoti3.AMMUS3 = Each AMMUS3
        If ObjectsOverlap (luoti3\obj3, ukko1) Then         
            pisteet=pisteet+15
            DeleteObject luoti3\obj3 'poista objekti
            Delete luoti3 'poista luoti kokonaan
        EndIf        
    Next luoti3
 

   DrawScreen
Until EscapeKey()
Aloittelija, koodaaja, jotain...
CbFUN :D
Latexi95
Guru
Posts: 1166
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: Kloonattu ammus, kuinka toimii?

Post by Latexi95 »

Sinä koitat liikuttaa botteja vielä senkin jälkeen kun ne on poistettu... Lisää siihen tarkistus että botteja liikutetaan vain jos niillä on elkkuja. Sama juttu bottejen ammunan tarkistuksessa.
Post Reply