Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 01-02-2012, 20:07   #1 (permalink)
Möchtegern
 
Registriert seit: Sep 2007
Beiträge: 209
Probleme mit localX/localY

Hallo!

Da ich schon länger nichts mehr mit Actionscript gemacht habe (Apple hat es schließlich geschafft, Flash unberechtigter Weise selbst bei unerfahrenen Nutzern schlecht zu machen), bin ich mir nicht sicher ob ich einfach nur einen Denkfehler habe. Momentan denke ich aber es ist ein Bug. Hier die Situation:

Ich habe einen MovieClip, der bei MouseMove die Mouse-Position speichert:

PHP-Code:
this.addEventListener(MouseEvent.MOUSE_MOVE,mousePosition);

function 
mousePosition (e) {
    if(
this.mouseover == true) {
        
this.mousePositionX e.localX;
        
this.mousePositionY e.localY;
    } else {
        
this.mousePositionX 0;
        
this.mousePositionY 0;
    }

Funktioniert soweit tadellos. Wenn ich jedoch in einem Child-MovieClip ein Bild lade, bezieht sich localX/Y auf die Position über dem Bild und nicht auf die Position über dem MovieClip, auf den ich den EventListener gesetzt habe. Das AS in meinem Child-MovieClip sieht wie folgt aus:

PHP-Code:
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;

var 
static_map_url:String "http://maps.google.com/maps/api/staticmap?blabla";

var 
static_map_request:URLRequest = new URLRequest(static_map_url);

var 
static_map_loader:Loader = new Loader();
    
static_map_loader.contentLoaderInfo.addEventListener(Event.COMPLETE,addMap);
    
static_map_loader.load(static_map_request);
    
function 
addMap (e:Event) {
    
    
this.addChild(static_map_loader);
    

Habe auch bereits getestet, was passiert wenn ich statt einem Bild, eine Form in der selben Größe wie das Bild zeichne und sie gleich positioniere. Dann funktioniert es. Wenn ich den Code lösche, stimmt die Mouse-Position ebenfalls.

Kann die Datei leider nicht hochladen, da sie inzwischen schon zu groß ist. Aber hoffe meine Erklärung ist leicht verständlich.

Freue mich auf eure Antworten!

Danke
halber.johann ist offline   Mit Zitat antworten
Alt 01-02-2012, 22:16   #2 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
Zitat:
Ich habe einen MovieClip, der bei MouseMove die Mouse-Position speichert:
wozu? über DisplayObject.mouseX||mouseY, hast du doch permanent Zugriff auf die aktuelle Mausposition (relativ zu dem DisplayObject)

Zitat:
Wenn ich jedoch in einem Child-MovieClip ein Bild lade, bezieht sich localX/Y auf die Position über dem Bild und nicht auf die Position über dem MovieClip, auf den ich den EventListener gesetzt habe.
Stichwort Event-Bubbling.
Zitat:
Zitat von MouseEvent.localX
Die horizontale Koordinate, an der das Ereignis aufgetreten ist, in Relation zum umgebenden Sprite.
relativ zu dem Objekt an dem das Event aufgetreten ist, nicht zu dem Objekt, wo der Event-Listener liegt.
also e.localX == e.target.mouseX und nicht e.currentTarget.mouseX

PHP-Code:
function addMap (e:Event) {
    
    
this.addChild(static_map_loader);
    

ist das wirklich alles, was da gemacht werden soll?
dann ist das überflüssig, und kann auf folgendes zusammegefasst werden:
PHP-Code:
import flash.display.Loader;
import flash.net.URLRequest;

var 
staticMapLoader:Loader = new Loader();
    
staticMapLoader.load(new URLRequest("http://maps.google.com/maps/api/staticmap?blabla"));
addChild(staticMapLoader); 
noch paar Anmerkungen:
- bitte alle Variablen, Parameter und Funktionsrückgaben Typisieren (das gibt bessere Fehlermeldungen)
- in Flash ist lowerCamelCase üblich, und nicht unterstriche.
- this kannst du dir in den meisten fällen sparen, und den Code damit auch noch besser lesbar machen.

ansonsten: Was genau willst du da bauen? Ich hab irgendwie das Gefühl, da ist noch Raum, Dinge zu vereinfachen.
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist gerade online   Mit Zitat antworten
Alt 02-02-2012, 12:55   #3 (permalink)
Möchtegern
 
Registriert seit: Sep 2007
Beiträge: 209
Hallo Thomas!

Vielen Dank für die ausführliche Antwort:

Zitat:
wozu? über DisplayObject.mouseX||mouseY, hast du doch permanent Zugriff auf die aktuelle Mausposition (relativ zu dem DisplayObject)
Jetzt wo du es sagst, habe noch DisplayObject in der Hilfe überflogen und dabei jedoch nach localX gesucht, nicht nach mouseX.. Aber ist einleuchtend Werde ich gleich so ändern wenn ich zu hause bin.

Zitat:
ist das wirklich alles, was da gemacht werden soll?
dann ist das überflüssig, und kann auf folgendes zusammegefasst werden:
Vorerst ist das alles was gemacht wird. Jedoch habe ich es gleich "ausführlicher" geschrieben, da es sein könnte, dass ich noch mehr damit machen möchte. zB ein Tween wenn das Bild geladen ist.

Zitat:
bitte alle Variablen, Parameter und Funktionsrückgaben Typisieren (das gibt bessere Fehlermeldungen)
Habe ich doch? Wenn mit typisieren ":MovieClip" gemeint ist. Außer bei meinem mousePosition Event, da habe ich es vergessen.

Zitat:
in Flash ist lowerCamelCase üblich, und nicht unterstriche.
Werde ich mir merken, jetzt ist es jedoch zu aufwändig alles umzuschreiben.

Zitat:
this kannst du dir in den meisten fällen sparen, und den Code damit auch noch besser lesbar machen.
Ich hatte früher öfters Probleme mit dem/der Variable-Scope und seit ich mir angewöhnt habe this zu verwenden, hatte ich nie mehr Probleme. Werde das so beibehalten, da ich es für mein persönliches Empfinden auch übersichtlich finde.

Zitat:
ansonsten: Was genau willst du da bauen? Ich hab irgendwie das Gefühl, da ist noch Raum, Dinge zu vereinfachen.
Ich will eigentlich nichts mehr bauen, da es schon fertig ist - bis auf das Problem das dank dir jetzt gelöst ist. Es handelt sich dabei um eine Art Schwerkraft die ich in ein paar MovieClips setze. Kurz erklärt:

onEnterFrame wird anhand der MovieClip-Breite/Höhe der Abstand der Maus zum Registrierungspunkt berechnet, in Prozent.

Dieser Prozentwert wird dann auf einen Festgelegten Maximalwert der Eigenschaften rotationX/Y übertragen. In meinem Fall ist der Maximalwert 5.

Wenn man nun mit der Maus über einen MovieClip fährt, wird dieser je nach Mausposition mehr oder weniger geneigt. Gibt einen sehr netten Effekt wie ich finde.

Das Ganze ist in einer EnterFrame-Funktion um dieser Rotationsveränderung noch ein Easing zu verleihen. Wenn der Code dazu ohne große Änderung verständlich ist, werde ich ihn später noch posten.

Nochmal danke für deine Erklärungen!

EDIT:
Achja: Kann es sein dass bei einer Veränderung der rotationX/Y/Z-Werte, buttonMode bei Child-Elementen fehlschlägt? Also dass kein Hand-Cursor mehr angezeigt wird?

Geändert von halber.johann (02-02-2012 um 13:00 Uhr)
halber.johann ist offline   Mit Zitat antworten
Alt 02-02-2012, 13:12   #4 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Zitat:
Zitat von halber.johann Beitrag anzeigen
Ich hatte früher öfters Probleme mit dem/der Variable-Scope und seit ich mir angewöhnt habe this zu verwenden, hatte ich nie mehr Probleme. Werde das so beibehalten, da ich es für mein persönliches Empfinden auch übersichtlich finde.
Lass mich raten: das war in AS1/2? In AS3 gibt es diese Probleme Dank der Methodenhüllen nicht mehr. Weshalb this i.d.R. tatsächlich überflüssig ist.
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft ist gerade online   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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Flash CS4] FDT - SWC Probleme / Generelle Probleme SchmitzKatze Flash Einsteiger 3 10-11-2011 12:11
ich habe probleme, mit meinem lokalen flash-player unter VISTA probleme!!?! Mylander Flash CS3 Professional 1 26-12-2008 12:51
Probleme mit Flashclient in Firefox, Opera & IE 7... IE 6 funktioniert ohne Probleme Felix T. Flash 8 3 26-02-2007 10:25
Flash homepage Probleme über probleme mophe Flash MX 2004 2 09-09-2005 13:03
Probleme über Probleme Zemmel Flash MX 4 23-05-2004 20:55


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:33 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele