Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, estou montando um sistema de RPG em turnos, por enquanto ainda está bem primitivo.
Estou montando "por partes". Por enquanto a parte em que eu estou empacado é a parte de adicionar profundidade ao tabuleiro: estou tentando fazer com que as unidades, ao se moverem e tal, troquem sua profundidade (depth) de acordo com sua posição. A posição deve ser mais ou menos como no gráfico abaixo, as flechas apontando para o lugar onde os MCs devem ter maior profunidade. Ou seja, quadro inferior esquerdo fica na frente dos outros, e quadro superior direito fica atrás de todos.
/applications/core/interface/imageproxy/imageproxy.php?img=http://img156.imageshack.us/img156/8053/profundidadegf3.jpg&key=c8623af1728371f43c3c1223c654590139ea6dd5453f293e90a4ded026dfe222" alt="Imagem Postada" />
Já implementei essa função de certa forma, mas há um problema: às vezes, quando uma unidade chega em um lugar que está muito cheio de unidades juntas, alguns MCs que deveriam estar atrás de outros acabam ficando na frente. Já fiz a função checar em todas as unidades com todas as unidades, diminui um pouco o problema mas continua acontecendo.
Quem precisa ver como está se isso ajudar a me ajudar, aqui está:
http://img128.imageshack.us/my.php?image=jogovf8.swf
Vá mexendo as unidades, cedo ou tarde você vai notar que uma que deveria estar abaixo estará acima.
O que quero é: se alguém já fez (ou não) algo assim, se puder me dizer alguma lógica pra isso funcionar redondinho 100%! Aí com a lógica em mãos poderei adaptar para o meu código.
Não se preocupe em falar tchacalakas como por exemplo procurar por todas as unidades ou algo assim, porque muito provavelmente as tchacalakas já tem implementadas no código e o que não tiver eu dou um jeito!
Valeu aí pra quem puder ajudar!
Edit: droga, percebi que esqueci de completar o título e agora não dá pra editar...
Valeu aí Foxn, depois dou uma adaptada aí pra encaixa no meu código aí digo se funcionou!
Há uma pequena falha quando se move os objetos com muita rapidez, mas segue ai um melhoramento que resolve o problema:
var VerificarNivel:Function = function($evento:MouseEvent):void{
var $i:int;
var $objeto:Sprite;
var $nivelAtual:int;
var $nivelNovo:int;
if(Atual != null){
for($i=0; $i < pecas.numChildren; $i++){
$objeto = pecas.getChildAt($i) as Sprite;
if($objeto != Atual){
$nivelAtual = pecas.getChildIndex(Atual);
$nivelNovo = pecas.getChildIndex($objeto);
if($objeto.hitTestObject(Atual)){
if(Atual.y > $objeto.y && $nivelAtual < $nivelNovo){
pecas.addChildAt(Atual,$nivelNovo);
}else if(Atual.y < $objeto.y && $nivelAtual > $nivelNovo){
if($nivelNovo == 0){
pecas.addChildAt($objeto,0);
pecas.addChildAt(Atual,0);
}else{
pecas.addChildAt(Atual,$nivelNovo-1);
}
}
}
}
}
}
}Opa valeu aí Foxn!!!
Peguei a lógica aí e fiz uma gambiarra danada usando o sort da array de Unidades para poder trocar a profundidade das unidades com um algoritmo um pouco mais simples do que o que eu usava e deu certo não achei nenhum erro mais! Valeu aí cara!
Quem sabe isso ajude: