Keinotekoinen törmäystunnistus ei pelitä

Voit pyytää apua ohjelmointiongelmiin täältä.
Post Reply
User avatar
Ruuttu
Devoted Member
Posts: 687
Joined: Thu Aug 30, 2007 5:11 pm
Location: Finland, Sipoo

Keinotekoinen törmäystunnistus ei pelitä

Post by Ruuttu » Sat Sep 22, 2007 3:21 pm

Elikkäs päätettiin kasata pelin maasto pienistä objekteista, ja sitten objectsoverlappia
käyttäen luoda törmäystunnistus. Tällä hetkellä kuvassa näkyy vain maa ja sen päällä kaksi rengasta,
joita ohjataan nuolinäppäimillä. Törmäyksentunnistuksessa on ongelmia, elikkäs renkaat tärisevät aivan hillittömästi.
Miten renkaat saisi lopettamaan tärinänsä? Kaikkea on kokeiltu, ja lopputulos oli että renkaat putosivat maan läpi.

Tässä paketissa tulee mukana maastopalat ja renkaat, sekä lähdekoodi.
Game#1.zip
(236.16 KiB) Downloaded 109 times
Apu olisi tervetullutta.

User avatar
Basic
Newcomer
Posts: 25
Joined: Tue Aug 28, 2007 3:34 pm
Location: Siellä jossain kaukana.
Contact:

Re: Keinotekoinen törmäystunnistus ei pelitä

Post by Basic » Sat Sep 22, 2007 8:47 pm

Noh, vikahan oli siinä että joka ruudussa renkaita laitettiin alaspäin 8 pikseliä, ja sitten perään nostettiin niitä. Kun gravityn vaihtoi ykköseksi niin tärinä väheni 1 pikseliin, vaikkakin tiputusnopeus väheni. Tässä koodi:

Code: Select all

SCREEN 1024,768
SetWindow "Ajo-ominaisuus testi 001"

//MAASTO
Type MAASTO
    Field obj
End Type

gravity=1
FrameLimit 50

ClsColor 0,164,255

tasamaasto=LoadObject("data/maasto1.png")
loivamäki=LoadObject("data/maasto2.png")
loivamäki2=LoadObject("data/maasto3.png")
pyörä=LoadObject("Data/bike1.bmp")
rengas1=LoadObject("Data/bikewheel1.bmp",50)
rengas2=CloneObject(rengas1)

//TEHDÄÄN MAASTO
newmaasto.MAASTO= New(MAASTO)
newmaasto\obj=CloneObject(tasamaasto)
PositionObject newmaasto\obj,-900,0

newmaasto.MAASTO= New(MAASTO)
newmaasto\obj=CloneObject(tasamaasto)
PositionObject newmaasto\obj,-600,0

newmaasto.MAASTO= New(MAASTO)
newmaasto\obj=CloneObject(tasamaasto)
PositionObject newmaasto\obj,-300,0

newmaasto.MAASTO= New(MAASTO)
newmaasto\obj=CloneObject(loivamäki)
PositionObject newmaasto\obj,0,33

newmaasto.MAASTO= New(MAASTO)
newmaasto\obj=CloneObject(loivamäki)
PositionObject newmaasto\obj,293,99

newmaasto.MAASTO= New(MAASTO)
newmaasto\obj=CloneObject(tasamaasto)
PositionObject newmaasto\obj,593,132

ShowObject tasamaasto,OFF
ShowObject loivamäki,OFF
ShowObject loivamäki2,OFF

PositionObject rengas1,-280,200
PositionObject rengas2,-100,200

rengas1col=0
rengas2col=0

'Looppi alkaa
Repeat

    //Kontrollit
    If LeftKey() And rengas1col=1 Then 
    TranslateObject rengas1,-5,0
    TurnObject rengas1,5
    TurnObject rengas2,5
    End If
    
    If RightKey() and rengas1col=1 Then 
    TranslateObject rengas1,5,0
    TurnObject rengas1,-5
    TurnObject rengas2,-5
    End If
    
    PositionObject rengas2,ObjectX(rengas1)-180,ObjectY(rengas2)

    rengas1col=0
    rengas2col=0

    //KÄYDÄÄN JOKAINEN MAASTOPALA LÄPI JA KATSOTAAN OSUUKO RENGAS NIIHIN
    For maastopala.MAASTO = Each MAASTO
    //oletusarvo että tarkastettava maapala on ruudun sisällä
    inscreen=1

    //tarkastetaan onko maapala ruudun sisällä
    If ObjectX(maastopala\obj)=<CameraX()-1024 Then inscreen=0
    If ObjectX(maastopala\obj)=>CameraX()+1024 Then inscreen=0

    //jos maapala on ruudun sisällä suoritetaan törmäystarkistus
    If inscreen=1 Then
    If ObjectsOverlap(rengas1,maastopala\obj,3)=1 Then rengas1col=1
    If ObjectsOverlap(rengas2,maastopala\obj,3)=1 Then rengas2col=1
    End If

    Next maastopala

    //jos renkaat ovat ilmassa siirretään niitä alemmas painovoiman verran
    If rengas1col=0 Then
    TranslateObject rengas1,0,-gravity
    End If
    
    If rengas2col=0 Then
    TranslateObject rengas2,0,-gravity
    End If
    
    //Jos renkaat osuvat mahan siirretään niitä ylemmäs
    If rengas1col=1 Then
    TranslateObject rengas1,0,1
    End If
    
    If rengas2col=1 Then
    TranslateObject rengas2,0,1
    End If
 
    
    CloneCameraPosition rengas1

DrawScreen
Forever



Image

User avatar
Valtzu
Active Member
Posts: 115
Joined: Sun Aug 26, 2007 2:40 pm
Location: Sauvo
Contact:

Re: Keinotekoinen törmäystunnistus ei pelitä

Post by Valtzu » Sat Sep 22, 2007 9:53 pm

Code: Select all

SCREEN 1024,768
SetWindow "Ajo-ominaisuus testi 001"

//MAASTO
Type MAASTO
    Field obj
End Type

gravity=1
FrameLimit 50

ClsColor 0,164,255

tasamaasto=LoadObject("data/maasto1.png")
loivamäki=LoadObject("Data/maasto2.png")
loivamäki2=LoadObject("data/maasto3.png")
pyörä=LoadObject("Data/bike1.bmp")
rengas1=LoadObject("Data/bikewheel1.bmp",50)
rengas2=CloneObject(rengas1)

//TEHDÄÄN MAASTO
newmaasto.MAASTO= New(MAASTO)
newmaasto\obj=CloneObject(tasamaasto)
PositionObject newmaasto\obj,-1200,0

newmaasto.MAASTO= New(MAASTO)
newmaasto\obj=CloneObject(tasamaasto)
PositionObject newmaasto\obj,-900,0

newmaasto.MAASTO= New(MAASTO)
newmaasto\obj=CloneObject(tasamaasto)
PositionObject newmaasto\obj,-600,0

newmaasto.MAASTO= New(MAASTO)
newmaasto\obj=CloneObject(tasamaasto)
PositionObject newmaasto\obj,-300,0

newmaasto.MAASTO= New(MAASTO)
newmaasto\obj=CloneObject(loivamäki)
PositionObject newmaasto\obj,0,33

newmaasto.MAASTO= New(MAASTO)
newmaasto\obj=CloneObject(loivamäki)
PositionObject newmaasto\obj,293,99

newmaasto.MAASTO= New(MAASTO)
newmaasto\obj=CloneObject(tasamaasto)
PositionObject newmaasto\obj,593,132

ShowObject tasamaasto,OFF
ShowObject loivamäki,OFF
ShowObject loivamäki2,OFF

PositionObject rengas1,-280,200
PositionObject rengas2,-100,200

rengas1col=0
rengas2col=0

'Looppi alkaa
Repeat

    //Kontrollit
    If LeftKey() And rengas1col=1 Then 
        TranslateObject rengas1,-5,0
        TurnObject rengas1,5
        TurnObject rengas2,5
    End If
    
    If RightKey() and rengas1col=1 Then 
        TranslateObject rengas1,5,0
        TurnObject rengas1,-5
        TurnObject rengas2,-5
    End If
    
    PositionObject rengas2,ObjectX(rengas1)-180,ObjectY(rengas2)

    rengas1col=0
    rengas2col=0

    //KÄYDÄÄN JOKAINEN MAASTOPALA LÄPI JA KATSOTAAN OSUUKO RENGAS NIIHIN
    cx=CameraX()
    For maastopala.MAASTO = Each MAASTO
        //oletusarvo että tarkastettava maapala on ruudun sisällä
        
        //tarkastetaan onko maapala ruudun sisällä
        ox=ObjectX(maastopala\obj)
    
        //jos maapala on ruudun sisällä suoritetaan törmäystarkistus
        If 1 Then
            If ObjectsOverlap(rengas1,maastopala\obj,3)=1 Then rengas1col=1
            If ObjectsOverlap(rengas2,maastopala\obj,3)=1 Then rengas2col=1
            //jos renkaat ovat ilmassa siirretään niitä alemmas painovoiman verran
            If rengas1col=0 Then
                TranslateObject rengas1,0,-gravity
            End If
            
            If rengas2col=0 Then
                TranslateObject rengas2,0,-gravity
            End If
            
            //Jos renkaat osuvat mahan siirretään niitä ylemmäs
            While ObjectsOverlap(rengas1,maastopala\obj,3)
                TranslateObject rengas1,0,1
            Wend
            
            While ObjectsOverlap(rengas2,maastopala\obj,3)
                TranslateObject rengas2,0,1
            Wend
        End If

    Next maastopala

 
    
    CloneCameraPosition rengas1
    DrawScreen
Forever
Jokseenkin bugaava, mutta enimmäkseen toimiva.

Post Reply