Continuano i miei esperimenti con Blender.
Una delle mie più grandi domande riguardanti la game mode è: come fare per spostare la telecamera col movimento del mouse?
Beh, mi sono messo ad affrontare questo problema.
Il metodo che io utilizzerei è quello di analizzare il movimento del mouse e quindi di applicarlo alla rotazione.
Per fare ciò è mia intenzione associare uno script python al controller mousemove.
Ecco un prototipo di codice, con i commenti che spiegano cosa fa questo codice:
# Importa le librerie basi: la bge e classi utili da mathutils
import bge
from mathutils import *
# Comincia la funzione main
def main():
# Prende l'oggetto del controller
cont = bge.logic.getCurrentController()
# Prende l'oggetto a cui il controller è applicato
own = cont.owner
# Per comodità ci salviamo i globalDict come obj
obj = bge.logic.globalDict
# Prendiamo il movimento del mouse
mousemove=cont.sensors['Mousemove']
pos=mousemove.position
# Se è il primo movimento dobbiamo inizializzare i salvataggi dei movimenti
if not 'mousepos' in obj:
obj['mousepos']=pos
# Salviamo il movimento
obj['oldmousepos']=obj['mousepos']
obj['mousepos']=pos
# Troviamo le variazioni
deltax=obj['mousepos'][0]-obj['oldmousepos'][0]
deltay=obj['mousepos'][1]-obj['oldmousepos'][1]
# Creiamo il vettore ed eseguiamo la rotazione lungo l'asse delle z (globale)
rot=Vector((deltay*0.005, 0.0, -deltax*0.005))
own.applyRotation(rot, False)
# Creiamo il vettore ed eseguiamo la rotazione lungo l'asse delle y (locale della camera)
rot=Vector((-deltay*0.005, 0.0, 0.0))
own.applyRotation(rot, True)
# Esegue main, ogni volta che il mouse viene mosso
main()
Il risultato è ancora molto primitivo, ma sempre meglio che nulla 😉
In alcuni giochi come i FPS questo movimento è essenziale e andrebbe definito meglio, però questo mi pare già un inizio non malvagio.
Bisognerebbe aggiungere un po’ di controlli per vedere che il mouse non vada fuori dallo schermo e sistemare un po’ i coefficienti della rotazione.