java 2D - smart guide

Enviado:
09 Ago 2011 16:15
por chipselect
gostaria de saber se alguém tem alguma dica de "smart guide", ou grid inteligente para implementar em um editor 2D, igual ou similar aos que existem no editor gráfico do Cbuilder/delphi, onde você arrasta os componentes e ele tende a se alinhar automaticamente com outros componentes já inseridos.
Imaginei uma grid simples usando divisão, mas não atende completamente, estou tentando montar uma grid inteligente usando vetores com pesos de "gravidade" para alinhamento dos objetos gráficos, mas ainda não terminei.
Como não quero reinventar a roda, se alguém tiver alguma dica de algum algoritmo similar, eu agradeço a colaboração.

Enviado:
09 Ago 2011 19:57
por _blackmore_
não sei pq nunca fiz ...
mas não seria comparar a distancia entre "pontos" no eixo X e caso estiver dentro de uma faixa de valores então assumir o valor do primeiro "ponto" ?

Enviado:
10 Ago 2011 09:52
por chipselect
a abordagem de comparar as distâncias até funciona, só não me atende completamente, devido a algumas deficiências que ela apresenta. Grato pela sua colaboração.
Um ponto importante é o alinhamento, onde o "top" deve ficar abaixo do "botton" de outro sprite e não no mesmo "y" para não remontar em 1 pixel, quando um está em baixo do outro, mas deve ficar alinhado quando estiverem lado a lado, ou seja, o tal ponto de âncora depende da localização relativa dos objetos. Essa lógica também deve ser feita para o "left/right" de cada objeto. Então, apenas localizar o próximo ponto mais perto não resolve.
estou pensando em usar array para indicar início e fim de objetos, e cada objeto atualiza sua posição no array . Quando um objeto for movimentado, ele vai analisando o array de números e, encontrando uma referência a um ponto de âncora, ele congela até que o movimento supere um dx e/ou dy. Acho isso melhor que a escolha de fixar automaticamente por aproximação a um ponto, pois dá a chance de o usuário colocar um objeto a 1 pixel de distância de um outro ponto, mas permite também que o usuário acerte o alinhamento apenas passando levemente pelo ponto correto de alinhamento, já que o sprite irá "grudar" no ponto quando passar por ele. Para tirar do alinhamento, basta arrastar o objeto um dx/dy maior e depois alinhar o objeto novamente.
Usando array de inteiros para isso é mais fácil pois já deixo calculado a posição real de início e fim dos objetos, visto que existe a tal da rotação, onde o ponto de localização do sprite é um e a "quina" do objeto é outro, e pode ser maior ou menor que a coordenada do sprite.
Estou implementando o algoritmo pra fazer isso, mas caso alguém tenha alguma dica, eu agradeço. Não gosto de ficar reinventando a roda.