PDA

Volledige versie bekijken : Advanced Collision Detection Help


ninetynine
%Europe/Berlin %360 %2005, 09:39
Nu ik ben bezig met een game met auto in boven zicht , nu heb ik een probleem met
hittest...

Dit is mijn code , maar nu neemt ie niet de auto , maar het middelpunt , om tegen te "bokken",
ook zou ik graag hebben dat je ook schuin langs de hoeken kan rijden , zie afbeelding

block 1 , 2 , 3 , 4 zijn de uiterste randen
en vierkant is het gebouw

mvg


onClipEvent (load) {
speed = 0;
}
onClipEvent (enterFrame) {
if (Key.isDown(Key.UP)) {
speed += 1;
}
if (Key.isDown(Key.DOWN)) {
speed -= 1;
}
if (Math.abs(speed)>15) {
speed *= .7;
}
if (Key.isDown(Key.LEFT)) {
_rotation -= 6;
}
if (Key.isDown(Key.RIGHT)) {
_rotation += 6;
}
speed *= .98;
x = Math.sin(_rotation*(Math.PI/180))*speed;
y = Math.cos(_rotation*(Math.PI/180))*speed*-1;
if (!_root.block1.hitTest(_x+x, _y+y, true) && !_root.block2.hitTest(_x+x, _y+y, true) && !_root.block3.hitTest(_x+x, _y+y, true) && !_root.block4.hitTest(_x+x, _y+y, true) && !_root.vierkant.hitTest(_x+x, _y+y, true)) {
_x += x;
_y += y;
} else if (_root.car.hitTest(_root.block1) or _root.car.hitTest(_root.block2) or _root.car.hitTest(_root.block3) or _root.car.hitTest(_root.block4)) {
speed *= -.6;
} else if (_root.car.hitTest(_root.vierkant)) {
speed *= -.6
}
}

ninetynine
%Europe/Berlin %550 %2005, 14:13
Kan iemand me helpen ? , met deze code op de auto,


onClipEvent (load) {
speed = 0;
}
onClipEvent (enterFrame) {
// make the car go forward
if (Key.isDown(Key.UP)) {
speed += 1;
}
// make the car go backwards
if (Key.isDown(Key.DOWN)) {
speed -= 1;
}
// tells the car to slow down after the speed of 20
if (Math.abs(speed)>15) {
speed *= .7;
}
// you can change the rotation of the car to your desire
if (Key.isDown(Key.LEFT)) {
_rotation -= 6;
}
if (Key.isDown(Key.RIGHT)) {
_rotation += 6;
}
// here is where the hittest is for the boundary
speed *= .98;
x = Math.sin(_rotation*(Math.PI/180))*speed;
y = Math.cos(_rotation*(Math.PI/180))*speed*-1;
if (_root.botsing eq false) {
_x += x;
_y += y;
} else {

}
}



En deze op de muur :

onClipEvent (enterFrame) {
if (_root.balk.hitTest(_root.car)) {
_root.botsing = true;
} else {
_root.botsing = false;
}
}


Krijg je dit :

http://www.houstonfrieks.be/test.swf (http://www.houstonfrieks.be/car.swf)

hij kan juist langs muren rijden , maar als je botst en draait ga je erdoor en ook
kan je niet lang hoeken rijden , dit komt doordat hij bij hittest de bounding box checkt
en bij rotation verandert die : (zie tekening ) (probeer maar eens)


http://www.houstonfrieks.be/test.jpg


hoe zou ik dit best oplossen ?

Roenes
%Europe/Berlin %558 %2005, 14:24
Dit soort dingen zijn altijd lastig. Even een paar opmerkingen:

- Je 2e voorbeeld met de onEnterFrame op je muur is niet handig. Op het moment dat je meerdere muren hebt gaat het volgens mij gigantisch flippen omdat botsing constant een andere waarde aanneemt. :)
- Je hitTesten in je eerste voorbeeld, die !_root.block1.hitTest(_x+x, _y+y, true), werkt zoiets uberhaupt wel? je test alleen of het middelpunt van je auto niet de muur raakt. Maar de hoekjes en zo worden niet meegenomen in de berekening.

Volgens mij kom je er in dit geval niet met hittest. Je zult toch echt met behulp van de wiskunde eigen collision detection functies moeten schrijven die dit voor je berekenen. :)

Een handig boek hierbij kan zijn "Flash MX (2004 evt) game design demystified" van Jobe Makar :)

ninetynine
%Europe/Berlin %563 %2005, 14:31
thx , ik zal het bestellen :)

Roenes
%Europe/Berlin %564 %2005, 14:32
thx , ik zal het bestellen :)Bieb kan ook een optie zijn. Of gewoon even zoeken op internet. :)

ninetynine
%Europe/Berlin %567 %2005, 14:36
mja in belgië , flash boeken : 1tje flash mx 2004 (the basics) :)

zit ik nu al uren te zoeken
op hitTest , Collision Detection , niets vind ik :s

Roenes
%Europe/Berlin %569 %2005, 14:39
Al op gamedev (http://www.gamedev.net/) gekeken? Daar schijnt een heleboel info over van alles en nog wat te staan. Wellicht staat daar ook wat bruikbaars tussen :)

ninetynine
%Europe/Berlin %583 %2005, 14:59
thnx ,ik staat zeer veel op (ook engines) zal eens kijken

ninetynine
%Europe/Berlin %620 %2005, 15:53
jaja , ik ben er in geslaagd , ik heb het met een bouncing factor gedaan :
(zelf bedacht :p )
zie


http://www.houstonfrieks.be/car.swf (http://www.houstonfrieks.be/car.swf)