hitTestObject und hitTestPoint [Flash 9]
| Beiträge: 15 Registriert: Apr 2011
| 29.06.2011, 13:48
Hallo Leute,
ich arbeite an einem Solarrechner. Habe ein Problem gehabt mit einer Formel die nicht von mir gelöst werden konnte also habe ich es auf einem anderen Weg versucht, ohne Formel. Ich weiss ist nicht besonders toll aber naja. Geht halt nicht anders. Jetzt habe ich dabei allerdings ein anderes Problem.
Ich habe eine Grafik in einzelne Vektoren nachgezeichnet und diese dann in MCs umgewandelt. Sind die Kreise mit den Prozentangaben wie unter dem Link unten zu sehen ist. Habe dann einen MC gemacht in Form eines Kreises mit einem weitern MC in Form eines Punktes darim. Jetzt dachte ich mir ich kann den grossen KreisMC drehen und die x Koordinate des punktes darin verändern um dann mit hittest auszulesen über welchem Bereich der Karte er sich befindet und so an die Prozente kommen. Denkste habe da wohl nen Denkfehler drinnen. Hier mal der entsprechende Codeschnipsel.
ActionScript:1 2 3 4 5 6 | function get_performance_percent(){
var current_percent_map = solar_percent_map.solar_percent_map_95;
var disc = solar_percent_map.solar_percent_map_disc_deformed.solar_percent_map_disc;
var drop = solar_percent_map.solar_percent_map_disc_deformed.solar_percent_map_disc.solar_percent_map_drop;
trace(current_percent_map.hitTestPoint(drop.x, drop.y, true));
}
|
bei hitTestObject habe ich das Problem das nicht die Kreise an sich sondern die Rahmen erkannt werden. Komischerweis funktioniert es aber damit. Nur halt nicht an den Objektkanten sondern den Rahmen.
Hier mal mein bisheriges Unterfangen --> http://www.green-future-energy.de/Solarrechner.swf
p.s. die Scheibe mit den Prozenten und der Punkt etc. sind nachher nicht sichtbar. | | | Beiträge: 133 Wohnort: Straight Outta
Berlin-City Registriert: Aug 2006
| 29.06.2011, 14:24
Hallo,
mal auf die Schnelle: ich schätze dein Problem ist, dass jeder MovieClip ein eigenes Koordinatensystem mitbringt. Die Funktionen localToGlobal und globalToLocal könnten dir vielleicht helfen.
Verstehe ich das richtig, dass du das alles nur machst, um an die Daten (die %-Werte) zu kommen und die Visualisierung nur Mittel zum Zweck ist? Wenn ja, dann würde ich die Daten auch in Daten-Objekten halten. Dein Bild ist ja eigentlich nichts anderes als eine Tabelle. Da würde doch ein zweidimensionales Array passen.
meineDaten[xx][yy] | | | Beiträge: 15 Registriert: Apr 2011
Themenautor/in
| 29.06.2011, 14:30
In ein Array? Wäre das nicht etwas ungenau da die Prozente ja in Kreisen dargestellt sind? Müsste denke ich mal ein ziemlich heftiges Array sein wenn die Werte möglichst genau sein sollen. Oder habe ich das falsch verstanden. Mit dem "Aufrastern und in ein Array packen" habe ich mir auch gedacht, nur halt die Genauigkeit geht dann flöten. globalToLocal etc. habe ich mir schon angeschaut habe es aber net so ganz umsetzen können. Hat jedenfalls nicht so ganz gefunzt bei mir. Schaue ich mir aber nochmal an. Danke schonmal für den Vorschlag.
Falls das mit dem Array anders gemeint war als ich es verstanden habe erleutere es mir bitte nochmal genauer. Danke. | | | Beiträge: 15 Registriert: Apr 2011
Themenautor/in
| 29.06.2011, 14:35
Jedes mal wenn ich einen Movieclip mit localToGlobal auslesen will geht es nicht(NOOB?). Ich habe glaube ich es so verstanden das ein Point Object erzeugt werden muss. Ist das richtig? Wie wende ich das auf einen MC an? | | | Beiträge: 133 Wohnort: Straight Outta
Berlin-City Registriert: Aug 2006
| 29.06.2011, 14:36
Aber es gibt doch eh ein Raster, oder?
Ich sehe da eine Tabelle mit 19 Zeile und 19 Spalten. Hast du denn innerhalb der Kästen noch Zwischenwerte? Ist für mich nicht erkennbar. | | | Beiträge: 133 Wohnort: Straight Outta
Berlin-City Registriert: Aug 2006
| 29.06.2011, 14:44
localToGlobal dient dazu, Positionen aus einem lokalen Koordinatensystem, in das globale Koordinatensystem umzuwandeln.
var localPoint:Point = new Point(mc.x, mc.y);
var globalPoint:Point = mc.localToGlobal(localPoint); | | | Beiträge: 15 Registriert: Apr 2011
Themenautor/in
| 29.06.2011, 15:23
So, habe ich umsetzen können mit dem Punkt. Die Ausgabe zeigt mir die globalen Coord des Punktes an. Nur muss ich die Coord der einzelnen runden MCs auch globaliesieren oder? Jedenfalls klappt die Abfrage der Kollision so halb/halb. So habe ich es bis jetzt.
ActionScript:1 2 3 4 | var actual_percent_map = root['solar_percent_map_' + 90];
var clickPoint:Point = new Point(drop.x, drop.y);
var coord = drop.localToGlobal(clickPoint);
trace(actual_percent_map.hitTestPoint(coord.x,coord.y,true));
|
| Geändert von SNUFFSEED am 29.06.11 um 15:23 Uhr | |
| | Beiträge: 133 Wohnort: Straight Outta
Berlin-City Registriert: Aug 2006
| 29.06.2011, 15:37
- dein Punkt liegt ja in einem MC mit einem Koordinatensystem, sagen wir MC1, dort hat er die Koordinaten p1
- mit localToGlobal (aufrufen in MC1) wandelst du diese Koordinaten in das Koordinatensystem von root um, nun hast du p2
- dein hit-test-mc liegt ja vielleicht nicht in root, sondern in einem weiteren MC, sagen wir MC3. dann musst du mc3.globalToLocal(p2) aufrufen und bekommst p3
- p3 kannst du dann für das hitTest benutzen
dort könnte das problem liegen, aber ganz sicher bin ich mir nicht. | | | Beiträge: 15 Registriert: Apr 2011
Themenautor/in
| 29.06.2011, 16:58
Danke Danke Danke. Habe es geschafft dank Deiner Hilfe.....SCHLEIM. Nein ehrlich, funktioniert. War vom falschen MC beim hitTest ausgegangen. Mann endlich. Jetzt kann ich es fertigstellen. | |
| Ähnliche Beiträge zum Thema | |
|
Flashhilfe.de Flash Platform Tipps & Tutorials Flash Platform Andere Programmiersprachen Jobangebote Diskussionen
Flashhilfe News
Regeln & Bedingungen
|