por chipselect » 10 Ago 2011 09:52
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.