| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Oct 2007
Beiträge: 12
|
Hallo allerseids: Ich schlage mich gerade mit dem leidlichen Thema Kollisionsabfrage herum. Die MCs werden per Random positioniert. Ich hab das ganze Sicherheitshalber mal nur auf die X-Achse beschränkt, Y bleibt immer gleich. Mein Problem ist, dass die hitTest-Funktion nicht immer greift - obwohl manche MCs noch überlappen, gibt sie "false" aus. Ich hab das ganze auch schon per hitTestObject versucht, mit demselben Ergebnis. Möchte das ganze allerdings lieber ohne hitTestObject lösen, da in einer späteren Fassung eine Teilüberlappung möglich sein soll. Ich würde mich sehr über den ein oder anderen Denkanstoß freuen - danke vorweg! Code: var totalShapes:int = 10; // Total number of shapes
var writtenShapes:Array = new Array(); // Array that holds all the shapes
for(var i:uint = 0; i < totalShapes; i++){
var theshape = new shape_01;
var theshape_coordinates= getCoordinates();
theshape.name = i;
theshape.alpha = 0.6;
theshape.x = theshape_coordinates[0];
theshape.y = 200;
writtenShapes[i] = [theshape];
stage.addChild(theshape);
}
function getCoordinates(){
var coordinateX:int = Math.ceil(Math.random()*stage.stageWidth);
var coordinateY:int = Math.ceil(Math.random()*stage.stageHeight);
var coordinates:Array = new Array(); // holds the two coordinates
while(hitTest(coordinateX)){
coordinateX = Math.ceil(Math.random()*stage.stageWidth);
}
coordinates = [coordinateX, coordinateY];
return coordinates;
}
function hitTest(coordinateX){
var output:Boolean = false;
for(var i:uint = 0; i < writtenShapes.length; i++){
if(coordinateX > writtenShapes[i][0].x && coordinateX < writtenShapes[i][0].x + writtenShapes[i][0].width){
output = true;
}
}
return output;
} |
| | |
| | #2 (permalink) |
| Neuer User Registriert seit: Feb 2005
Beiträge: 457
|
Die Zeile kommt mir komisch vor: ActionScript:
ActionScript:
shape_01 in der Bibliothek liegen. Könnte mir auch vorstellen, dass es Probleme gibt, da Du Deine Funktion hitTest genannt hast, Flash aber den Namen "hitTest" selber schon belegt hat.
__________________ Kunde: Ich hab da mal eine dumme Frage: Online-Banner sind schon fürs Internet, oder? |
| | |
| | #3 (permalink) |
| Neuer User Registriert seit: Oct 2007
Beiträge: 12
|
Hallo! Danke für die Antwort. Ja, konform müssten natürlich die Klammern drin sein, hat aber auch ohne geklappt - trotzdem danke für den Hinweis. Mit dem Funktionsnamen hat Flash kein Problem. Ich konnte das Ganze auch bereits lösen, und zwar indem ich in meinen MovieClip zu Testzwecken einfach kurz ein Rechteck gemacht habe, welches ich dann wieder gelöscht hab. Seitdem funktioniert es ohne Tadel. Ich habe zwar absolut keine Ahnung, was da wieder mal los war (ist mein CS5 vielleicht noch etwas verbuggt?), aber Hauptsache es geht jetzt. Trotzdem herzlichen Dank! |
| | |
| | #4 (permalink) | |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.109
| Zitat:
hitTestPoint prüft, ob sich ein punkt innerhalb eines mc's befindet. hitTestObject allerdings auch! es erfolgt keine überprüfung, ob sich die zwei konturen überschneiden, sondern es wird lediglich der objekt-nullpunkt als prüfpunkt verwendet. falls du eine überschneidung zweier objekt-konturen benötigst, das geht mit BitmapData.hitTest und für solche kunststückchen ;-) if(coordinateX > writtenShapes[i][0].x && coordinateX < writtenShapes[i][0].x + writtenShapes[i][0].width){ empfehle ich dir: object.getRect(); und die funktionen aus der rectangle-klasse wie z.b. containsRect, intersection usw. mal an zu sehen.
__________________ die ultimative antwort auf alle programmierfragen: der debugger! - vor eine programmzeile klicken (==roter punkt) - im menü "debuggen" aufrufen - auf den grünen pfeil klicken - im swf etwas machen (der programmablauf hält beim roten punkt) - links die objekte auswählen, variable, interne... mal alles ansehen! mit dem debugger kann man sein programm schrittweisse abarbeiten und in alle variable reinsehen. mfg h.g.seib www.SeibsProgrammLaden.de Geändert von hgseib (21-07-2010 um 18:14 Uhr) | |
| | |
| | #5 (permalink) |
| Neuer User Registriert seit: Oct 2007
Beiträge: 12
|
Hallo hgseib, vielen Dank für deine aufschlussreiche Erklärung - wieder was gelernt! Wie vorhin angemerkt klappt es ja gottseidank mittlerweile auch mit meinem Code, object.getRect() ist natürlich auch eine praktische Hilfsfunktion, aber viel weniger Kunststück wäre es ja auch nicht, müsste ich doch dieselbe Menge Text mit gleichem Ergebnis schreiben, denke ich? Trotzdem herzlichen Dank - BitmapData.hitTest werde ich beizeiten auch mal versuchen! Liebe Grüße |
| | |
| | #6 (permalink) | |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.109
| Zitat:
x+width geht nur, wenn der nullpunkt links oben steht. aber was, wenn der sich mal in der mitte oder ganz wo anders befindet? dann geht das sowieso nur noch mit getRect bzw. getBounds. da könnte man es auch gleich benützen und so für alle fälle vorsorgen. und generell gilt: wenn es für irgend etwas eine funktion gibt, dann ist es besser diese zu benützen, als die selbe funktion selbst zu programmieren. du willst ja auch irgendwann mal die y- position berücksichtigen? eben, dann ist es besser die vorhandenen funktionen zu verwenden, ob sich die rechtecke schneiden (wenn das mit den umfangsrechtecken langt).
__________________ die ultimative antwort auf alle programmierfragen: der debugger! - vor eine programmzeile klicken (==roter punkt) - im menü "debuggen" aufrufen - auf den grünen pfeil klicken - im swf etwas machen (der programmablauf hält beim roten punkt) - links die objekte auswählen, variable, interne... mal alles ansehen! mit dem debugger kann man sein programm schrittweisse abarbeiten und in alle variable reinsehen. mfg h.g.seib www.SeibsProgrammLaden.de | |
| | |
![]() |
| Lesezeichen |
| Stichworte |
| hittest, kollision, math.random |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Kollisionsabfrage so einfach wie möglich | ellodron | ActionScript 2 | 17 | 24-12-2007 13:06 |
| Einfach if-Schleife geht einfach nicht... Warum? | Arne_Schmidt | ActionScript 1 | 6 | 01-06-2007 16:22 |
| Einfach Random MovieClip Laden | zerok | Flash Einsteiger | 2 | 20-05-2006 23:57 |
| ganz einfach geht aber trotzdem net *lol* random | DarkFreak | Flash MX | 4 | 12-02-2004 18:22 |
| random: nicht getriggert sondern einfach zufällig | vanilla coke | ActionScript 1 | 3 | 28-07-2003 15:25 |