Weverton N 0 Denunciar post Postado Setembro 16, 2007 Galera... to fazendo uma pagina do site que estou produzindo onde ele pega 4 mcs e coloca os valores dele no palco randomicamente... O porém é que algumas vezes eles ficam perto demais ou ficam um em cima do outro.. e isso eu não queria que acontecesse.. Alguém sabe ou tem uma função pronta para que esses mcs não fiquem um em cima do outro.. ou até melhor, que fiquem numa distância no mínimo de uns 50px um do outro? Segue abaixo o link do swf: http://www.iddg.com.br/links.swf (vai apertando F5 pra ver que cada vez que entra ele posiciona os links em um lugar) e do .fla: http://www.iddg.com.br/links.zip Ve ae se alguém me da essa ajudinha... Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Setembro 16, 2007 use getProperty pra obter a posição do objeto. antes de setar o posicionamento de algum objeto, verifique se já nao existe algum objeto em determinada area pra fazer o calculo da area você deve ter as coordenadas de X e Y e a partir delas fazer a soma de W e H AREA = a partir do ponto X + W, até o ponto Y + H. /----W-----\X-----------Y\| | :| | H| | :|_________|/ Compartilhar este post Link para o post Compartilhar em outros sites
Weverton N 0 Denunciar post Postado Setembro 17, 2007 use getProperty pra obter a posição do objeto.antes de setar o posicionamento de algum objeto, verifique se já nao existe algum objeto em determinada areapra fazer o calculo da area você deve ter as coordenadas de X e Y e a partir delas fazer a soma de W e HAREA = a partir do ponto X + W, até o ponto Y + H. /----W-----\X-----------Y\| | :| | H| | :|_________|/ Uhm.. era isso que já tinha pensado em fazer, so não sabia como.. mas agora lendo ae da maneira que você falou já comecei a ter uma idéia, vou testar aqui, se conseguir eu posto a solução! Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Setembro 17, 2007 acho que deve ter algum script pronto, mas nao sei onde encontrar porque nao sei qual palavra pesquisar.estou fazendo um teste aqui tb. faz o seu aí que depois a gente compara. Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Setembro 18, 2007 montei um. está cheio de bug. o problema nele é que quando encontra as pociçoes conflitantes ele seta a posicao X e Y de forma aleatoria. vou ver um jeito de nao aribuir aleatoriamente pra usar, crie 2 MCs e dê os nomes de instancia "mc1" e "mc2" no primeiro frame do primeiro layer ou qq outro layer coloque o script abaixo ACTIONSCRIPT raiz = _root;scr_w = 200; // task area width scr_h = 200; // task area height mvs = new Array(); mvs[1] = 'mc1'; mvs[2] = 'mc2'; low = 0; ladd = 10; mc_qtd = mvs.length; mvsPr = new Array(); for( i = 1; i < mc_qtd; i++ ){ mvsPr[i] = new Array(); mvsPr[i]['W'] = raiz[ mvs[i] ]._width; mvsPr[i]['H'] = raiz[ mvs[i] ]._height; mvsPr[i]['X'] = raiz[ mvs[i] ]._x; mvsPr[i]['Y'] = raiz[ mvs[i] ]._y; mvsPr[i]['W2'] = Number( scr_w - mvsPr[i]['W'] ); mvsPr[i]['H2'] = Number( scr_h - mvsPr[i]['H'] ); // setting positions px = setXY(i,0,false); py = setXY(i,1,false); mvsPr[i]['X'] = px; mvsPr[i]['Y'] = py; //trace( 'z: ' + px ); check_positions( i ); // if( i > 1 && (np = check_positions( mvsPr, i )) ){ mvsPr[i]['X'] = np[0]; mvsPr[i]['Y'] = np[1]; } // } function setXY(n,nn,recursive){ var xx = new Array(); xx[0] = ( random_p(0) + ladd ); xx[1] = ( random_p(1) + ladd ); raiz[ mvs[n] ]._x = xx[0]; raiz[ mvs[n] ]._y = xx[1]; // desativado. serve pra controle recursivo. /* if( recursive ){ mvsPr['X'] = px; mvsPr['Y'] = py; check_positions( n ); } */ return xx[nn]; } function random_p(n){ var xx = new Array(); xx[0] = ( Math.floor(Math.random() * ( mvsPr[i]['W2'] - low) ) ) + low; xx[1] = ( Math.floor(Math.random() * ( mvsPr[i]['H2'] - low) ) ) + low; return xx[n]; } function check_positions( n ){ var j, mr1, mn1, mr2, mn2, msg_status; var newxy = new Array(); var newp = false; var cpx = mvsPr[n]['X']; var cpy = mvsPr[n]['Y']; var mr = mvsPr[n]['W'] + cpx; var mn = mvsPr[n]['H'] + cpy; for( j = 1; j < n; j++ ){ mn1 = mvsPr[j]['X']; mr1 = mvsPr[j]['X'] + mvsPr[j]['W']; mn2 = mvsPr[j]['Y']; mr2 = mvsPr[j]['Y'] + mvsPr[j]['H']; msg_status = ''; if( ( cpx < mr1 && cpx > mn1 ) || ( mr < mr1 && mr > mn1 ) ){ // same X coordinate. need checkout Y coordinate if( ( cpy < mr2 && cpy > mn2 ) || ( mn < mr2 && mn > mn2 ) ){ // same Y coordinate. new coordinate is needed newxy[0] = setXY(n,0,false); newxy[1] = setXY(n,1,false); newp = true; //trace(newxy[0] + ' XXX ' + newxy[1]); msg_status = "NEW X, Y coordinate was adjusted"; }else{ msg_status = "Y coordinate checkout was needed"; //break; } }else{ msg_status = "coordinate checkout was not needed"; //break; } // for debug msg = ''; msg += 'ncpx: ' + cpx; msg += 'ncpy: ' + cpy; msg += 'nmr: ' + mr; msg += 'nmn: ' + mn; msg += 'nmn1: ' + mn1; msg += 'nmn2: ' + mn2; msg += 'nmr1: ' + mr2; msg += 'nmr2: ' + mr2; msg += 'nnmsg_status: ' + msg_status.toUpperCase(); msg += 'n------------------------------------------------------------'; msg += 'nX Rule checkout'; msg += 'n IF this is true'; msg += 'n ' + cpx + ' < ' + mr1 + ' && ' + cpx + ' > ' + mn1; msg += 'n ' + mr + ' < ' + mr1 + ' && ' + mr + ' > ' + mn1; msg += 'n THEN Y checkout is needed'; msg += 'nnY Rule checkout'; msg += 'n IF this is true'; msg += 'n ' + cpy + ' < ' + mr2 + ' && ' + cpy + ' > ' + mn2; msg += 'n ' + mn + ' < ' + mr2 + ' && ' + mn + ' > ' + mn2; msg += 'n THEN NEW X, Y coordinate adjust is needed'; msg += 'n------------------------------------------------------------'; // trace(msg); } if( newp ){ return newxy; }else{ return newp; } } Compartilhar este post Link para o post Compartilhar em outros sites
Weverton N 0 Denunciar post Postado Setembro 18, 2007 montei um. está cheio de bug. o problema nele é que quando encontra as pociçoes conflitantes ele seta a posicao X e Y de forma aleatoria. vou ver um jeito de nao aribuir aleatoriamente pra usar, crie 2 MCs e dê os nomes de instancia "mc1" e "mc2" no primeiro frame do primeiro layer ou qq outro layer coloque o script abaixo ACTIONSCRIPTraiz = _root; scr_w = 200; // task area width scr_h = 200; // task area height mvs = new Array(); mvs[1] = 'mc1'; mvs[2] = 'mc2'; low = 0; ladd = 10; mc_qtd = mvs.length; mvsPr = new Array(); for( i = 1; i < mc_qtd; i++ ){ mvsPr = new Array(); mvsPr['W'] = raiz[ mvs ]._width; mvsPr['H'] = raiz[ mvs ]._height; mvsPr['X'] = raiz[ mvs ]._x; mvsPr['Y'] = raiz[ mvs ]._y; mvsPr['W2'] = Number( scr_w - mvsPr['W'] ); mvsPr['H2'] = Number( scr_h - mvsPr['H'] ); // setting positions px = setXY(i,0,false); py = setXY(i,1,false); mvsPr['X'] = px; mvsPr['Y'] = py; //trace( 'z: ' + px ); check_positions( i ); // if( i > 1 && (np = check_positions( mvsPr, i )) ){ mvsPr['X'] = np[0]; mvsPr['Y'] = np[1]; } // } function setXY(n,nn,recursive){ var xx = new Array(); xx[0] = ( random_p(0) + ladd ); xx[1] = ( random_p(1) + ladd ); raiz[ mvs[n] ]._x = xx[0]; raiz[ mvs[n] ]._y = xx[1]; // desativado. serve pra controle recursivo. /* if( recursive ){ mvsPr['X'] = px; mvsPr['Y'] = py; check_positions( n ); } */ return xx[nn]; } function random_p(n){ var xx = new Array(); xx[0] = ( Math.floor(Math.random() * ( mvsPr['W2'] - low) ) ) + low; xx[1] = ( Math.floor(Math.random() * ( mvsPr['H2'] - low) ) ) + low; return xx[n]; } function check_positions( n ){ var j, mr1, mn1, mr2, mn2, msg_status; var newxy = new Array(); var newp = false; var cpx = mvsPr[n]['X']; var cpy = mvsPr[n]['Y']; var mr = mvsPr[n]['W'] + cpx; var mn = mvsPr[n]['H'] + cpy; for( j = 1; j < n; j++ ){ mn1 = mvsPr[j]['X']; mr1 = mvsPr[j]['X'] + mvsPr[j]['W']; mn2 = mvsPr[j]['Y']; mr2 = mvsPr[j]['Y'] + mvsPr[j]['H']; msg_status = ''; if( ( cpx < mr1 && cpx > mn1 ) || ( mr < mr1 && mr > mn1 ) ){ // same X coordinate. need checkout Y coordinate if( ( cpy < mr2 && cpy > mn2 ) || ( mn < mr2 && mn > mn2 ) ){ // same Y coordinate. new coordinate is needed newxy[0] = setXY(n,0,false); newxy[1] = setXY(n,1,false); newp = true; //trace(newxy[0] + ' XXX ' + newxy[1]); msg_status = "NEW X, Y coordinate was adjusted"; }else{ msg_status = "Y coordinate checkout was needed"; //break; } }else{ msg_status = "coordinate checkout was not needed"; //break; } // for debug msg = ''; msg += 'ncpx: ' + cpx; msg += 'ncpy: ' + cpy; msg += 'nmr: ' + mr; msg += 'nmn: ' + mn; msg += 'nmn1: ' + mn1; msg += 'nmn2: ' + mn2; msg += 'nmr1: ' + mr2; msg += 'nmr2: ' + mr2; msg += 'nnmsg_status: ' + msg_status.toUpperCase(); msg += 'n------------------------------------------------------------'; msg += 'nX Rule checkout'; msg += 'n IF this is true'; msg += 'n ' + cpx + ' < ' + mr1 + ' && ' + cpx + ' > ' + mn1; msg += 'n ' + mr + ' < ' + mr1 + ' && ' + mr + ' > ' + mn1; msg += 'n THEN Y checkout is needed'; msg += 'nnY Rule checkout'; msg += 'n IF this is true'; msg += 'n ' + cpy + ' < ' + mr2 + ' && ' + cpy + ' > ' + mn2; msg += 'n ' + mn + ' < ' + mr2 + ' && ' + mn + ' > ' + mn2; msg += 'n THEN NEW X, Y coordinate adjust is needed'; msg += 'n------------------------------------------------------------'; // trace(msg); } if( newp ){ return newxy; }else{ return newp; } } beleza.. vou ver aqui, não deu tempo de fazer o meu, pq so tenho os arquivos do site la em casa.. mas vou testar o seu aqui e ver se rola. Vlw Compartilhar este post Link para o post Compartilhar em outros sites
Weverton N 0 Denunciar post Postado Setembro 24, 2007 Bom hinom... no seu codigo ae eu tentei dar uma olhada mas achei meio confuso (não pq está mal feito, mas pq não está focado especialmente na minha necessidade), mas msm assim obrigado.. tive um tempinho aqui e criei uma função que posiciona os mcs ae: ACTIONSCRIPT //variáveisvar myMCs:Array = new Array(mc1, mc2, mc3); var raiz = _root; var distW = distH =20; //distancia nas laterais //importa as classes import mx.transitions.*; import mx.transitions.easing.*; //função para definir os tamanhos function defineX(i) { //define como emcima por padrão var emCima = true; //enquanto estiver em cima while (emCima) { //define as variaveis randomicas para x e y X = random(500); Y = random(350); //numero de emcimas nCima = 0; trace("KIT de "+i+" - X:"+X+" Y:"+Y+" nCima:"+nCima); //faz o loop para averiguar se está emcima for (a=1; a<=i; a++) { var mc = myMCs[i-1]; //ve se está em um local que não dá para ir if ((X>Stage.width-mc._width) || (Y>Stage.height-mc._height)) { trace("está em um lugar muito distante"); nCima++; break; } //comparar se o valor X está em cima de algum mc, se não for o primeiro if (i>1) { var mcBase = myMCs[a-1]; if ((X>(mcBase._x+mcBase._width+distW)) || ((X+distH+mc._width)<mcBase._x)) { //se não estiver, ele não faz nada trace(i+": "+a+": não está em cima"); } else { trace(i+": "+a+": NO X está em cima de "+mcBase+"._x:"+mcBase._x+" _y:"+mcBase._y); //se estiver sobrepondo na largura, ve se está na altura if ((Y<(mcBase._y+mcBase._height+distH)) && ((Y+mc._height+distH)>mcBase._y)) { trace(i+": "+a+": NO Y está em cima de "+mcBase+"._x:"+mcBase._x+" _y:"+mcBase._y); //adiciona mais um emcima nCima++; //quebra o for break; } } //se for o primeiro } else { trace("é o primeiro"); emCima = false; break; } } //faz a verificação para ver se tem algo em cima e quebrar o while if (nCima == 0) { //muda a variável para quebrar o loop emCima = false; } } return [X, Y]; } for (i=1; i<=myMCs.length; i++) { var clip = myMCs[i-1]; clip.num = i; clip.numArray = i; var AeL = defineX(i); clip._x = AeL[0]; clip._y = AeL[1]; trace("O x,y de "+clip+" é:"+clip._x+","+clip._y); //TransitionManager.start(clip, {type:Fly, direction:Transition.IN, duration:3, easing:Elastic.easeOut, startPoint:9}); } Dae é so colocar os mcs no array myMCs, que ele posiciona sem problemas. Compartilhar este post Link para o post Compartilhar em outros sites