Volledige versie bekijken : Hittest vanuit een class probleem.
Ericd
%Europe/Berlin %944 %2008, 23:39
Hallo,
Ik heb een Muur class waarvan ik tig instances aanmaak via me main.as. Een bal moet collision detection hebben met de muur instances. Ik krijg het maar niet voor elkaar om in de Muur class een werkende collision detection te schrijven :( .
stage.addEventListener(Event.ENTER_FRAME, onEnteringFrame);
}
private function onEnteringFrame(event:Event):void
{
if (Muur.hitTestObject(Level.speler))
{
trace ("raak");
}
}
B-Mantis
%Europe/Berlin %628 %2008, 16:05
is Muur een class ? Je moet twee instances met elkaar vergelijken, niet een class met een instance. Als je naar een instance wilt verwijzen, kun je 'this' gebruiken.
Je kunt ook beter het level zelf de hitTests laten uitvoeren, in plaats van dat elk muur object zelf gaat zoek naar (elk) player object, aangezien het level object al deze dingen kent en controleert (als het goed is)
Ericd
%Europe/Berlin %018 %2008, 01:27
Maar als er 50+ muur instances zijn.. Hoe maak ik daar een hittest voor? Ik kan wel voor 1 instance een hittest maken, dat is geen probleem.. Maar is er een manier om het met alle instances te doen?
theFlashWizard
%Europe/Berlin %055 %2008, 02:20
Met een (for) loop al deze muren langsgaan. Hiervoor moet je de muren gaan bijhouden in bijv een array of je moet ze in dezelfde container stoppen waarna je langs al zijn kinderen gaat.
B-Mantis
%Europe/Berlin %493 %2008, 12:49
ja, of, wat TFW zegt, alle muren in een container doen en dan die container shapeflag hitTesten. (zie flash help)
Ericd
%Europe/Berlin %588 %2008, 15:07
Kep ze al in een array gedumpt. Nu heb ik een probleem met de hittestobject. De speler loopt lekker over de objecten via me hittest.. Maar als ik een sprong doe valt de speler half IN het object als ie neer komt:
package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.ui.Keyboard;
import KeyPoll;
public class Speler extends MovieClip
{
//Gravity
private var Xspeed:Number = 0;
private var Yspeed:Number = 0;
private var Zwaartekracht:Number = 1.0;
private var Wrijving:Number = 0.15;
private var Spelersnelheid:Number = 0.35;
private var jump:Boolean = false;
private var jumpSpeed:Number = 5;
//Other stuff
private var key:KeyPoll;
var collision:Boolean = false;
public function Speler(xPos:Number, yPos:Number):void
{
x = xPos;
y = yPos;
Level.STAGE.addChild(this);
key = new KeyPoll (Level.STAGE);
Level.STAGE.addEventListener(Event.ENTER_FRAME, onKeyboardDown);
}
private function onKeyboardDown(event:Event):void
{
if (key.isDown(Keyboard.LEFT))
{
Xspeed -= Spelersnelheid;
jump = false;
}
else if (key.isDown(Keyboard.RIGHT))
{
Xspeed += Spelersnelheid;
jump = false;
}
/* else if (key.isDown(Keyboard.DOWN))
{
Yspeed += Spelersnelheid;
}
*/
else if (key.isDown(Keyboard.SPACE))
{
if (!jump)
{
Yspeed -= jumpSpeed;
jump = true;
}
}
applyMovement();
wrijving();
spelerGravity();
grenzen();
}
//change the x & y values.
function applyMovement()
{
x += Xspeed;
y += Yspeed;
}
//friction
function wrijving()
{
if (Xspeed > 0) {
Xspeed -= Wrijving;
}
if (Xspeed < 0) {
Xspeed += Wrijving;
}
}
//gravity
function spelerGravity()
{
Yspeed += Zwaartekracht;
}
//Tijdelijke collision detection
function grenzen()
{
if (collision == true)
{
Yspeed -= Yspeed;
jump = false;
collision = false;
}
}
}
}
B-Mantis
%Europe/Berlin %618 %2008, 15:50
tuurlijk. Je stopt alleen de beweging. Doe zoiets als:
while (playerTouchesGround()) {
player.y --;
}
Je hoeft trouwens KeyPoll niet te importeren, als die in dezelfde package zit. Probeer je ook aan te wennen variabelen te laten beginnen met een kleine letter.
Ericd
%Europe/Berlin %624 %2008, 15:59
tuurlijk. Je stopt alleen de beweging. Doe zoiets als:
while (playerTouchesGround()) {
player.y --;
}
Je hoeft trouwens KeyPoll niet te importeren, als die in dezelfde package zit. Probeer je ook aan te wennen variabelen te laten beginnen met een kleine letter.
Dus wanneer er collision is met de bovenkant van een object (Yspeed moet dan 0 of negatief zijn): y--;... Wat the hell betekend y--? :D
Dauntless
%Europe/Berlin %639 %2008, 16:20
y--; is het zelfde als y -= 1; en dat is hetzelfde als y = y - 1;
Met andere woorden: Je vermindert y met 1.
Ericd
%Europe/Berlin %675 %2008, 17:13
Aaah. Dit werkt al beter. Helaas stuitert de speler nu enkele keren per seconde met 1 pixel :(
B-Mantis
%Europe/Berlin %462 %2008, 12:06
dit zul je vaker tegenkomen tijdens programmeren. Houd in gedachten dat het programma EXACT doet wat jij hebt ingetypt. Niets gaat vanzelf. Dus kijk wat er precies gebeurt, en kijk in je code wat de oorzaak kan zijn. Als hij constant stuitert, misschien heb je de variabele die de verticale snelheid regelt niet aangepast? Daardoor zou hij steeds weer naar beneden kunnen gaan, en vervolgens weer omhoog ge 'y--'t worden. Probeer je verticale snelheid eens op nul te zetten, en ook je zwaartekracht (tenminste, zolang je boven de grond staat, oftewel; maakt ook een functie die kijkt of (het laagste punt) + 1 de grond raakt).
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.