Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 29-09-2005, 10:29   #1 (permalink)
Neuer User
 
Registriert seit: Apr 2003
Beiträge: 173
Kollisionsabfrage - Probleme mit hitTest

Hallo,

ich hab schon das Forum durchsucht, hab aber leider nichts gefunden, dass mir weiterhelfen könnte.

Also ich habe folgendes Problem:

Ich erstelle per AS zwei Reihen von MC's, die einen heißen vorgabe_0, vorgabe_1 ..., die anderen loesung_0, loesung_1 .... Jetzt möchte ich das man die vorgabe-MC's über die loesung-MC's ziehen kann und diese dann "einrasten".

In den vorgabe-MC's liegt immer eine Schaltfläche, auf der ich folgende Aktion liegen habe:

ActionScript:
  1. on (press) {
  2.     XPosStart = this._x;
  3.     YPosStart = this._y;
  4.     startDrag(this,true);
  5. }
  6.  
  7. on(release) {
  8.     stopDrag();
  9.     for (var i = 0; i < _global.wieviele;i++){
  10.         kollision = ["_root.loesung_"+i];
  11.         temp = kollision[0];
  12.         trace(temp);
  13.         var kollisionXPos = temp._x;
  14.         trace(kollisionXPos);
  15.         if (this, hitTest(temp)){
  16.             trace("ja");
  17.             this._x = temp._x;
  18.             this._y = temp._y;
  19.             break;
  20.         } else{
  21.             trace("nein");
  22.             this._x = XPosStart;
  23.             this._y = YPosStart;
  24.         }
  25.     }
  26. }

Das komische ist für trace(temp); gibt er mir noch das richtige aus, aber bei trace(kollisionXPos); kommt immer undefined. Und das verschieben klappt auch immer nur beim ersten Vorgabe-MC.

Ich weiß echt nicht mehr weiter. Ist das erste mal das ich was mit hitTest mache. Hab ich irgendwelche Fehler in meinem Skript?

Bin über jede Hilfe dankbar.

Viele Grüße
Manni
mannimedia ist offline   Mit Zitat antworten
Alt 29-09-2005, 10:43   #2 (permalink)
Pending…
 
Benutzerbild von psyk
 
Registriert seit: Jul 2002
Ort: Hamburg
Beiträge: 3.866
Probier mal
ActionScript:
  1. kollision = _root["loesung_"+i];
  2. // : Kleiner Syntaxfehler.
  3.  if (this[COLOR=Red].[/COLOR]hitTest(temp)){
__________________
:: Warum einfach, wenn's auch kompliziert geht! ::

Geändert von psyk (29-09-2005 um 10:47 Uhr)
psyk ist offline   Mit Zitat antworten
Alt 29-09-2005, 11:27   #3 (permalink)
Neuer User
 
Registriert seit: Apr 2003
Beiträge: 173
hi,

das hat auf jeden fall schon was gebracht. vielen dank.

habs jetzt so umgeschrieben:

ActionScript:
  1. on (press) {
  2.     XPosStart = this._x;
  3.     YPosStart = this._y;
  4.     startDrag(this,true);
  5. }
  6.  
  7. on(release) {
  8.     stopDrag();
  9.     for (var i = 0; i < _global.wieviele;i++){
  10.         kollision = _root["loesung_"+i];
  11.         var kollisionXPos = kollision._x;//die brauch eigentlich nicht, ist nur zum testen
  12.         trace(kollision);
  13.         trace(kollisionXPos);
  14.         if (this.hitTest(kollision)){
  15.             trace("ja");
  16.             this._x = kollision._x;
  17.             this._y = kollision._y;
  18.             break;
  19.         } else{
  20.             trace("nein");
  21.             this._x = XPosStart;
  22.             this._y = YPosStart;
  23.         }
  24.     }
  25. }

Jetzt krieg ich wenigstens kein undefined mehr raus.

Problem ist dass es nur beim ersten Mal klappt. Dann gibt er "ja" aus. Sobald ich den nächsten verschiebe springt er immer in die "nein"-Schleife.
mannimedia ist offline   Mit Zitat antworten
Alt 29-09-2005, 12:33   #4 (permalink)
Neuer User
 
Registriert seit: Apr 2003
Beiträge: 173
ich hab jetzt mal noch weiter rumprobiert. er macht die kollisionsabfrage immer nur für loesung_0 richtig. woran kann das liegen?
mannimedia ist offline   Mit Zitat antworten
Alt 29-09-2005, 12:47   #5 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
ActionScript:
  1. else{
  2.                         trace("nein");
  3.                         this._x = XPosStart;
  4.                         this._y = YPosStart;
  5.                 }
Damit verschiebst du den MC ja auch sobald er nicht loesung_0 trifft. Somit ist hitTest nich mehr erfüllt...
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 29-09-2005, 12:56   #6 (permalink)
Neuer User
 
Registriert seit: Apr 2003
Beiträge: 173
danke. jetzt klappts.

aber ich versteh nicht wieso. ich wollte damit erreichen, dass der mc wieder an seine ursprungsposition zurückspringt, wenn er den kollisionstest nicht erfüllt.

und eigentlich müsste er doch jedesmal wenn ich den vorgabe-mc verschiebe und dann loslasse die funktion neu durchlaufen und schauen für welchen der loesung-mc's der hitTest true wird. das wollte ich nämlich mit meinem skript erreichen.
mannimedia ist offline   Mit Zitat antworten
Alt 29-09-2005, 13:02   #7 (permalink)
Neuer User
 
Registriert seit: Apr 2003
Beiträge: 173
oh mann. jetzt ist es mir klar. hab nochmal genau drüber nachgedacht.

hab das jetzt mal so gelöst:

ActionScript:
  1. on(release) {
  2.     stopDrag();
  3.     var tester = 0;
  4.     for (var i = 0; i < _global.wieviele;i++){
  5.         var kollision = _root["loesung_"+i];
  6.         var kollisionXPos = kollision._x;
  7.         trace(kollision);
  8.         trace(kollisionXPos);
  9.         if (this.hitTest(kollision)){
  10.             trace("ja");
  11.             this._x = kollision._x;
  12.             this._y = kollision._y;
  13.             break;
  14.         } else{
  15.             trace("nein");
  16.             tester++;
  17.             //this._x = XPosStart;
  18.             //this._y = YPosStart;
  19.         }
  20.         if(tester == _global.wieviele){
  21.             this._x = XPosStart;
  22.             this._y = YPosStart;
  23.         }
  24.     }
  25. }

weiß nicht ob das die sauberste art ist, aber funzt.

eine frage noch, wie kann ich schauen, ob beim loslassen schon ein vorgabe-mc auf dem loesung-mc liegt?

Geändert von mannimedia (29-09-2005 um 13:08 Uhr)
mannimedia ist offline   Mit Zitat antworten
Alt 29-09-2005, 16:34   #8 (permalink)
Neuer User
 
Registriert seit: Apr 2003
Beiträge: 173
ich habs. für alle die es interessiert:

ActionScript:
  1. on(release) {
  2.     stopDrag();
  3.     var tester = 0;
  4.     for (var i = 0; i < _global.wieviele;i++){
  5.         var kollision = _root["loesung_"+i];
  6.         if (this.hitTest(kollision)){
  7.             this._x = kollision._x;
  8.             this._y = kollision._y;
  9.             break;
  10.         } else{
  11.                 tester++;
  12.         }
  13.         if(tester == _global.wieviele){
  14.             this._x = XPosStart;
  15.             this._y = YPosStart;
  16.         }
  17.     }
  18.     for(var j = 0; j <= _global.wieviele;j++){
  19.         var kollision2 = _root["vorgabe_"+j];
  20.         if(this == kollision2){
  21.         } else{
  22.             if(this.hitTest(kollision2)){
  23.                 this._x = XPosStart;
  24.                 this._y = YPosStart;       
  25.             }               
  26.         }
  27.     }
  28. }

nehme auch sehr gerne verbesserungsvorschläge an was das skript angeht. bin noch in den anfängen und lerne gerne dazu was das saubere programmieren angeht.

lg
manni
mannimedia 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:42 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele