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.
Apu olisi tervetullutta.
Keinotekoinen törmäystunnistus ei pelitä
-
- Newcomer
- Posts: 25
- Joined: Tue Aug 28, 2007 3:34 pm
- Location: Siellä jossain kaukana.
- Contact:
Re: Keinotekoinen törmäystunnistus ei pelitä
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
Re: Keinotekoinen törmäystunnistus ei pelitä
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