2011-04-30 20 views
8

¿Cómo se elabora una instrucción switch en as3 para hacer que el caso se aplique a un rango completo de números?Cambie declaraciones y rangos de números

if (mcPaddle.visible == true) 
{ 
    switch (score) 
    { 
     case 10://10 to 100 
      myColor.color = 0x111111; 
      break; 
     case 110://110 to 1000 
      //etc etc 
      break; 
    } 
} 

He intentado varias formas de realizar el caso de aplicación para todos los números entre 10-100, y 110 a 1000, pero parece que no puede encontrar una manera de hacerlo, y no puedo encontrar la sintaxis adecuada para tal cosa en as3.

Respuesta

15

Se puede utilizar un bloque de interruptores:

var score:Number = 123; 

switch(true){ 

    case score > 120 && score < 125 : 
     trace('score > 120 && score < 125'); 
     break; 

    case score > 100 && score < 140 : 
     trace('score > 100 && score < 140'); 
     break; 

    case score == 123 : 
     trace('score == 123'); 
     break; 

} 
//score > 120 && score < 125 
+0

Gracias, esto funciona y es exactamente lo que necesitaba. Nunca pensé en cambiar la declaración del interruptor para verificar que fuera verdadero en todo, luego verifique el valor de verdad del puntaje. –

+0

Este código parece sucio, me quedo con if/elses. – alxx

+3

@alxx - Puede que parezca sucio, pero para mi sorpresa, este código de rango de conmutadores realmente supera a las cadenas if-else. ¡Probé 1 millón de números aleatorios en diez rangos de tamaños iguales y el interruptor logró consistentemente un 15% de mejor rendimiento! – merv

0

sentencia switch de ActionScript no funciona con los rangos, pero que fácilmente puede hacerlo con if/else cadenas:

if (score >= 10 && score <= 100) 
{ 
    //10 - 100 
} 
else if (score <= 110) 
{ 
    //101 - 110 
} 
else if (score <= 1000) 
{ 
    //111 - 1000 
} 
+0

Bueno, esperaba evitar ese escenario, porque los demás si los nidos son antiestéticos y desordenados, pero si las declaraciones de cambio no pueden hacer rangos, supongo que no tengo otra opción. –

+0

Realmente no tienen que estar anidados, puedes encadenarlos. Si no pone offset de cuatro espacios después de cada nivel, si los bloques de/else siguen siendo muy legibles. – alxx

+0

te equivocas ver mi respuesta – OXMO456

0

sentencias switch sólo repeticiones de if (a = b) or (a = c) or (a = d) ... construcciones tipo. No están destinados a rangos. Puede algo simularlo usando fallthroughs:

switch (score) { 
    case 10: 
    case 11: 
    case 12: 
    case 13: 
    case etc... 
     blah blah blah 
     break; 
} 

pero eso es una forma ridículamente tonto para ir. Mucho más fácil/más concisa de usar un habitual if()

0

Para aquellos que buscan la manera de utilizar esto en HTML/jQuery, he utilizado @ respuesta de OXMO456 para crear esta pluma simple: http://codepen.io/anon/pen/jHFoB

Simplemente tiene que configurar var normalmente y eliminar las líneas que comienzan con trace.

Ps. Estoy agregando esto como una respuesta ya que no tengo suficiente representante para comentar sobre el suyo. Si alguien puede, mueva/copie esto allí. ¡Gracias!

Cuestiones relacionadas