Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 13-09-2006, 10:43   #1 (permalink)
Sightgiver
 
Benutzerbild von Arator
 
Registriert seit: Aug 2001
Beiträge: 368
Kollision mit anderen MCs generell

HI!

Gibt es eine möglichkeit einen generellen HitTest mit MovieClips zu machen. Sprich egal mit welchem anderen MC auf der Bühne ein bestimmter MC kollidiert, es soll was passieren.

Oder ist es einfacher z.B. über eine schleife abzufragen ob er mit MCs kollidiert, in dem ich den anderen MCs z.B. allen einen namen mit mc_ gebe und auf den string im _name überprüfe?

Gruss
Arator
__________________
The issue is not whether you are paranoid. The issue is whether you are paranoid enough.
Arator ist offline   Mit Zitat antworten
Alt 18-10-2006, 11:02   #2 (permalink)
Neuer User
 
Registriert seit: Mar 2006
Beiträge: 28
Kollisionsabfrage im Grid

Hallo,

grundsätzlich muß man alle MC-Paare, zwischen denen etwas geschehen können soll, auch abfragen. Meistens macht man das über eine Schleife:

Code:
var anzahl:Nmber;

for(i = 0; i < anzahl - 1; i++) {
     for(j = i + 1; j < anzahl; j++) {
          objekt1 = this["mc" + i];
          objekt2 = this["mc" + j];
          // -- ABFRAGE --
     }
}
So in etwa. Bei sehr vielen Objekten frißt das aber ordentlich Rechenpower, insbesondere, wenn die Abfragen aufwändig oder so powerfressend wie hitTest() sind.

Du kannst aber ein Grid aufbauen, also ein gedachtes Raster auf der Bühne. Jedes MC "weiß" dann, in welchem Feld es steckt. Und nur, wenn ein anderes MC ihm nahe ist, wird abgefragt.

Ich habe so etwas in ein Tutorial gegossen, eine kommentierte FLA-Datei. Du findest sie auf meiner HP www.dazine.de unter dem Menüpunkt Flash.

Viel Erfolg
Dirk
double-stroke ist offline   Mit Zitat antworten
Alt 18-10-2006, 13:55   #3 (permalink)
Flash and chips.
 
Benutzerbild von Zett
 
Registriert seit: Jun 2001
Ort: Graz
Beiträge: 531
@double-stroke: ist dir bei deinem grid-fla aufgefallen, dass die dinger mit der zeit immer schneller werden? hab's zufällig 5 minuten im hintergrund offen gelassen, da geht dann schon ziemlich die post ab... is aber auch unwichtig. sehr schöne demo!

also ich hab mal ein jump'n'run geschrieben, wo ich recht brutal onEnterFrame alle objekte abgefragt hab - performance-probleme gab das keine. dachte auch an workarounds wie vorher überprüfen, welche objekte sowieso zu weit weg sind, um kollidieren zu können - aber mit bruteForce lief es echt am besten. und das war sogar noch auf einem alten 400MHz-kübel...

also irgendwie so:

Code:
this.MAIN_MC.onEnterFrame = function()
{
  var x = this;
  var y = _root; //bzw wo die zu checkenden mc liegen
  for(var i in y)
  {
    if (typeof y[i]=="movieclip" && y[i]!=x && y[i]!=y)
    {
       if(x.hitTest(y[i]))
       {
	trace("HIT: "+y[i]);
       }
    }
  }
}
ich nehm an, die wahrheit liegt irgendwo in der mitte...
__________________
The map is NOT the territory.

Geändert von Zett (18-10-2006 um 13:56 Uhr)
Zett ist offline   Mit Zitat antworten
Alt 19-10-2006, 09:32   #4 (permalink)
Neuer User
 
Registriert seit: Mar 2006
Beiträge: 28
Schneller werdende Bälle und brutForce();

Hi,

danke für den Hinweis mit den schneller werdenden Bällen. Das kommt daher, daß beim Abprallen vom Rand ihre Position korrigiert wird, aber der Geschwindigkeitsvektor nicht. Der müßte nämlich beim Frame nach der Randkollision einmalig herabgesetzt werden, und zwar um den Betrag, den die Versetzung dem Ball "gestohlen" hat. Da aber in den meisten Fällen Reibungs- und Prallverluste die Bewegung recht schnell dämpfen, spielt dieser Fehler keine Rolle. Auf solche Verluste habe ich im Tut aber verzichtet, um das Wesentliche herauszuarbeiten. Aber danke für den Hinweis.

brutForce(); (so einen Befehl sollte es geben, finde ich) ist tatsächlich möglich, solange innerhalb dieser Abfrage nur einfache Funktionen ablaufen. Beim Billard, das ich gemacht habe, laufen mehrere solcher Schleifen ab. Aber in der Schleife, die die Kollisionen abfragt, sind einfach zu viele mathematische Funktionen drin, also das Grid. Als ich dann Schrägen an den Banden, wo es zu den Löchern geht, dazuprogrammiert habe, wurden sie unentbehrlich.

So, das wars.
Bis bald
Dirk
double-stroke 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:41 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele