Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 02-12-2008, 19:28   #1 (permalink)
Neuer User
 
Registriert seit: Feb 2008
Beiträge: 45
Question Sind leere Displayobjekte durchklickbar?

Hallo, ich will verhindern, dass nach dem ein Objekt angeklickt wurde und ein Tween läuft andere Objekte anklickbar sind. Deshalb habe ich eine leere Shape mit der Größe der Bühne gemacht und beim Klicken geadded. Wenn der Tween durch ist wieder removed. Ich dachte, wenn die Shape über den Buttons liegt könnt ich nicht durch sie durch klicken?

Eine Alternative wäre natürlich einen gefüllten MovieClip in die Bibliothek zu legen und den zu nehmen, oder die Shape mit draw zu füllen. Diese Massnahmen wiegen mir aber zu viel für so eine simple Sache. Gibts da eventuell noch was anderes, was man mit wenig Code unsichtbar über die Bühne legen kann oder ist es möglich irgendwie grundsätzlich die Funktion des MouseEvents zu sperren, währen der Tween läuft?
markox ist offline   Mit Zitat antworten
Alt 02-12-2008, 19:31   #2 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
EventListener einfach entfernen, bevor der Tween startet und wieder setzen, wenn der Tween durch ist.
Omega Psi ist offline   Mit Zitat antworten
Alt 02-12-2008, 19:43   #3 (permalink)
Neuer User
 
Registriert seit: Feb 2008
Beiträge: 45
Zitat:
Zitat von Omega Psi Beitrag anzeigen
EventListener einfach entfernen, bevor der Tween startet und wieder setzen, wenn der Tween durch ist.
Naja, so einfach ist das nicht, da es sich um 24 Instanzen einer Klasse handelt die alle ihren eigenen EventListener haben.
markox ist offline   Mit Zitat antworten
Alt 02-12-2008, 21:12   #4 (permalink)
I'M A CYBORG
 
Registriert seit: Apr 2007
Ort: ---------
Beiträge: 372
Hallo
Vlt. mit einer Variablen
etwa so:
ActionScript:
  1. var clickVar:Boolean=true;
  2.  
  3. //in der Listener Function abfragen:
  4. if(!clickVar){return;}else {/*starteTween*/ clickVar=false;}
  5.  
  6. //und im Tween mit onMotionFineshed: clickVar =true;
  7.  

MFG
speedhost ist offline   Mit Zitat antworten
Alt 02-12-2008, 21:23   #5 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Dann mach einen und differenziere darin die targets. Dann kannst du die einfach entfernen.
Omega Psi ist offline   Mit Zitat antworten
Alt 02-12-2008, 21:30   #6 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Wenn dein Aufbau so wie der ist, kannst du mit mouseChildren den ganzen Spaß stoppen.
PHP-Code:
package  
{
    
import flash.display.*;
    
import flash.events.*;
    
    public class 
Test extends Sprite
    
{
        
        public function 
Test() 
        {
            
super();
            
            
init();
        }
        
        private function 
init():void
        
{
            
// create dummy instances
            
for( var i:int 05i++ )
            {
                var 
s:Sprite = new Sprite();
                
                
s.graphics.beginFill0xFF0000 );
                
s.graphics.drawRect002020 );
                
s.graphics.endFill();
                
                
s.addEventListenerMouseEvent.CLICKonClick );
                
                
s.30;
                
addChild);
            }
        }
        
        private function 
onClickevent:MouseEvent ):void
        
{
            
trace("click: " event.target );
            
            
// disable mouseEvent
            
this.mouseChildren false;
        }
    }

__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 03-12-2008, 09:38   #7 (permalink)
Neuer User
 
