Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 14-12-2007, 13:21   #1 (permalink)
Neuer User
 
Benutzerbild von chabo
 
Registriert seit: Oct 2007
Ort: München
Beiträge: 54
Kollisionsabfrage mit mehreren mc's

Hi Leutz!
Hab ein kleines Problem. Und zwar hab ich vier mc's, die, falls sich zwei davon untereinander beim drag/drop berühren, halbtransparent werden sollen. Wollte ne elegante Lösung mit ner for-Schleife entwickeln, aber irgendwie funzt das nicht so ganz - nicht mal für den ersten mc.

Hier der Code:

ActionScript:
  1. MovieClip.prototype.advancedHitTest = function (mc:MovieClip):Boolean
  2. {
  3.     var hitBitmap = new flash.display.BitmapData (mc._width, mc._height, true, 0);
  4.     hitBitmap.draw (mc);
  5.    
  6.     var currBitmap = new flash.display.BitmapData (this._width, this._height, true, 0);
  7.     currBitmap.draw (this);
  8.    
  9.     if (currBitmap.hitTest (new flash.geom.Point (this._x, this._y), 0xFF, hitBitmap, new flash.geom.Point (mc._x, mc._y)))
  10.     {
  11.         return true;
  12.     }
  13.     return false;
  14. };
  15.  
  16.  
  17. mc_1.initClip = function() {
  18.     myArr = new Array (mc_1, mc_2, mc_3, mc_4);
  19. }
  20.  
  21. onLoad = mc_1.initClip();
  22.  
  23. this.onEnterFrame = function ():Void
  24. {
  25.    
  26.     for (var m = 0; m < myArr.length; m++)
  27.     {
  28.         if (myArr[0].advancedHitTest(myArr[m]) && m!=0)
  29.         {
  30.             this.myArr[0]._alpha = 50;
  31.             this.myArr[m]._alpha = 50;
  32.         }
  33.         else
  34.         {
  35.             this.myArr[0]._alpha = 100;
  36.             this.myArr[m]._alpha = 100;
  37.         }
  38.     }
  39. };
  40.  
  41. this.mc_1.onPress = this.mc_2.onPress = this.mc_3.onPress = this.mc_4.onPress = startDrag;
  42. this.mc_1.onRelease = this.mc_2.onRelease = this.mc_3.onRelease = this.mc_4.onRelease = stopDrag;
  43. this.mc_1.onReleaseOutside = this.mc_2.onReleaseOutside = this.mc_3.onReleaseOutside = this.mc_4.onReleaseOutside = stopDrag;


Bin für eure Hilfe sehr dankbar!
Angehängte Dateien
Dateityp: zip kollabfrage.zip (6,3 KB, 2x aufgerufen)
chabo ist offline   Mit Zitat antworten
Alt 14-12-2007, 13:25   #2 (permalink)
ChronoGuard
 
Benutzerbild von SpecOps-12
 
Registriert seit: Mar 2002
Ort: Saarbrücken
Beiträge: 2.649
Endposition in Tween-Klasse variabel?
__________________
we will stop enhancing the truth in 3, 2, ...
SpecOps-12 ist offline   Mit Zitat antworten
Alt 14-12-2007, 15:16   #3 (permalink)
Neuer User
 
Benutzerbild von chabo
 
Registriert seit: Oct 2007
Ort: München
Beiträge: 54
Danke für die prompte Antwort! Das Beispiel ist recht gut, aber dennoch erhalte ich das gewünschte Ergebnis noch nicht mit allen "Bällen" (habe insgesamt 4), sondern nur mit Nr.3 und Nr.4.

PHP-Code:
function checkCollision(ball0:MovieClipball1:MovieClip):Void 
    var 
dx:Number Math.abs(ball1._x ball0._x); 
    var 
dy:Number Math.abs(ball1._y ball0._y); 
    var 
dist:Number Math.sqrt(dx*dx+dy*dy); 
    if (
dist<ball0._width/2+ball1._width/2) { 
        
trace(ball0 " hits " ball1);
        
ball0._alpha 50;
        
ball1._alpha 50;
        
    } 
    else
    { 
        
ball0._alpha 100;
        
ball1._alpha 100
    }

Wahrscheinlich ist die Lösung zu simpel um sie zu erkennen...
Hat jemand ne Ahnung?
chabo ist offline   Mit Zitat antworten
Alt 14-12-2007, 15:24   #4 (permalink)
ChronoGuard
 
Benutzerbild von SpecOps-12
 
Registriert seit: Mar 2002
Ort: Saarbrücken
Beiträge: 2.649
Naja, die checkCollision-Funktion muss ja für jeden Ball mit jedem anderen Ball gemacht werden.

Das wird hier vorbereitet.
Du musst eigentlich nur noch dein Array einsetzen.
Also:

PHP-Code:
var home:MovieClip this;
var 
myArr:Array = new Array (mc_1mc_2mc_3mc_4);
var 
myArr_length:Number myArr.length;

function 
dragEnter():Void {
    
home.onEnterFrame = function() {
        for (var 
0i<myArr_length-1i++) {  
            var 
ballA:MovieClip myArr[i];
            for (var 
j:Number i+1j<myArr_lengthj++) { 
                var 
ballB:MovieClip myArr[j];
                
checkCollision(ballA,ballB);
            }
        }
    };

__________________
we will stop enhancing the truth in 3, 2, ...
SpecOps-12 ist offline   Mit Zitat antworten
Alt 14-12-2007, 15:38   #5 (permalink)
Neuer User
 
Benutzerbild von chabo
 
Registriert seit: Oct 2007
Ort: München
Beiträge: 54
Na ja, das habe ich ja schon gemacht, nur es funzt halt nicht. Wennst noch ein wenig Geduld mit mir hast, kannst bitte nochmal in meine fla gucken...please.

noch zwei screenshots: der Erste ist so wie es sein soll, nur der Zweite ist falsch.
Angehängte Grafiken
Dateityp: jpg 1.JPG (12,7 KB, 5x aufgerufen)
Dateityp: jpg 2.JPG (12,6 KB, 5x aufgerufen)
Angehängte Dateien
Dateityp: zip kollabfrage.zip (7,4 KB, 6x aufgerufen)

Geändert von chabo (14-12-2007 um 15:43 Uhr)
chabo ist offline   Mit Zitat antworten
Alt 14-12-2007, 15:51   #6 (permalink)
ChronoGuard
 
Benutzerbild von SpecOps-12
 
Registriert seit: Mar 2002
Ort: Saarbrücken
Beiträge: 2.649
Hmm.
Is so ne Sache, weil, der Alphawert wird in einem der folgenden Abfragen im selben Frame natürlich wieder zurückgesetzt, da jeder einzelne MC mit größter Wahrscheinlichkeit auch irgendwann mal wieder keinen Erfolg hat.

Wenn du alle übereinander legst, sind alle 4 mit _alpha = 50.
Der Fehler ist also nicht im Script, sondern in der Logik.

Ich müsst jetzt aber auch selbst erstmal nachdenken, wie man das jetzt am besten löst.
__________________
we will stop enhancing the truth in 3, 2, ...
SpecOps-12 ist offline   Mit Zitat antworten
Alt 14-12-2007, 15:58   #7 (permalink)
Neuer User
 
Benutzerbild von chabo
 
Registriert seit: Oct 2007
Ort: München
Beiträge: 54
Bin dir für jedwelche Hilfe dankbar! Werkel auch schon den ganzen Tag dran rum.
chabo ist offline   Mit Zitat antworten
Alt 14-12-2007, 16:19   #8 (permalink)
ChronoGuard
 
Benutzerbild von SpecOps-12
 
Registriert seit: Mar 2002
Ort: Saarbrücken
Beiträge: 2.649
So ginge es. Ist noch etwas buggy, aber vielleicht kriegst du das ja auch noch raus.
Angehängte Dateien
Dateityp: zip kollabfrage.zip (8,5 KB, 10x aufgerufen)
__________________
we will stop enhancing the truth in 3, 2, ...
SpecOps-12 ist offline   Mit Zitat antworten
Alt 14-12-2007, 16:27   #9 (permalink)
Neuer User
 
Benutzerbild von chabo
 
Registriert seit: Oct 2007
Ort: München
Beiträge: 54
Coole Sache! Danke für deine Mühen! Werd gleich mal noch rumbasteln.
chabo 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