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.