quinta-feira, 9 de dezembro de 2010

Drag and Drop - Arrastar e Largar

Drag and Drop 3D - Arrastar e Largar



Conceito
Nas interfaces gráficas de computadores, drag-and-drop (arrastar e largar) é a ação de clicar em um objeto virtual e "arrastá-lo" a uma posição diferente ou sobre um outro objeto virtual. De maneira geral, ele pode ser usado para invocar diversos tipos de ações, ou criar vários tipos de associações entre dois objetos abstratos.

A seqüência básica de ações relacionadas ao drag-and-drop é:
  • Clicar, e manter o botão do mouse ou outro dispositivo semelhante apertado, para "agarrar" o objeto,
  • "Arrastar" (drag) o objeto/cursor à posição ou localização desejada,
  • "Largar" (drop) o objeto, soltando o botão pressionado.
Neste Tutorial iremos abordar um Drag and Drop um pouco diferente, por se tratar de um  Drag and Drop 3D, isso quer dizer que diferentemente de um porcedimento 2D onde só um angulo de visão é permitido podemos posicionar nossa camera em qualquer ângulo para deslocar o objeto.


Vamos para a lógica do template.
Consiste basicamente em o ponteiro do mouse estar sobre o objeto que se deseja deslocar.
Ao clicar com o botão esquerdo do mouse, uma função pega as propriedades do objeto e verifica se este possui tal propriedade para permitir o deslocamento.
Se este apresentar esta propriedade sua posição será a aposição do mouse, enquanto o botão do mouse permanecer precionado, assim que solto o botão do mouse o objeto fica na posição atual.

Construindo o Template.

1º Passo - Adicionar o objeto ou objetos, adicione uma propriedade no objeto no painel Game Logic (F4) em Add Property com o nome de ativo.


2º Passo - Criar um script Python como descrito abaixo e liga-lo a câmera.

import Rasterizer
Rasterizer.showMouse(1)

import GameLogic as g
from GameLogic import *

cont = getCurrentController()
own = cont.owner
mouseover = cont.sensors['MOverAny']
lmb = cont.sensors['LMB']

hitLoc = mouseover.hitPosition #COORDENADAS DA POS DO MOUSE
hitObj = mouseover.hitObject #OBJ Q ESTA SOB O MOUSE

hitLoc=hitLoc
posx=hitLoc[0]
posy=hitLoc[1]
posz=hitLoc[2]

cena=g.getCurrentScene().objects


if hitObj.has_key('ativo') and lmb.positive:
    #print hitObj  #Use o print para visualizar o obj na linha de comando
    obj=hitObj
    obj.position = [posx,posy,1]

3º Passo  - Adcionando sensores a câmera:
Adicione um sensor Mouse do tipo Mouse over any.
Um sensor Mouse do tipo Movement.
Um sensor Mouse do tipo Left button.
Ligue-os ao controlador Python como descrito na figura abaixo.


Agora é só testar teclando P e clicar e manter precionado sobre o objeto, mova o mouse e solte o clique, se tudo estiver certo vocề terá deslocado o objeto de lugar.
Esse template poderá ser a base para algum jogo ou parte dele em seus projetos.
Bom proveito!

Download template: aqui

Nenhum comentário:

Postar um comentário