Em jogos de RPG ou de RTS se utiliza muito a visão de cima, a navegação pelo cenario com a câmera pode ser uma dificuldade há mais. A proposta aqui é a movimentação da câmera pelas bordas da área de visão, como no video abaixo:
Você pode reparar que ao movimentar o cursor do mouse para perto das bordas da janela, "o cenário se desloca", isto é a câmera se desloca em relação ao cenário.
Como funciona o template?
Precisamos criar um script python que saiba da localização do cursor mouse e as dimensões da janela, em seguida comparar a posição atual do cursor em relação aos limites da tela, então criamos aréas de ação do cursor.
Assim que o cursor atingir umas das área de ação a câmera se desloca na direção da área ativa e quando sai da área para o deslocamento.
Os elementos do template:
Ativos - Câmera ligada(parenteada) ao Empty, no qual vai no Painel de Lógica um sensor do tipo Always e outro de Mouse/Moviment, ligados ao Controlador Python.
O Script Python:
import Rasterizer
Rasterizer.showMouse(1)
w = Rasterizer.getWindowWidth()
h = Rasterizer.getWindowHeight()
import GameLogic as g
from GameLogic import *
cont = getCurrentController()
ow = cont.owner
mousesensor = cont.sensors['move']
campos = ow.position
x = mousesensor.position[0]
y = mousesensor.position[1]
screenposx = 1.0*(x - w/2) / w
screenposy = 1.0*( ( h - y ) - h/2 ) / h
#deltax = campos[2]/1
#deltay = campos[2]/1
deltax = campos[2]/1.265
deltay = campos[2]/1.84
newposx = campos[0] + screenposx * deltax
newposy = campos[1] + screenposy * deltay
newposz = 0
newpos = [newposx,newposy,newposz]
print y
#print L,l
#print screenposx, screenposy
#print newposx,newposy
#DETECTA OS LIMITES DE AÇAO DA TELA
if y < 50:
up="on"
else:
up="off"
if y > h-50:
down="on"
else:
down="off"
if x < 50:
left="on"
else:
left="off"
if x > w-50:
right="on"
else:
right="off"
vel = 0.1
if up=="on":
ow.applyMovement([0,vel,0],1)
print "up"
# down
elif down=="on":
ow.applyMovement([0,-vel,0],1)
#print "down"
# left
elif left=="on":
ow.applyMovement([-vel,0,0],1)
print "left"
# right
elif right=="on":
ow.applyMovement([vel,0,0],1)
print "right"
Conclusão:
Esse template demonstra os princípios do funcionamento de Movimento de câmera, com ele você pode usar de base para seus projetos e incrementar mais funções.
Download do template: aqui
Olá tenho feito na última semana um game simples que exige este tipo de movimentação de camera, porém utilizo o blender 2.6, gostaria de saber se vc teria como me ajudar a portar este código pra API do blender que uso, não possuo muito conhecimento em python, pois comecei tem pouco tempo, e não consegui fazer a "conversão" do código. Darei os devidos créditos pelo seu Trabalho, participo do fórum Blender Brasil e irei postar o jogo lá, meu nick é mmsdocs, caso vc tenha alguma dúvida pode me contatar por aki mesmo.
ResponderExcluir