Skip to main content
October 27, 2015
Answered

Why some pictures disappear in AS3?

  • October 27, 2015
  • 1 reply
  • 441 views

There are 17 symbols my project. Each symbol contains one image. It is required display 9 random images and shuffle them. symbols are named: p1 , p2 , p3 and so on ... The project works properly except that one or two images disappears from the 9 random images!!

I can not find the reason?? Would you help me, please? Thanks in advance,

This images features 3 runs (CTRL + Enter) of my project.

Here is my code:

stop();

var  i:int; i=0;

var pic:Array =[9];

var c :int;

do

{

  pic=randomRange(1, 17);

 

  for (c=1;c<i;c++) // the "for loop" prevents repeating pictures

  {

   if (pic==pic[i-c])

  

    {

     pic=randomRange(1, 17);

  trace("repeated pic:" , c)

  c--;

    }

  }

 

// re-arranging some picturs using nine "if" conditions:

if (i==0)

{

this ["p"+pic].width = 175 ;

this ["p"+pic].height = 175 ;

this ["p"+pic].x = 100 ;

this ["p"+pic].y = 75 ;

trace (i);

}

  if (i==1)

{

this ["p"+pic].width = 175 ;

this ["p"+pic].height = 175 ;

this ["p"+pic].x = 280 ;

this ["p"+pic].y = 75 ;

  trace (i);

}

  if (i==2)

{

this ["p"+pic].width = 175 ;

this ["p"+pic].height = 175 ;

this ["p"+pic].x = 460 ;

this ["p"+pic].y = 75 ;

  trace (i);

}

if (i==3) // new row

{

this ["p"+pic].width = 175 ;

this ["p"+pic].height = 175 ;

this ["p"+pic].x = 100;

this ["p"+pic].y = 255;

  trace (i);

}

  if (i==4)

{

this ["p"+pic].width = 175 ;

this ["p"+pic].height = 175 ;

this ["p"+pic].x = 280;

this ["p"+pic].y = 255;

  trace (i);

}

   if (i==5)

{

this ["p"+pic].width = 175 ;

this ["p"+pic].height = 175 ;

this ["p"+pic].x = 460;

this ["p"+pic].y = 255;

  trace (i);

}

  if (i==6) // new row

{

this ["p"+pic].width = 175 ;

this ["p"+pic].height = 175 ;

this ["p"+pic].x = 100;

this ["p"+pic].y = 435;

  trace (i);

}

  if (i==7)

{

this ["p"+pic].width = 175 ;

this ["p"+pic].height = 175 ;

this ["p"+pic].x = 280;

this ["p"+pic].y = 435;

  trace (i);

}

   if (i==8)

{

this ["p"+pic].width = 175 ;

this ["p"+pic].height = 175 ;

this ["p"+pic].x = 460;

this ["p"+pic].y = 435;

  trace (i);

}

trace (pic) ;

i++;

}

while (i<9)

function randomRange(minNum:Number, maxNum:Number):Number // This function produces a random number

{

    return (Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum);

}

This topic has been closed for replies.
Correct answer nezarov

Here is another way to arrange the symbols:

var column:Number = 3;

var i:uint;

var list:Array = [];

var pic:Array = [];

stop();

for(var p:uint=1; p<=17; p++)

{

    list.push(this.getChildByName("p" + p))

}

shuffle(list);

pic = list.splice(0,9);

for(i = 0; i < pic.length; i++ ) // Arrange the symbols

{

    pic.width = 175;

    pic.height = 175;

    pic.x = 100 + Math.floor( i % column ) * 185; // the pic width + 10 as space

    pic.y = 100 + Math.floor( i / column  ) * 185;

}

function shuffle(a:Array) {

    var p:int;

    var t:*;

    var ivar:int;

    for (ivar = a.length-1; ivar>=0; ivar--) {

        p=Math.floor((ivar+1)*Math.random());

        t = a[ivar];

        a[ivar] = a

;

        a

= t;

    }

}

1 reply

Inspiring
October 27, 2015

The disappeared pictures are the repeated pictures

if (pic == pic[i - c])

        {

            pic = randomRange(1, 15);

            trace("repeated pic:", c)

           c--; // this line is removing 2 items from the array which have the same name (pic[i - c])

        }

October 27, 2015

Hi nezarov, It is required not to repeat the pictures that appear on the screen. So, I check if there are two symbols that has the same name (The same picture). If it is true, the duplicated picture will get a new name. And then I will perform a re-check using C-- line. I've commented out the whole "for loop" but the problem still exits !! So, I don't think that C-- line is removing any pictures. Would you demonstrate your point of view, Please? I would be thankful if you wrote the right code and Thank you very much for your effort. if (pic == pic[i - c]) // Check if there is a duplicated symbols (pictures)         {             pic = randomRange(1, 15); /*Replace the duplicated pictures with a new name */             trace("repeated pic:", c)           c--; /* This line is to re-check or make sure that the new name is not duplicated with any other symbols in the array pic */         }