Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 01-08-2004, 20:49   #1 (permalink)
Neuer User
 
Registriert seit: Apr 2003
Beiträge: 144
Question Siwtch Case Confusion

Verzweilung...

HILFE

Code:
var missinpoint = 1;

_root.navBt5.onRelease = function() {

//CODE 1
switch (missinpoint) {
	case 1 :
//CODE 2
break;
//CODE 3
};
//CODE 4
So, dass ist ein teil des Codes.
Code 1 und Code 4 werden ausgeführt
Code 2 und 3(3 sind weitere cases) nicht

Evtl. Denken jez manche der CODE 2 wäre fehlerhaft. Aber folgender Code funktioniert

Code:
var missinpoint = 1;

_root.navBt5.onRelease = function() {

//CODE 1
//switch (missinpoint) {
//	case 1 :
//CODE 2
break;
//CODE 3
//};
//CODE 4
Es kann also nur an dem Switch Case liegen, was kann das Problem sein?
Oder bin ich einfach nur zu dumm?

The
GINemrod
GINemrod ist offline   Mit Zitat antworten
Alt 01-08-2004, 23:08   #2 (permalink)
All-rounder
 
Benutzerbild von thebiz
 
Registriert seit: Mar 2004
Ort: Bayerische Rhön
Beiträge: 2.507
Weißt Du, wie switch funktioniert
Eigentlich genau wie "if".
Beispiel:

PHP-Code:
this._lockroot true;
var 
1;
_root.button_mc.onPress = function() {
 switch (
a) {
 case 
:
  
trace(a);
  break;
 case 
:
  
trace(" 2.Position");
  break;
 case 
:
  
trace(" 3.Position");
 }
 
a++;
}; 

Erklärung:

PHP-Code:
 switch(prüfvariable){ 
 case 
zustandPrüfvariable:
   
tue folgendes;
   break;   
// das break unterbricht ein weiteres durchlaufen bis zum Ende
 
case zustandPrüfvariable:
   
tue folgendes;

__________________

--------------------------------
Ich klicke, ergo bin ich. (me)
--------------------------------
thebiz ist offline   Mit Zitat antworten
Alt 01-08-2004, 23:14   #3 (permalink)
All-rounder
 
Benutzerbild von thebiz
 
Registriert seit: Mar 2004
Ort: Bayerische Rhön
Beiträge: 2.507
Nochmal genau zum Vergleichen mit der if-Abfrage:

PHP-Code:
 switch(a){ 
case 
1:                      // if(a==1){trace("a ist jetzt 1");}
trace("a ist jetzt 1");
break;                       
// nicht mehr case 2 durchlaufen, wenn case 1..
case 2:                      // ..true ist.
trace("a ist jetzt 2");

__________________

--------------------------------
Ich klicke, ergo bin ich. (me)
--------------------------------

Geändert von thebiz (01-08-2004 um 23:16 Uhr)
thebiz ist offline   Mit Zitat antworten
Alt 02-08-2004, 02:25   #4 (permalink)
-
 
Benutzerbild von pape
 
Registriert seit: Jan 2004
Beiträge: 3.002
Zitat:
Zitat von thebiz
Erklärung:

PHP-Code:
 switch(prüfvariable){ 
 case 
zustandPrüfvariable
nur so am Rande... das ist auch möglich:
ActionScript:
  1. lala = random(5)+1;
  2. trace(lala);
  3. einstring = "pape";
  4. switch (true) {
  5.     case (lala == 1):
  6.         trace("lala = 1");
  7.         break;
  8.     case (lala == 2):
  9.         trace("lala = 2");
  10.         break;
  11.     case (lala == 3):
  12.         trace("lala = 3");
  13.         break;
  14.     case (einstring == "pape"):
  15.         trace("einstring == pape und lala ist != 1,2 und 3");
  16.         break;
  17.     default:
  18.         trace("nix erfasst");
  19. }

also nicht umbedingt ein zustand der Prüfvariable nach "case"

grz
Robert
Edit:
im Script war nen kleiner ehler.. stand über all "trace("lala = 1");" statt den enstprechenden Zahlen...

Geändert von pape (02-08-2004 um 02:44 Uhr)
pape ist offline   Mit Zitat antworten
Alt 02-08-2004, 02:40   #5 (permalink)
All-rounder
 
Benutzerbild von thebiz
 
Registriert seit: Mar 2004
Ort: Bayerische Rhön
Beiträge: 2.507
Und wir können sowas machen:

PHP-Code:
 x 3
 
switch (
x) {
  case 
1:
  case 
3:
  case 
5:
    
trace("x ist 1,3 oder 5");
    break;
  default:
    
trace("x ist nicht 1, 3 oder 5");

__________________

--------------------------------
Ich klicke, ergo bin ich. (me)
--------------------------------
thebiz ist offline   Mit Zitat antworten
Alt 02-08-2004, 02:43   #6 (permalink)
-
 
Benutzerbild von pape
 
Registriert seit: Jan 2004
Beiträge: 3.002
jo - geht ja eigentlich daraus hervor, dass man break setzen muss, damit nicht weiterabgearbeitet wird!

aber so isses noch mal ganz klar ausgesprochen
pape ist offline   Mit Zitat antworten
Alt 02-08-2004, 07:41   #7 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
und ums genau zu machen...

switch/case ist mitnichten das gleiche wie eine if-abfrage...

denn:
switch kann nur einen möglichen zustand auswerten
switch kann nur einen wert danach bearbeiten
switch ist eh voll die krücke und viel langsamer
switch iss eigentlich, wenn man es genau betrachtet, für die tonne...

denn z.bsp.:

ActionScript:
  1. a= 'pape';
  2. b= 3;
  3.  
  4. //switch ( ja was und wie denn nun???? )
  5.  
  6. //aber
  7.  
  8. if( a== 'pape' && b==3) tuwas()
  9. else if(a == ' thebiz' && b==3) tuwasanderes();

und außerdem kann ich, wenn eine bedingung, egal ob einfach oder merfacher natur, unendlich viele befehle ausführen für diese bedingung.
dies ist mit switch nicht möglich...auch wirft er gleich fehlermeldungen, wénn man versucht, innerhalb der cases noch zu berechnen...

also alles in allem:
swich ist nicht wie if - arbeitet auch nicht so

und switch ist unnötig wie´ne bulldoge im oberschenkel...


greetz

kelor

Geändert von kelor (02-08-2004 um 07:43 Uhr)
kelor ist offline   Mit Zitat antworten
Alt 02-08-2004, 09:35   #8 (permalink)
Neuer User
 
Registriert seit: Apr 2003
Beiträge: 144
Ähm, ich glaube ihr habt es nicht ganz verstanden

Habe gedacht das mit dem ganzen Code weglassen macht es einfacher. Nunja. Ihn dazulassen macht das Erklären des Probs schwieriger oO

Code:
//Fehlender Navi Punkt: News
var missinpoint = 1;
//ButtonActions
_root.navBt5.onRelease = function() {
	var i = 75;
	var j = 0;
	_root.gnomy.gotoAndPlay(28);
	setInterval(unsichtbar, 10);
	function unsichtbar() {
		_root.navBt5._alpha = i;
		i--;
	}
	switch (missinpoint) {
	case 1 :
		_root.attachMovie("navBt1", "navBt1", 0);
		_root.navBt1._alpha = 0;
		navBt1._x = navBt5._x;
		navBt1._y = navBt5._y;
		id = setInterval(sichtbar, 10);
		function sichtbar() {
			_root.navBt1._alpha = j;
			j++;
			if (j == 75) {
				clearInterval(id);
			}
		}
		break;
	case navBt2 :
		_root.attachMovie("navBt2", "navBt2", 0);
		_root.navBt2._alpha = 0;
		navBt2._x = navBt5._x;
		navBt2._y = navBt5._y;
		id = setInterval(sichtbar, 10);
		function sichtbar() {
			_root.navBt2._alpha = j;
			j++;
			if (j == 75) {
				clearInterval(id);
			}
		}
		break;
	case navBt3 :
		_root.attachMovie("navBt3", "navBt3", 0);
		_root.navBt3._alpha = 0;
		navBt3._x = navBt5._x;
		navBt3._y = navBt5._y;
		id = setInterval(sichtbar, 10);
		function sichtbar() {
			_root.navBt3._alpha = j;
			j++;
			if (j == 75) {
				clearInterval(id);
			}
		}
		break;
	case navBt4 :
		_root.attachMovie("navBt4", "navBt4", 0);
		_root.navBt4._alpha = 0;
		navBt4._x = navBt5._x;
		navBt4._y = navBt5._y;
		id = setInterval(sichtbar, 10);
		function sichtbar() {
			_root.navBt4._alpha = j;
			j++;
			if (j == 75) {
				clearInterval(id);
			}
		}
		break;
	case navBt5 :
		_root.attachMovie("navBt5", "navBt5", 0);
		_root.navBt5._alpha = 0;
		navBt5._x = navBt5._x;
		navBt5._y = navBt5._y;
		id = setInterval(sichtbar, 10);
		function sichtbar() {
			_root.navBt5._alpha = j;
			j++;
			if (j == 75) {
				clearInterval(id);
			}
		}
		break;
	}
	_root.navBt1.removeMovieClip();
	application.loadData("navBt5.xml");
	missinpoint = "navBt5";
};
Folgender Code wird nicht ausführt obwohl der Case zutrifft:

Code:
                _root.attachMovie("navBt1", "navBt1", 0);
                _root.navBt1._alpha = 0;
                navBt1._x = navBt5._x;
                navBt1._y = navBt5._y;
                id = setInterval(sichtbar, 10);
                function sichtbar() {
                        _root.navBt1._alpha = j;
                        j++;
                        if (j == 75) {
                                clearInterval(id);
                        }
                }
Und wenn ich diesen Code so ausführe funktioniert dieser auch, also ist dieser nicht falsch

Es werden keinerlei Fehlermeldungen von Flash ausgegeben

The
GINemrod
GINemrod ist offline   Mit Zitat antworten
Alt 02-08-2004, 09:41   #9 (permalink)
Neuer User
 
Registriert seit: Apr 2003
Beiträge: 144
Ok.... langsam beginne ich an meinem Verstand zu zweifeln

Code:
//Fehlender Navi Punkt: News
var fehlenderpunkt = 1;
//ButtonActions
_root.navBt5.onRelease = function() {
	var i = 75;
	var j = 0;
	_root.gnomy.gotoAndPlay(28);
	setInterval(unsichtbar, 10);
	function unsichtbar() {
		_root.navBt5._alpha = i;
		i--;
	}
	if (fehlenderpunkt == 1) {
		_root.attachMovie("navBt1", "navBt1", 0);
		_root.navBt1._alpha = 0;
		navBt1._x = navBt5._x;
		navBt1._y = navBt5._y;
		id = setInterval(sichtbar, 10);
		function sichtbar() {
			_root.navBt1._alpha = j;
			j++;
			if (j == 75) {
				clearInterval(id);
			}
		}
	}
}
Geht auch nicht

Das geht:

Code:
//Fehlender Navi Punkt: News
var fehlenderpunkt = 1;
//ButtonActions
_root.navBt5.onRelease = function() {
	var i = 75;
	var j = 0;
	_root.gnomy.gotoAndPlay(28);
	setInterval(unsichtbar, 10);
	function unsichtbar() {
		_root.navBt5._alpha = i;
		i--;
	}
	//if (fehlenderpunkt == 1) {
		_root.attachMovie("navBt1", "navBt1", 0);
		_root.navBt1._alpha = 0;
		navBt1._x = navBt5._x;
		navBt1._y = navBt5._y;
		id = setInterval(sichtbar, 10);
		function sichtbar() {
			_root.navBt1._alpha = j;
			j++;
			if (j == 75) {
				clearInterval(id);
			}
		}
	//}
}
Bin ich zu dumm für if?

The
GINemrod
GINemrod ist offline   Mit Zitat antworten
Alt 02-08-2004, 09:46   #10 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
wer lesen kann ist klar im vorteil...

man für was tip ich mir nen wolf, wenn keiner liest....?

Zitat:
und außerdem kann ich, wenn eine bedingung, egal ob einfach oder merfacher natur, unendlich viele befehle ausführen für diese bedingung.
dies ist mit switch nicht möglich...

case ! kann nur einen einzigen befehl abarbeiten...
was du da machst ist schlicht nicht möglich...
es geht net...

und nochmal...auch für dich zumlesen:

Zitat:
switch kann nur einen möglichen zustand auswerten
switch kann nur einen wert danach bearbeiten
switch ist eh voll die krücke und viel langsamer
switch iss eigentlich, wenn man es genau betrachtet, für die tonne...
vergiss das mit switch/case...
da muss entweder if her, oder ne schleife die die möglichen werte aus einem array liest und prüft [würd ich machen] oder sonst was...

aber KEIN switch/case !

greetz

kelor
kelor ist offline   Mit Zitat antworten
Alt 02-08-2004, 09:56   #11 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
Zitat:
Bin ich zu dumm für if?

nö...höchstens für syntax...

1. du kannst einen eben erst attachten mc nur über

_root['deinmcname']._x = ....

korrekt ansprechen...
denn die eckige klammer wertet zum objekt, das davor steht aus´...
außerdem nutzt du mal _root.bla udn dann wiedr nur bla...

wie wäre es mit ner einheitlichen syntax?

ActionScript:
  1. _root.attachMovie(idname_als_string, 'neuerName_als_string', tiefe);
  2. var mc = _root['neuerName_als_string'];
  3.  
  4. mc._x = this._x;

da sind dermaßen viel syntaktische fehler drin, dass ich dir ernsthaft die F1 taste an die hand lege...und ein buch anrate...

innerhalb von btn5 ist btn5 'this'
der neue name eines mc´s darf/soll nicht dem namen des exportnamens entsprechen...
obejkte, die gerade erst erstellt werden kann/soll man mit einer auswertung anrufen, das sie noch nicht zu 100% initialisiert sind...bzw. ansprechbar sind...
[das dürfte meist 'undefined' geben]

einmal bemühte syntax nicht stetig ändern...

intervalle die man startet, sollte man auch wiedr beenden können...

ich bin gespannt wie und wo du die var 'i ' wieder findest?!



jooo...wars das soweit?....*gugg*...#

ich glaub ja...


greetz

kelor
kelor ist offline   Mit Zitat antworten
Alt 02-08-2004, 12:00   #12 (permalink)
All-rounder
 
Benutzerbild von thebiz
 
Registriert seit: Mar 2004
Ort: Bayerische Rhön
Beiträge: 2.507
Hy kelor.

Wenn Du sagst, dass die switch-Anweisung schlechter
ist als die if, dann glaube ich es Dir ganz bestimmt.
Ich habe auch noch keine großartige Erfahrung.
Ich befolge eigentlich den Dingen, die ich im Buch gelesen
habe. Da es eines der besten Bücher ist, fühle ich mich auch
ziemlich sicher damit.
Dort drinnen steht aber auch nur, dass die switch-Anweisung
manchmal leichter zu lesen ist als die if. Mehr Vorteile sind
jedoch nicht aufgelistet.
__________________

--------------------------------
Ich klicke, ergo bin ich. (me)
--------------------------------
thebiz ist offline   Mit Zitat antworten
Alt 02-08-2004, 12:31   #13 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Hi The GINemrod,

dein erster Code macht eigentlich genau das, was er soll.

Code 1 gehört ja nicht zum Switch, wird also unabhängig davon ausgeführt.
Code 2 ist der Code, der ausgeführt wird, wenn der case 1 zutrifft, also wenn missinpoint === 1 ist
Code 3 steht hinter dem break und wird deshalb nicht ausgeführt
Code 4 ist wie Code 1

Wenn dein Code 2 nicht ausgeführt wird, dann stimmt vielleicht der Typ von missinpoint nicht. Ein wichtiger Unterschied zwischen case und if ist der, dass auch der Typ überprüft wird. Der Code wie du ihn hier im Forum geschrieben hast, sollte also klappen, wenn jedoch missinpoint ein String (="1") ist, dann klappt er nicht mehr. Das entspricht dem Verhalten von ===, findest du in der Doku.

Ansonsten ist es natürlich Quatsch zu sagen, dass ein Statement überflüssig sei. Es gibt sicher eine Menge Anwendungsfälle, in denen switch deutlich prägnanter zeigt was gemeint ist, als eine Reihe von ifs.

mfg. r

Geändert von bokel (02-08-2004 um 12:39 Uhr)
bokel ist offline   Mit Zitat antworten
Alt 02-08-2004, 14:07   #14 (permalink)
flachzange
 
Benutzerbild von elias
 
Registriert seit: Jun 2003
Ort: berlin
Beiträge: 3.932
@kelor

verdammt! ich wollte dich gerade schon makeln. aber switsch kann in
flash ja garnix! vermutlich weil es zwangsweise auf strikte gleichheit
prüft.
da hatt MM wieder vonner tapete bis zur wand gedacht!
__________________
elias ist offline   Mit Zitat antworten
Alt 02-08-2004, 14:45   #15 (permalink)
Neuer User
 
Registriert seit: Apr 2003
Beiträge: 144
Bin eben was aus der Übung

@Kelor:
Tut mir echt leid, das ahbe ich überlesen

Also Kelor. Damit kommt Case in diesem Falle nicht in Frage, weil es das ganze nur komplizierter machen würde.
ABER! Das if klappt ja ebenfalls nicht.

@Kelor2:
Meine Syntax is schrecklich... haben mir schon einige Leute gesagt.
Der Code is das reinste Chaos -_-

Gut: Ich werde die Syntax verbessern. Das Problem is nur:
Alleine der Umstand, das ich if benutze, kann doch nicht den Code dahinter ungültig machen, wenn die Bedingung zutrifft!
Die Syntax is zwar der der letzte Dreck, aber gerade noch so gültig, dass Flash es ja noch versteht!

@TheBiz:
Wie bokel auch sagt: Es kann Sinn machen wenn es sonst tausende ifs wären, darum habe ich es ja auch benutzt *duck*

@Bokel:
Macht er eben nicht. Er führt Code 2 NICHT aus! Obwohl es ja zutrifft
missinpoint habe ich keinen Typ. Aber wenn ich sage
var missinpoint = 1;
heißt es laut "Action Script 1 &2" wird es automatisch als Integer gespeichert!
Dürfte doch kein Prob sein oder?!

@Binary:
Das das nur eine Sache ausführen kann is ja echt Müll. Und wo steht das überhaupt oO

Ich BETE dafür das Kelor nicht schon wieder meine Frage beantwortet hat ohne das ich es gemerkt habe. Habe es 3 mal gelesen. *kleinmach*

The
GINemrod

Geändert von GINemrod (02-08-2004 um 14:47 Uhr)
GINemrod 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 05:36 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele