Zurück   Flashforum > Flash > Flash Fortgeschritten > Flash MX

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 08-08-2007, 10:16   #1 (permalink)
*
 
Benutzerbild von Phil Hobbes
 
Registriert seit: Aug 2001
Ort: St. Gallen, CH
Beiträge: 563
Variablen mit mehreren Instanzen ansprechen

Hi,

In zwei voneinander unabhängigen MC's soll getestet werden, ob es einen "hit" mit der Maus gibt. Bei einer positiven Abfrage soll eine ganze Palette an Variablen geändert werden (in diesem Fall Koordinaten von MC's):
PHP-Code:
onClipEvent (enterFrame) {
    if (
this.hitTest(_root._xmouse_root._ymouse)) { 
        
distxscale targetxscale _xscale;
        
_xscale += distxscale/delay;
        
distyscale targetyscale _yscale;
        
_yscale += distyscale/delay;

        
_root.mc1.diodetxt.targetalpha 0;
        
_root.mc1.kanticplus.targetx 283;
        
_root.mc1.kanticplus.targety 369;
        
_root.mc1.kanticplustxt.targetx 259;
        
_root.mc1.kanticplustxt.targety 445;
        
_root.mc1.qswitch.targety 418;
        
_root.mc1.qswitchtxt.targety 587;
    } else {
        
distxscale targetxscale2 _xscale;
        
_xscale += distxscale/2;
        
distyscale targetyscale2 _yscale;
        
_yscale += distyscale/2;

        
_root.mc1.diodetxt.targetalpha 100;
        
_root.mc1.kanticplus.targetx 263;
        
_root.mc1.kanticplus.targety 302;
        
_root.mc1.kanticplustxt.targetx 234;
        
_root.mc1.kanticplustxt.targety 378;
        
_root.mc1.qswitch.targety 448;
        
_root.mc1.qswitchtxt.targety 517;
    }

Ein ähnliches Skript, welches zum Teil dieselben Variablen anspricht, befindet sich in einem zweiten MC. Das Problem ist, dass sich eine Variable nur von einer Instanz ansprechen lässt. Jeder Versuch einer anderen Instanz, eine gemeinsam anzusprechende Variable zu ändern, bleibt ohne Erfolg. Die Variable behält ihren Wert.

Der Movie läuft im Flash 6 Modus. Ist dies womöglich ein Bug, welcher in späteren Versionen behoben wurde?

Vielen Dank schon mal.
Phil Hobbes ist offline   Mit Zitat antworten
Alt 08-08-2007, 14:15   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
onClipEvent ist total veraltete syntax ...



probier mal
_level0.mc1.diodetxt.targetalpha = 0;
anstatt
_root.mc1.diodetxt.targetalpha = 0;

(natürlich überall das _root durch _level0 ersetzen)


Zitat:
Zitat von Phil Hobbes Beitrag anzeigen
Ist dies womöglich ein Bug
bei 99,9999999% aller fälle erweist sich der user als fehlerquelle.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (08-08-2007 um 14:17 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 08-08-2007, 19:16   #3 (permalink)
*
 
Benutzerbild von Phil Hobbes
 
Registriert seit: Aug 2001
Ort: St. Gallen, CH
Beiträge: 563
Zitat:
Zitat von hgseib Beitrag anzeigen
onClipEvent ist total veraltete syntax ...
Was wäre denn die moderne Version?
Phil Hobbes ist offline   Mit Zitat antworten
Alt 08-08-2007, 19:24   #4 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.142
ActionScript:
  1. var square_mc:MovieClip = this.createEmptyMovieClip("square_mc", this.getNextHighestDepth());
  2. square_mc.beginFill(0xFF0000);
  3. square_mc.moveTo(0, 0);
  4. square_mc.lineTo(100, 0);
  5. square_mc.lineTo(100, 100);
  6. square_mc.lineTo(0, 100);
  7. square_mc.lineTo(0, 0);
  8. square_mc.endFill();
  9. square_mc.onRelease = function() {
  10.     trace("onRelease fired by "+this);
  11. }
  12. square_mc.onEnterFrame = function() {
  13.     trace("onenterFrame fired by "+this);
  14. }
Das wäre schöner.
Omega Psi ist offline   Mit Zitat antworten
Alt 08-08-2007, 20:49   #5 (permalink)
*
 
Benutzerbild von Phil Hobbes
 
Registriert seit: Aug 2001
Ort: St. Gallen, CH
Beiträge: 563
Schönheitspreise gibt es leider nicht zu gewinnen. Das Problem bleibt: Zwei Befehle aus zwei "onEnterFrame"-Funktionen an die gleiche Varible sind einer zu viel.
Phil Hobbes ist offline   Mit Zitat antworten
Alt 09-08-2007, 08:35   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
kann es sein, das du mit 2 onEnterFrames STÄNDIG die selbe variable überschreiben willst?

a=5;
a=7;

was glaubst du passiert mit der 5?
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 09-08-2007, 08:49   #7 (permalink)
*
 
Benutzerbild von Phil Hobbes
 
Registriert seit: Aug 2001
Ort: St. Gallen, CH
Beiträge: 563
Das ist die Frage: Spreche ich mit den beiden "onEnterFrame"-Funktionen die Variable auch ständig, wenn ich dies innerhalb der Funktion nur tue, falls die Maus über den MC fährt (siehe Skript)?

Und mein Problem ist übrigens nicht, dass sich der Wert der Variable ändert, sondern dass sie sie dies eben nicht tut.
Phil Hobbes ist offline   Mit Zitat antworten
Alt 09-08-2007, 08:54   #8 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
bau ein
trace("hallo");
ein, dann siehst du wer wann läuft. ein onEnterFrame läuft ewig, bis es deleted wird.

und wenn du mit einem onEnterFrame den wert änderst und mit dem anderen onEnterFrame den alten wert wieder reinschreibst, dann wird man in der tat nicht viele änderungen sehen ;-)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 09-08-2007, 09:08   #9 (permalink)
*
 
Benutzerbild von Phil Hobbes
 
Registriert seit: Aug 2001
Ort: St. Gallen, CH
Beiträge: 563
Ja, schon klar. Aber ich habe doch die if-Schleife eingebaut.
Phil Hobbes ist offline   Mit Zitat antworten
Alt 09-08-2007, 09:16   #10 (permalink)
no guts no glory
 
Benutzerbild von readme.txt
 
Registriert seit: May 2004
Ort: Nordhorn
Beiträge: 7.998
Aber wenn 2 Verschiedene MCs in einem onEnterFrame ständig in einer if/else die selben Variablen überschreiben ist doch logisch das ständig min. 1 mal die if und 1 mal die else zutreffen? Das kann ja nicht gehen.
__________________
Bitte keine Privaten Nachrichten mit Fragen, dazu ist das Forum selbst da. Danke.

'We live in an amazing, amazing world, and it's wasted on the crappiest generation of spoiled idiots.'
readme.txt ist offline   Mit Zitat antworten
Alt 09-08-2007, 18:48   #11 (permalink)
*
 
Benutzerbild von Phil Hobbes
 
Registriert seit: Aug 2001
Ort: St. Gallen, CH
Beiträge: 563
Ein dummer Überlegungsfehler meinerseits. Danke für die deine Einsichten, readme.txt.
Phil Hobbes ist offline   Mit Zitat antworten
Alt 10-08-2007, 08:50   #12 (permalink)
no guts no glory
 
Benutzerbild von readme.txt
 
Registriert seit: May 2004
Ort: Nordhorn
Beiträge: 7.998
Das lässt sich allerdings relativ einfach umgehen (wobei sich zuerst die Frage stellt warum du kein RollOver benutzt?):

Im Grunde musst du im else-Teil nur checken ob nicht ein anderer beteiligter MC einen hitTest ausgelöst hat (auf der bühne liegen 2 MCs, "mc1" und "mc2", und ein Textfeld "txtTest"):

PHP-Code:
_root.txtTest.text "Kein Hit";

var 
anz:Number  2;

for(var 
i:Number=1i<=anzi++) {
  var 
mc:MovieClip _root["mc"+i];
      
mc.anz       anz;
      
mc.id        i;
      
  
mc.onEnterFrame = function():Void {
    if(
this.hitTest(_root._xmouse,_root._ymouse)) {
      
_root.txtTest.text "Hit: "+this._name;
    } else {
      var 
hit:Boolean false;
      
      for(var 
i:Number=1i<=this.anzi++) {
        var 
mc:MovieClip _root["mc"+i];
        
        if(
mc.hitTest(_root._xmouse,_root._ymouse) && != this.id) {
          
hit true;
        }
      }
      !
hit _root.txtTest.text "Kein Hit" null;
    }
  }

__________________
Bitte keine Privaten Nachrichten mit Fragen, dazu ist das Forum selbst da. Danke.

'We live in an amazing, amazing world, and it's wasted on the crappiest generation of spoiled idiots.'
readme.txt 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 23:58 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele