Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 10-06-2005, 12:59   #1 (permalink)
ich lerne noch
 
Benutzerbild von Alpha.ONE
 
Registriert seit: Mar 2004
Ort: Konstanz
Beiträge: 267
Kollisionstest

Hi,

ich hab ein Problem das mir derzeit sehr viel Ärger macht, da ich nicht mehr weiter weis.

Also ich will es mal erklären:

Ich habe 4 Movieclips auf meiner Bühne. Diese kann man per Drag und Drop bewegen.

Code:
ActionScript:
  1. // MC1
  2. _root.1_mc.onPress = function() {
  3.     startDrag(_root.1_mc, false, 0, 0, 700, 550);
  4. };
  5. _root.1_mc.onRelease = function() {
  6.     stopDrag();
  7. };
  8. // MC2
  9. _root.2_mc.onPress = function() {
  10.     startDrag(_root.2_mc, false, 0, 0, 700, 550);
  11. };
  12. _root.2_mc.onRelease = function() {
  13.     stopDrag();
  14. };
  15. // MC3
  16. _root.3_mc.onPress = function() {
  17.     startDrag(_root.3_mc, false, 0, 0, 700, 550);
  18. };
  19. _root.3_mc.onRelease = function() {
  20.     stopDrag();
  21. };
  22. // MC4
  23. _root.4_mc.onPress = function() {
  24.     startDrag(_root.4_mc, false, 0, 0, 700, 550);
  25. };
  26. _root.4_mc.onRelease = function() {
  27.     stopDrag();
  28. };

Das funktioniert auch soweit ganz gut.

Nun möchte ich eine Kollisionsabfrage einbauen, bei der der MC, der durch den MC der gerade gedragt wird, berührt wird sich um immer zwei Punkte nach links bzw recht und/oder oben bzw. unten bewegt.

Mir ist bekannt wie eine Kollisionsabfrage geht aber ich hab keine Ahnung wie ich das mit der bewegung des MC hinkriege.

Mein bisheriger Ansatz sieht so aus:

ActionScript:
  1. _root.onEnterFrame = function() {
  2.     if (this.1_mc.hitTest(2_mc)) {
  3.         _root.2_mc._x = _root.2_mc._x - 2;
  4.         _root.2_mc._y = _root.2_mc._y - 2;
  5.     }

Jedoch bewegt sich der MC immer nur in eine Richtung. Meine Frage ist, wie ich feststellen kann in welche Richtung sich der MC bewegen sollte (wenn ich von links komme soll sich der MC nach rechts bewegen usw...).
__________________
Auge um Auge - und die ganze Welt wird blind sein.
(Mahatma Gandhi)

Portfolio | deviantArt
Alpha.ONE ist offline   Mit Zitat antworten
Alt 10-06-2005, 13:26   #2 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.347
mit deiner methode könnteste das evtl auf folgende art und weise machen...
in diese mc´s könnteste ja wiederrum zwei kleine mc´s reinpacken die dann quasi erkennen von wo der mc kommt. also 2 mc´s in einem. einer links, falls was von links kommt und einer rechts, falls was von rechts kommt....

also so ca:
PHP-Code:
_root.onEnterFrame = function() {
    if (
this.mc1.mc_left.hitTest(mc2)) {
        
_root.mc2._x -= 2;
        
_root.mc2._y -= 2;
    } else if(
this.mc1.mc_right.hitTest(mc2)){
        
_root.mc2._x += 2;
        
_root.mc2._y += 2;
    }

aber je nachdem was du da vorhast wird das doch etwas sehr umständlich. zudem ist hittest nicht grad besonders schnell. also wenn du fix mit der maus dragst kann es sein das da was schonmal nicht funzt....

cya, sal
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
Chuck Norris hat den Flash Player für alle mobilen Betriebssysteme!
salazar ist offline   Mit Zitat antworten
Alt 10-06-2005, 14:02   #3 (permalink)
ich lerne noch
 
Benutzerbild von Alpha.ONE
 
Registriert seit: Mar 2004
Ort: Konstanz
Beiträge: 267
Hast du evtl. eine Idee wie ich das vereinfachen kann?
Ich dachte daran die x und y Koordinaten auszulesen und diese mit den neuen x und y Koordinaten zu vergleichen um dadurch eine Richtung zu bestimmen.
Daran arbeite ich gerade und werde meinen Ansatz hier posten.

Zitat:
zudem ist hittest nicht grad besonders schnell. also wenn du fix mit der maus dragst kann es sein das da was schonmal nicht funzt....
Was kann ich denn sonst verwenden?
__________________
Auge um Auge - und die ganze Welt wird blind sein.
(Mahatma Gandhi)

Portfolio | deviantArt
Alpha.ONE ist offline   Mit Zitat antworten
Alt 10-06-2005, 14:28   #4 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Hi!
Habe dir da mal was zusammengeleimt:
ActionScript:
  1. this.mc_2.onPress = function() {
  2.     startDrag(this);
  3.     this.onEnterFrame = function() {
  4.         oldX = this._x;
  5.         oldY = this._y;
  6.         this.onMouseMove = function() {
  7.             if (this.hitTest(this._parent.mc_1)) {
  8.                 if (oldX<this._x) {
  9.                     this._parent.mc_1._x += 2;
  10.                 }
  11.                 if (oldX>this._x) {
  12.                     this._parent.mc_1._x -= 2;
  13.                 }
  14.                 if (oldY<this._y) {
  15.                     this._parent.mc_1._y += 2;
  16.                 }
  17.                 if (oldY>this._y) {
  18.                     this._parent.mc_1._y -= 2;
  19.                 }
  20.             }
  21.         };
  22.     };
  23. };
  24. this.mc_2.onRelease = function() {
  25.     stopDrag();
  26. };
Angehängte Dateien
Dateityp: rar kollision.rar (3,7 KB, 11x aufgerufen)
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 10-06-2005, 14:48   #5 (permalink)
ich lerne noch
 
Benutzerbild von Alpha.ONE
 
Registriert seit: Mar 2004
Ort: Konstanz
Beiträge: 267
Ich hab das Script nun etwas verändert so das beide MC´s gedragt werden können.

Code:

ActionScript:
  1. this.mc_2.onPress = function() {
  2.     startDrag(this);
  3.     this.onEnterFrame = function() {
  4.         mc2_oldX = this._x;
  5.         mc2_oldY = this._y;
  6.         this.onMouseMove = function() {
  7.             if (this.hitTest(this._parent.mc_1)) {
  8.                 if (mc2_oldX<this._x) {
  9.                     this._parent.mc_1._x += 2;
  10.                 }
  11.                 if (mc2_oldX>this._x) {
  12.                     this._parent.mc_1._x -= 2;
  13.                 }
  14.                 if (mc2_oldY<this._y) {
  15.                     this._parent.mc_1._y += 2;
  16.                 }
  17.                 if (mc2_oldY>this._y) {
  18.                     this._parent.mc_1._y -= 2;
  19.                 }
  20.             }
  21.         };
  22.     };
  23. };
  24. this.mc_2.onRelease = function() {
  25.     stopDrag();
  26. };
  27. this.mc_1.onPress = function() {
  28.     startDrag(this);
  29.     this.onEnterFrame = function() {
  30.         mc1_oldX = this._x;
  31.         mc1_oldY = this._y;
  32.         this.onMouseMove = function() {
  33.             if (this.hitTest(this._parent.mc_2)) {
  34.                 if (mc1_oldX<this._x) {
  35.                     this._parent.mc_2._x += 2;
  36.                 }
  37.                 if (mc1_oldX>this._x) {
  38.                     this._parent.mc_2._x -= 2;
  39.                 }
  40.                 if (mc1_oldY<this._y) {
  41.                     this._parent.mc_2._y += 2;
  42.                 }
  43.                 if (mc1_oldY>this._y) {
  44.                     this._parent.mc_2._y -= 2;
  45.                 }
  46.             }
  47.         };
  48.     };
  49. };
  50. this.mc_1.onRelease = function() {
  51.     stopDrag();
  52. }

Leider funktioniert das stopDrag jetzt leider nicht mehr bzw. setzt manchmal aus.

woran kann das liegen?
Angehängte Dateien
Dateityp: zip kollision.zip (5,8 KB, 12x aufgerufen)
__________________
Auge um Auge - und die ganze Welt wird blind sein.
(Mahatma Gandhi)

Portfolio | deviantArt

Geändert von Alpha.ONE (10-06-2005 um 14:50 Uhr)
Alpha.ONE ist offline   Mit Zitat antworten
Alt 10-06-2005, 15:02   #6 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Oh, hab vergessen, die funktionen zu löschen *schäm*
ActionScript:
  1. this.mc_1.onRelease = function() {
  2.     stopDrag();
  3.     delete this.onEnterFrame;
  4.     delete this.onMouseMove;
  5. }
...für beide MCs
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 10-06-2005, 15:29   #7 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Hab's nochmal verbessert (wenn man bei der Pampe von "verbessern" reden kann)
ActionScript:
  1. this.mc_2.onPress = function() {
  2.     startDrag(this);
  3.     this.onEnterFrame = function() {
  4.         mc2_oldX = this._x;
  5.         mc2_oldY = this._y;
  6.         this.onMouseMove = function() {
  7.             if (this.hitTest(this._parent.mc_1)) {
  8.                 delete this.onEnterFrame;
  9.                 if (mc2_oldX<this._x) {
  10.                     this._parent.mc_1._x += 2;
  11.                 }
  12.                 if (mc2_oldX>this._x) {
  13.                     this._parent.mc_1._x -= 2;
  14.                 }
  15.                 if (mc2_oldY<this._y) {
  16.                     this._parent.mc_1._y += 2;
  17.                 }
  18.                 if (mc2_oldY>this._y) {
  19.                     this._parent.mc_1._y -= 2;
  20.                 }
  21.             } else {
  22.                 this.onEnterFrame = function() {
  23.                     mc2_oldX = this._x;
  24.                     mc2_oldY = this._y;
  25.                 };
  26.             }
  27.         };
  28.     };
  29. };
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 11-06-2005, 10:29   #8 (permalink)
ich lerne noch
 
Benutzerbild von Alpha.ONE
 
Registriert seit: Mar 2004
Ort: Konstanz
Beiträge: 267
Zitat:
wenn man bei der Pampe von "verbessern" reden kann
Kennst du evtl eine bessere Variante wie ich das machen kann?
Ich bin für jeden Vorschlag offen.

MfG und danke für die Hilfe.
__________________
Auge um Auge - und die ganze Welt wird blind sein.
(Mahatma Gandhi)

Portfolio | deviantArt
Alpha.ONE 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 18:43 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele