Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 22-05-2004, 09:25   #1 (permalink)
Notorischer Raser
 
Registriert seit: May 2003
Ort: Heinsberg
Beiträge: 83
Unhappy Linien Kolosion abfragen

Hi,

wie gehe ich am besten eine Linien Kolision an?

Ich habe auf der Bühne mit AS mehrere Linien gezeichnet

Ich möchte nun prüfen ob sich die Linien überschneiden.

Ich hab es mit einen onEnterFrame versucht:

ActionScript:
  1. for (var j=0; j < anzahlLinien; j++) {
  2.  if (pressedLinie != j) {
  3.         if (linee[pressedLine].hitTest(linie[i])){
  4.              trace("HIT")
  5.         }
  6.  }
  7. }

Also quasi für alle Linien ausser der zu prüfende einen hitTest machen, das funktioniert aber nicht wirklich.

Wenn die Linie eine Kurve ist , dann ist der MC der Linie ja breiter (wegen yMax, xMax, ... der MC bildet ja immer ein Rechteck ?

Wie könnte man es am besten angehen so eine Kolisionsabfrage zu machen ?

Danke
__________________
gruss
Petter K.
petter ist offline   Mit Zitat antworten
Alt 22-05-2004, 09:29   #2 (permalink)
Neuer User
 
Benutzerbild von [GWA]Shadow
 
Registriert seit: Aug 2003
Ort: Rüsselsheim
Beiträge: 59
Hi,

war das net so das es für hitTest den Parameter True gibt,
der dann nicht den gesammten MC sondern nur den sichtbaren teil nach kollisionen abfragt ?


Mal jetzt so auf die schnelle.
[GWA]Shadow ist offline   Mit Zitat antworten
Alt 22-05-2004, 09:48   #3 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
jup genau.
Man kann keine 2 MCs auf einen exacten Hit überprüfen, dabei werden immer nur die Boxen geprüft.

Wenn du es exact haben willst, musst du es mit Koordinaten mache:

ActionScript:
  1. meinMC.hitText(x,y,true);
Janoscharlipp ist offline   Mit Zitat antworten
Alt 22-05-2004, 09:53   #4 (permalink)
Notorischer Raser
 
Registriert seit: May 2003
Ort: Heinsberg
Beiträge: 83
Zitat:
Geschrieben von Janoscharlipp
[Wenn du es exact haben willst, musst du es mit Koordinaten mache:
ActionScript:
  1. meinMC.hitText(x,y,true);
[/B]
Das hilft aber nicht weiter im Falle das einer der beiden MC eine Kurve ist , weil sich dort die Boxen überlappen, die Linien aber nicht.

Das muss man wohl irgendwie mathematisch berechnen ?
Nur wie
__________________
gruss
Petter K.
petter ist offline   Mit Zitat antworten
Alt 22-05-2004, 09:57   #5 (permalink)
Neuer User
 
Benutzerbild von [GWA]Shadow
 
Registriert seit: Aug 2003
Ort: Rüsselsheim
Beiträge: 59
Lad doch mal die .fla mit hoch, denke dann wird einfacher

greetz es Shadowlein
[GWA]Shadow ist offline   Mit Zitat antworten
Alt 22-05-2004, 10:03   #6 (permalink)
Notorischer Raser
 
Registriert seit: May 2003
Ort: Heinsberg
Beiträge: 83
hier, in dem Beispiel gibt es einen hiTTest obwohl die Linien sich nicht berühren, die Bounding Boxen (heißen so ?) Berühren sich aber.
Angehängte Dateien
Dateityp: zip hitttest.zip (2,6 KB, 7x aufgerufen)
__________________
gruss
Petter K.
petter ist offline   Mit Zitat antworten
Alt 22-05-2004, 10:20   #7 (permalink)
lounger one
 
Benutzerbild von linkage
 
Registriert seit: Jul 2002
Ort: Kassel
Beiträge: 556
Also nur mal eine Theorie:
wenn du die Linien dynamisch erstellt müsste es gehen, denn du hast dann ja Verfügung über die einzelnen Punkte deiner kurven!

... is nur so ne Idee, weil so wie du es bis jetzt gemacht hast wüsste ich keinen Löusungsansatz!
Das Einzige was gehen würde wäre was mit hittest des Objektes mit allen x,y Koordinaten deiner Bühne und die Treffer müsstest du dann wieder mit dem zweiten Clip vergleichen (bzw bei dem zweiten clip wieder die gleiche Prozedur und die Treffer dann mit den Trefdern aus clip eins vergleichen)! geht sicher auch einfacher aber das wäre das Einzige was mir dazu einfällt! Vielleicht kann man auch die Abfrage der "pixelhits" über die Bounding Box machen dann müsste man nicht die Bühne komplett abfragen... trotzallem sehr aufwendig und Leistungs beanspruchend!
__________________
your friendly Neighbour

Linkage

m.link@gmx.de

Geändert von linkage (22-05-2004 um 10:24 Uhr)
linkage ist offline   Mit Zitat antworten
Alt 22-05-2004, 10:26   #8 (permalink)
Notorischer Raser
 
Registriert seit: May 2003
Ort: Heinsberg
Beiträge: 83
Zitat:
Geschrieben von linkage
[B]Also nur mal eine theorie:
wenn du diel linien dynamisch erstellt müsste es gehen, denn du hast dann ja verfügung über die einzelnen punkte deiner kurven!
Ja das versuche ich gerade, also ich habe ausgangsposition und endposition der linie, also 2 mal X,Y koordinaten, wenn die Kurve einen gleichmässigen Raadius hat sollte man das berechnen könnne, nicht aber wenn ich noch ein winkel mit berücksichtigen muss. bzw weiß dann nicht wie und wie man den anhand der koordinaten berechnet.

Ich versuche das jetzt aber ersteinmal mit einen festen radius , mal gucken ob das irgendwie klappt, schu mich gerade mal ein bsichen um was es da für Mathe Formeln für die berechnung gibt.
__________________
gruss
Petter K.
petter ist offline   Mit Zitat antworten
Alt 22-05-2004, 11:14   #9 (permalink)
lounger one
 
Benutzerbild von linkage
 
Registriert seit: Jul 2002
Ort: Kassel
Beiträge: 556
Also der zuletz beschrieben ANsatz um die Pixeltreffer auszuwerten ist eindeutig zu system belastend! ;-)

ActionScript:
  1. arrHit = new Array();
  2.  
  3. this.onLoad = function(){
  4.     checkHit();
  5.     trace(arrHit)
  6.  
  7. }
  8.  
  9. function checkHit (){
  10.     for(i=0; i<=Stage.width; i++){
  11.         for(j=0; j<=Stage.height; j++){
  12.             if(s1.hitTest(i,j,true)){
  13.                 arrHit.push(i+"|"+j);   
  14.             }
  15.         }
  16.     }
  17. }

naja war ja nur mal eine Idee!

ich würde mal bei Google nach geometrischen Gleichsetzungen suchen oder so, da müsstest du was finden. Abi ist bei mir zulang her als das ich mich da noch an was erinnern könnte! ;-)
__________________
your friendly Neighbour

Linkage

m.link@gmx.de
linkage ist offline   Mit Zitat antworten
Alt 22-05-2004, 11:20   #10 (permalink)
Neuer User
 
Benutzerbild von [GWA]Shadow
 
Registriert seit: Aug 2003
Ort: Rüsselsheim
Beiträge: 59
Ich hab da jetzt mal bissie rumprobiert, es geht mit hitTest(_x,_y,true) dumm ist nur das es nur einmal geht !!!
d.h wenn die linien sich getroffen haben lass ich den kurven MC wieder an seinen ausgangsort zurückkehren und wieder in richtung gerade bewegen, dann allerdings is nixmehr mit hittest.

so als ob er das nach einmaligem geschehen nichtmehr überprüft.

keine ahnung warum.

Ich häng mal die fla mit an.
Angehängte Dateien
Dateityp: zip hitttest.zip (3,7 KB, 7x aufgerufen)
[GWA]Shadow ist offline   Mit Zitat antworten
Alt 22-05-2004, 11:35   #11 (permalink)
lounger one
 
Benutzerbild von linkage
 
Registriert seit: Jul 2002
Ort: Kassel
Beiträge: 556
hallo,
bei deinem beispiel findet auch nur genau ein hittest statt! denn du vergleichst ja nur einen Punkt mit dem objekt!

ActionScript:
  1. this.onEnterFrame = function(){
  2.     if (_root.s2._x<801) {
  3.         _root.s2._x += 2;
  4.     }
  5.     if (_root.s2.hitTest(_root.s1._x, _root.s1._y, true)) {
  6.         trace("hit");
  7.         _root.s2._x=150;   
  8.     }else{
  9.         trace("no hit")
  10.     }
  11. }

so kannst du feststellen da er nur! einmal eine berührung hat da du ja den stehenden punkt von s1 mit der bewegenden Linie s2 vergleichst! da beide eine Linienstärke von einem pixel haben, kann das nicht mehr ergeben!
s1._x liefert dir nur einen Punkt und nicht alle x werte des objektes, die müsstest du dann schon ausrechnen (mit _x und width) und dann alle Punkte angeben was wieder zu seiner system crashenden schleife führen würde... denke ich!
__________________
your friendly Neighbour

Linkage

m.link@gmx.de
linkage ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 19:35 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele