68
No código da função que remove as seções, utiliza-se uma variável tipo boolean para
verificar se o cubo em questão já foi lido ou não, antes de removê-lo.
As seções foram obtidas seccionando o objeto 3DS da plataforma inteira, assim, as seções
criadas carregam consigo seu posicionamento relacional. Desta forma, ao se carregar as
seções, elas automaticamente retornam ao seu posicionamento original remontando a
plataforma.
Inicialmente havia duas possibilidades de se desenvolver o sistema de leitura/remoção
das seções: a que foi adotada no projeto que se utiliza das coordenadas do avatar para saber se
houve mudança de seção; a que foi rejeitada utilizaria sensores invisíveis tipo “caixa” que
envolveriam cada seção e neles estariam associados eventos de detecção de colisão, de forma
que, quando o avatar passasse por uma parede da “caixa”, seria gerada uma interrupção
informando a colisão a qual poderia ser devidamente tratada. Como cada seção teria sua
própria “caixa”, quando o avatar saísse de uma seção e entrasse numa seção vizinha, teríamos
duas interrupções sendo geradas – a de saída e a de entrada – e assim seria possível saber para
qual seção o avatar se moveu e quais cubos devem ser lidos e removidos. Este sistema,
aparentemente, seria bem mais simples e mais genérico, pois a caixa sensora seria lida
juntamente com a seção e teria um tamanho fixo – o tamanho das seções – e seria necessário
apenas desenvolver uma única rotina de tratamento das colisões contudo, um pequeno mas
complexo problema impediu que esta opção fosse escolhida. Como foi dito, cada seção teria
sua caixa sensora envolvendo toda a seção, e esta caixa seria sensível a colisões, colisões estas
que são de quaisquer espécies, não necessariamente apenas com os avatares. Deste modo,
estando as caixas sensoras entrando em colisão constante com as seções vizinhas, impediriam,
assim, que outras colisões, inclusive com os avatares, fossem corretamente reportadas,
deixando o sistema de inserção/remoção de seções inoperante. Para impedir que as seções
fossem objetos que pudessem colidir com a caixa sensora era necessário informar ao Java3D
que estes objetos – as seções – não são passíveis de colisão através do comando
.setCollidable(false). Isto foi feito e deu resultado positivo, no que diz respeito ao sistema de
mudança de cubos, pois com este comando desabilitamos qualquer tipo de colisão com as
seções, desligando também o funcionamento do sistema de tratamento de colisão do avatar
com a seção que impede o avatar de “atravessar” as paredes e objetos da seção, como será
visto à frente. Desta forma, não foi encontrada nenhuma solução viável para se utilizar os
sensores de colisão no sistema de mudança de seções, motivo pelo qual esta opção foi
descartada.