Re:Chiarimenti sugli script

#177948

LeleDaRevine
Partecipante
  • Veterano Argento
  • ★★★★
  • Conversazioni totali3308

L’angolo di cui deve ruotare la preda io riesco a calcolarlo, perchè confronto la posizione del giocare e della preda.

Questo è il codice che ho scritto

Code:
#…
import Blender
scene = G.getCurrentScene()
preda = scene.objects[“OBPreda”]
gioc = scene.objects[“OBGiocatore”]
locxgioc = gioc.position[0]
locygioc = gioc.position[1]
locxpreda = preda.position[0]
locypreda = preda.position[1]
dist = ((locxgioc-locxpreda)**2+(locygioc-locypreda)**2)**0.5

if dist < 20: #qui valuto i vari casi di posizione dei due soggetti per modificare l'angolo, ma dev'esserci qualcosa che non va
if locxgioc == locxpreda:
alfa = 90
alfa = math.radians(alfa)
elif (locxgioc-locxpreda) < 0 and (locygioc-locypreda) < 0:
alfa = math.atan((locygioc – locypreda)/(locxgioc-locxpreda))
elif (locygioc-locypreda) < 0 and (locxgioc-locxpreda) > 0:
alfa = math.atan((locygioc – locypreda)/(locxgioc-locxpreda))
alfa = alfa – 3.1415
elif (locxgioc-locxpreda) < 0 and (locygioc-locypreda) > 0:
alfa = math.atan((locygioc – locypreda)/(locxgioc-locxpreda))
else:
alfa = math.atan((locygioc – locypreda)/(locxgioc-locxpreda))
alfa = alfa + 3.1415

predaown = cont.owner

# è giusto qui?
preda.orientation = ([math.sin(alfa),math.cos(alfa),0],[math.cos(alfa),math.sin(alfa),0],[0,0,1])
MovPreda.setDLoc(0, speed, 0, 1)

cont.activate(MovPreda)

La preda ruota e si muove, ma con angoli a volte corretti, a volte opposti di 180 gradi, oppure girati di 90 gradi rispetto a quello che dovrebbe. Qui credo sia solo questione di matematica, perchè non mi dà  errori di codice e gli eventi avvengono nei momenti giusti, ma in modo sbagliato.

Qui il .blend, se volete fare delle prove e capire al situazione. http://www.pasteall.org/blend/2987 Mancheranno delle texture, ma non importa.