Registriert seit: Feb 2008
Beiträge: 45
Zitat:
Zitat von speedhost Beitrag anzeigen
Hallo
Vlt. mit einer Variablen
Das könnte ich mal versuchen, da ich sowieso schon diese extra Klasse überall rumreiche um um zu wissen welches Objekt angeklickt wurde und welche Koordinaten es hat:
ActionScript:
  1. package {
  2.     public class Selected {
  3.         private var _zahl:String;
  4.         private var _xK:int;
  5.         private var _yK:int;       
  6.         public function Selected():void {
  7.         }
  8.         public function get zahl():String {
  9.             return this._zahl;
  10.         }
  11.         public function set zahl(zahl:String):void {
  12.             this._zahl = zahl;
  13.         }
  14.         public function get xK():int {
  15.             return this._xK;
  16.         }
  17.         public function set xK(xK:int):void {
  18.             this._xK = xK;
  19.         }
  20.         public function get yK():int {
  21.             return this._yK;
  22.         }
  23.         public function set yK(yK:int):void {
  24.             this._yK = yK;
  25.         }
  26.     }
  27. }
Zitat:
Zitat von Omega Psi Beitrag anzeigen
Dann mach einen und differenziere darin die targets. Dann kannst du die einfach entfernen.
Tut mir leid, aber ich habe keine Ahnung wie ich das machen soll.
Zitat:
Zitat von rendner[i] Beitrag anzeigen
Wenn dein Aufbau so wie der ist, kannst du mit mouseChildren den ganzen Spaß stoppen.
Da steige ich jetzt so auf den Ersten Blick auch nicht ganz durch, mouseChildren kenn ich noch nicht, das werde ich mir mal genauer ankucken.

Also, danke erstmal für die Antworten. Aber ich merk schon, dass mein Code mittlerweile so verworren geworden ist, dass es mir schwer fällt meine Proble richtig zu beschreiben. Deshalb setzt ich jetzt einfach noch mal zwei Klassen hier drunter auf die ich mich oben bezogen hatte:

ActionScript:
  1. package {
  2.     import flash.display.*;
  3.     import flash.events.*;
  4.     import fl.transitions.TweenEvent;
  5.     public class Main extends MovieClip {
  6.         private var snowFlake:SnowFlake;
  7.         private var numFlakes:int;
  8.         private var selected:Selected=new Selected();
  9.         private var blockingShape:Shape=new Shape();
  10.         private var sterneArray:Array=new Array();
  11.         private var datum:Date=new Date();
  12.         private var tag:int=datum.getDate();
  13.         private var monat:int=datum.getMonth()+1;
  14.         private var imgLoader:IMGLoader;
  15.         private var einStern:Stern;
  16.         private var inhalt:Inhalt;
  17.         private var bufferStern:Stern;
  18.         private var anzahlSterne:int;
  19.         private var SternXK:int;
  20.         private var SternYK:int;
  21.         private var zufallsZahl:int;
  22.         private var spalte:int;
  23.         private var zeile:int;
  24.         public var zahl:int;
  25.         public function Main() {
  26.             makeBackground();
  27.             debugger();
  28.             lastDayExtender();
  29.             dateChecker();
  30.         }
  31.         private function makeBackground():void {
  32.             numFlakes = 1000;
  33.             for (var i:int; i<numFlakes; i++) {
  34.                 createFlakes();
  35.             }
  36.             imgLoader=new IMGLoader("imgs/background.jpg");
  37.             addChildAt(imgLoader,0);
  38.         }
  39.         function createFlakes():void {
  40.             snowFlake=new SnowFlake();
  41.             addChildAt(snowFlake,0);
  42.         }
  43.         private function debugger():void {
  44.             //zum testen
  45.             tag=1;
  46.             monat=12;
  47.         }
  48.         private function lastDayExtender():void {
  49.             //letztes Türchen kann bis Monatsende geöffnet werden
  50.             if (tag>24) {
  51.                 tag=24;
  52.             }
  53.         }
  54.         private function dateChecker():void {
  55.             if (monat!=12) {
  56.             } else {
  57.                 buildInterface();
  58.             }
  59.         }
  60.         private function buildInterface():void {
  61.             //24 Objekte vom Typ "Stern" erzeugen und ins Array pushen
  62.             for (var i:int=1; i<=24; i++) {
  63.                 einStern=new Stern(i.toString(),selected);
  64.                 einStern.addEventListener("onMotionFinish",motionFinishHandler);
  65.                 einStern.addEventListener("onStarSelected",starSelectedHandler);
  66.                 sterneArray.push(einStern);
  67.                 //Auf Wunsch die alten Türchen automatisch öffnen
  68.                 /*if (i<=tag) {
  69.                 einStern.filmLaden();
  70.                 }*/
  71.             }
  72.             //Sterne durchmischen
  73.             anzahlSterne=sterneArray.length;
  74.             bufferStern=new Stern("bufferStern",selected);
  75.             //jedes Element mit einem anderen zufälligen tauschen
  76.             for (i=0; i<anzahlSterne; i++) {
  77.                 zufallsZahl=Math.floor(Math.random()*anzahlSterne);
  78.                 //tauschen
  79.                 bufferStern=sterneArray[i];
  80.                 sterneArray[i]=sterneArray[zufallsZahl];
  81.                 sterneArray[zufallsZahl]=bufferStern;
  82.             }
  83.             //Sterne positionieren und anzeigen
  84.             for (i=0; i<24; i++) {
  85.                 spalte=i%4;
  86.                 zeile=Math.floor(i/4);
  87.                 SternXK=60+spalte*100;
  88.                 SternYK=50+zeile*100;
  89.                 sterneArray[i].positionieren(SternXK,SternYK);
  90.                 addChildAt(sterneArray[i],1);
  91.             }
  92.         }
  93.         private function starSelectedHandler(event:Event):void {
  94.             blockingShape.width=800;
  95.             blockingShape.height=600;
  96.             addChildAt(blockingShape,2);
  97.         }
  98.         //Annimation nach klicken auf Stern beendet?
  99.         private function motionFinishHandler(event:Event):void {
  100.             inhalt=new Inhalt(selected);
  101.             inhalt.x=selected.xK;
  102.             inhalt.y=selected.yK;
  103.             addChild(inhalt);
  104.             removeChild(blockingShape);
  105.         }
  106.     }
  107. }
ActionScript:
  1. package {
  2.     import flash.display.*;
  3.     import flash.text.*;
  4.     import flash.events.*;
  5.     import fl.transitions.Tween;
  6.     import fl.transitions.easing.*;
  7.     import fl.transitions.TweenEvent;
  8.     public class Stern extends Sprite {
  9.         private var dateiName:String;
  10.         private var loader:Loader;
  11.         private var rotationsgrad:Number=new Number(0);
  12.         private var rotationTween:Tween;       
  13.         private var alphaTween:Tween;
  14.         private var selected:Selected=new Selected();
  15.         public function Stern(zahl:String,selected:Selected) {
  16.             this.zahl.text=zahl;
  17.             this.selected=selected;
  18.             this.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler);
  19.         }
  20.         private function mouseDownHandler(event:MouseEvent):void {
  21.             this.removeEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler);
  22.             //setzen der aktuell gewählten Zahl
  23.             selected.zahl=zahl.text;
  24.             selected.xK=this.x;
  25.             selected.yK=this.y;
  26.             removeChild(zahl);
  27.             rotationTween = new Tween(this, "rotation", Regular.easeInOut, 0, 360, 5, true);
  28.             alphaTween = new Tween(this, "alpha", Regular.easeOut, 1, 0, 5, true);
  29.             alphaTween.addEventListener(TweenEvent.MOTION_FINISH,motionFinishHandler);     
  30.             dispatchEvent(new Event("onStarSelected"))
  31.         }
  32.         private function motionFinishHandler(event:TweenEvent):void {
  33.             parent.removeChild(this);
  34.             dispatchEvent(new Event("onMotionFinish"))
  35.         }
  36.         public function positionieren(sternXK:int,sternYK:int) {
  37.             //wird von Main aufgerufen
  38.             this.x=sternXK;
  39.             this.y=sternYK;
  40.         }
  41.     }
  42. }
markox ist offline   Mit Zitat antworten
Alt 03-12-2008, 11:30   #8 (permalink)
Neuer User
 
Registriert seit: Feb 2008
Beiträge: 45
Thumbs up

Was es alles gibt .
stage.mouseChildren=false;
stage.mouseChildren=true;
...zwei Zeilen, genau was ich brauche. Danke!
markox 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 16:40 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele