Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Flash] Hittests

Pagina: 1
Acties:

  • Fox
  • Registratie: Mei 2007
  • Niet online
Allereerst even wat informatie over mijn engine,

Movieclip die de muis volgt: mouse
Movieclip waar de muis op kan: ok**
Movieclip die de muur moet voorstellen: w**

** = nummer

Alle hittests zijn in de muis gecode. Functies zoals muren, objecten en de plekken waarop je kan met je muis hebben simpelweg een instance name.

Ik werk aan een muis doolhof spel, en ik heb de engine ge-update, maar ik heb nu een probleem. Ik wil zorgen dat in mijn spel muren komen die de movieclip die mijn muis volgt stopt. De eerste stap heb ik genomen door inplaats van de mouse movieclip aan de muis te laten hangen, hem te laten volgen. Dit is de code,

code:
1
2
3
4
5
6
_root.onEnterFrame = function() {
    positionX = _root._xmouse;
    positionY = _root._ymouse;
    mouse._x = mouse._x+(positionX-mouse._x)/2;
    mouse._y = mouse._y+(positionY-mouse._y)/2;
};


Op deze manier maak ik het mogelijk dat de muur de muis stopt met een hittest. Maar het probleem is, hoe? Ik heb al enkele dingen geprobeerd zoals verticale en horizontale muren aparte instances te geven, en zo de muis te stoppen door middel van de horizontale of verticale movement weg te halen. Alleen hier mee kom ik in de problemen als ik bijvoorbeeld de muis weer weg wil halen of op diagonale of organische vormen.

Zou iemand mij kunnen uitleggen hoe je in combinatie met een movieclip die de muis volgt, een muur kan maken waar de movieclip niet doorheen kan? Erg bedankt.

Hier is een voorbeeld hoe ik de muur het liefst wil hebben, alhoewel het ook goed is dat de mouse movieclip niet mee beweegt nadat je een muur bent gepaseerd.

  • Blaise
  • Registratie: Juni 2001
  • Niet online
Als ik bij Google zoek op "collision detection" kom ik op http://board.flashkit.com/board/showthread.php?p=3392829. Kijk vooral de 3e reactie.

  • Fox
  • Registratie: Mei 2007
  • Niet online
Blaise schreef op maandag 04 februari 2008 @ 15:31:
Als ik bij Google zoek op "collision detection" kom ik op http://board.flashkit.com/board/showthread.php?p=3392829. Kijk vooral de 3e reactie.
Bedankt.

Had die zelf nog niet gevonden, vooral deze link is hulpzaam.

Maar jammer genoeg blijft het probleem blijft zich voortzetten. Onderhand heb ik al een aantal manieren geprobeerd waaronder deze maar zoals te zien functioneerd deze niet goed.

De code van deze methode is,

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
onClipEvent (enterFrame) {
    radius = 5;
    while (_root.w1.hitTest(_x, _y+radius, true)) {
        _y--;
    }
    while (_root.w1.hitTest(_x, _y-radius, true)) {
        _y++;
    }
    while (_root.w1.hitTest(_x-radius, _y, true)) {
        _x++;
    }
    while (_root.w1.hitTest(_x+radius, _y, true)) {
        _x--;
    }
}


Ik heb verder nog veel op google gezocht zonder resultaat. Bijna alle voorbeelden die zijn te vinden zijn voor keystroke besturing, jammer genoeg niet voor muis besturing door middel van een volgende movieclip.

Als iemand nog inzichten of antwoorden heeft, graag en bedankt! :)

  • Fox
  • Registratie: Mei 2007
  • Niet online
Ik heb nu de hittest prima aan de praat gekregen zoals hier te zien.

De code hiervoor is,

code:
1
2
3
4
5
6
7
8
_root.onEnterFrame = function():Void  {
    if( !w1.hitTest(_xmouse, _ymouse, true) ){
        positionX =_xmouse;
        positionY = _ymouse;
    }
    mouse._x = mouse._x+(positionX-mouse._x)/2;
    mouse._y = mouse._y+(positionY-mouse._y)/2;
};


Alhoewel het prima werkt, zit ik nog met één probleem. Als je met de muis over de muur heen gaat, dan gaat de movieclip ook door de muur heen. Ik heb geen idee hoe ik wil zorgen dat de movieclip niet door de muur heen kan, maar er ook voor zorgen dat als je movieclip tegen de muur gaat dat je deze nog terug kan bewegen.

Iemand? Alvast bedankt! :)

  • Blaise
  • Registratie: Juni 2001
  • Niet online
Dan zou je iets van pathfinding moeten implementeren ;)

De movieclip volgt niet exact de verborgen cursor. Als je je cursor snel beweegt, volgt de movieclip iets later. Mischien kan je die vertraging uitzetten als de hittest true returnt, of als de cursor uit de hittest komt, dat de movieclip exact op de plek van de cursor staat.