2012-02-24 4 views
0

나는 여기에 약간의 문제가있다. 나는 3 개의 컨테이너와 n 개의 노드가있는 XML을 가지고있다 ... 나는 컨테이너에 넣고 싶다. XML의 어떤 값이라도,이 값은 오래된 값일 수 없다. 컨테이너가 같은 값을하지 말았어야 ... 내가 AS3에서이 코드를 가지고 있지만 작동하지 않습니다 : S문자열 바꾸기

package 
{ 
    import flash.display.MovieClip; 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.events.MouseEvent; 
    import flash.text.TextField; 



    public class Pruebas extends Sprite 
    { 

     public var arr:Array = new Array("valor0","valor1","valor2","valor3","valor4","valor5") 


     public var str1:String=arr[0]; 
     public var str2:String=arr[1]; 
     public var str3:String=arr[2]; 




     public var te1:TextField = new TextField(); 
     public var te2 :TextField = new TextField(); 
     public var te3 :TextField = new TextField(); 

     public var btn :MovieClip = new MovieClip(); 




     public function Pruebas() 
     { 
     te1.text = str1;  
     te2.text = str2; 
     te3.text = str3; 

     addChild(te1); 
     addChild(te2); 
     addChild(te3); 

     te2.x = 50;te3.x=100; 

     btn.graphics.beginFill(0xff00ff); 
     btn.graphics.drawCircle(151,150,15); 
     addChild(btn); 

     btn.addEventListener(MouseEvent.CLICK,cambiar); 
     } 


     public function cambiar(e:Event):void{ 
     var minLimit:uint = 0; 
     var maxLimit:uint = arr.length-1; 
     var range:uint = maxLimit - minLimit; 

     var someNum:Number = Math.ceil(Math.random()*range) + minLimit;  


     if(str1 == arr[someNum]){ 
      while(str1 == arr[someNum]){ 
       someNum = Math.ceil(Math.random()*range) + minLimit; 
      } 
      str1 = arr[someNum]; 
     }else{ 
      str1 = arr[someNum]; 
     } 
     someNum= Math.ceil(Math.random()*range) + minLimit;  

     if(str2 == arr[someNum]){ 
      while(str2 == arr[someNum]){ 
       someNum = Math.ceil(Math.random()*range) + minLimit; 
      } 
      str2 = arr[someNum]; 
     }else{ 
      str2 = arr[someNum]; 
     } 

     someNum= Math.ceil(Math.random()*range) + minLimit;  

     if(str3 == arr[someNum]){ 
      while(str3 == arr[someNum] || str3 ==str1 || str3 == str2){ 
       someNum = Math.ceil(Math.random()*range) + minLimit; 
      } 
      str3 = arr[someNum]; 
     }else{ 
      str3 = arr[someNum]; 
     } 




     te1.text = str1;  
     te2.text = str2; 
     te3.text = str3; 
     } 


    } 
} 

에두아르도 확인이 코드 내가

if(imgactual == myXML.internas.item[someNum][email protected]){ 
       while(imgactual == myXML.internas.item[someNum][email protected]){ 
        someNum = Math.ceil(Math.random()*range) + minLimit; 
       } 
       imgactual = myXML.internas.item[someNum][email protected] 
      }else{ 
       imgactual = myXML.internas.item[someNum][email protected] 
      } 
      someNum= Math.ceil(Math.random()*range) + minLimit; 

      if((imgpostactual == myXML.internas.item[someNum][email protected]) || (imgpostactual == imgactual)){ 
       while(imgpostactual == myXML.internas.item[someNum][email protected] || imgpostactual == imgactual){ 
        someNum = Math.ceil(Math.random()*range) + minLimit; 
       } 
       imgpostactual = myXML.internas.item[someNum][email protected] 
      }else{ 
       imgpostactual = myXML.internas.item[someNum][email protected] 
      } 

      someNum= Math.ceil(Math.random()*range) + minLimit; 

      if((imgpreactual == myXML.internas.item[someNum][email protected]) || (imgpostactual == imgpreactual) || (imgpreactual == imgactual)){ 
       while((imgpreactual == myXML.internas.item[someNum][email protected]) || (imgpostactual == imgpreactual) || (imgpreactual == imgactual)){ 
        someNum = Math.ceil(Math.random()*range) + minLimit; 
       } 
       imgpreactual = myXML.internas.item[someNum][email protected]; 
      }else{ 
       imgpreactual = myXML.internas.item[someNum][email protected]; 
      } 
      trace(imgactual); 
      trace(imgpreactual); 
      trace(imgpostactual); 
을했다는이 코드

이 코드가 좋지 않으면 항상 루프가됩니다. ake a long time : S 그리고 나는 그것이 작동하지 않는다고 생각한다 : S

답변

0

에 두번째 선택은 제와 같은 오브젝트인지 확인하고, 상기 제 3의 선택은 동일 첫 번째와 두 번째로 개체를 가져 와서 서로 다른 임의의 개체가 있으면 일치시킵니다. 같은

뭔가 :

var index1:int = (int)(Math.random() * arr.length); 
var index2:int = index1; 
while (index2 == index1) { 
    index2 = (int)(Math.random() * arr.length); 
} 
var index3:int = index1; 
while (index3 == index1 || index3 == index2) { 
    index3 = (int)(Math.random() * arr.length); 
} 

str1 = arr[index1]; 
str2 = arr[index2]; 
str3 = arr[index3]; 

do while 루프는 내가하지만, 즉석 구문을 기억할 수 없었다 ...이 이상적이다.

1

기본적으로 0과 maxLimit 사이에서 3 개의 다른 난수를 선택하고 그 인덱스 위치에서 배열 요소를 선택하려고한다. 이를 수행하는 한 가지 방법은 각 인덱스에 동일한 기회를 주면서 하위 인덱스를 사용하여 배열을 생성 한 다음 처음 세 요소를 선택하는 것입니다. 이런 일 :

// Create the array with the indexes 
var idxArray:Array = new Array(); 
for(var i:int = 0; i<=maxLimit; i++) idxArray.push(i); 

// Shuffle it 
for(var j:int = 0; j<=someNumberBigEnough; j++){ 
    var idx1:int = Math.ceil(Math.random()*range) + minLimit; 
    var idx2:int = Math.ceil(Math.random()*range) + minLimit; 
    // to shuffle, swap elements 
    var aux:int = idxArray[idx1]; 
    idxArray[idx1] = idxArray[idx2]; 
    idxArray[idx2] = aux; 
} 

// Pick the first thee 
str1 = arr[idxArr[0]] 
str2 = arr[idxArr[1]] 
str3 = arr[idxArr[2]] 

someNumberBigEnough 될 수있는 곳, 예를 들면, 동일한 다른 해결책 range

+0

hmmm ok uuffle 배열의 위치가 정상입니다.하지만 다른 루프에 있습니까? 1 분마다 변화가 일어날 때마다 배열마다 다른 값을 가져야한다는 것을 상상해보십시오 : S는 항상 변경 될 때마다 내 문제입니다. 누군가는 다른 것과 같습니다 : S –

+0

배열을 바꾸거나 다음 3 가지 원소를 취할 수 있습니다 . – Eduardo

+0

내 코드에 오류가있는 것 같습니까? 구문 또는 logico 난 몰라 또는 내 코드 작업을 위해? –