Re:Posizione dell’oggetto non cambia

#177638

LeleDaRevine
Partecipante
  • Veterano Argento
  • ★★★★
  • Post sul forum 3309

OH, bene! Dunque il doppio asterisco serve per elevare.

Finalmente son riuscito a fare quello che volevo!

Ho un oggetto, assassino, che muovo con le freccie, e un’altro oggetto, preda, che dove muoversi da solo. Quando mi avvicino con l’assassino, la vittima deve scappare nella direzione opposta. Ecco lo script completo! Entro con un sensore always, passo per lo script e me ne esco su un attuatore simple motion.

Code:
[size=85]import GameLogic
G = GameLogic
cont = G.getCurrentController()

#sensori

vicino = cont.getSensor(“checkloc”)

#attuatori

MovPreda = cont.getActuator(“MovPreda”)

import math

speed = 0.7
locxgioc = 0
locygioc = 0
locxpreda = 0
locypreda = 0
speedx = 0
speedy = 0
alfa = 0
dist = 0

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:
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

speedx = speed * math.cos(alfa)
speedy = speed * math.sin(alfa)

MovPreda.setDLoc(speedx, speedy, 0, 1)
GameLogic.addActiveActuator(MovPreda, 1)

elif dist > 30:
MovPreda.setDLoc(0, 0, 0, 1)
GameLogic.addActiveActuator(MovPreda, 1)[/size]

Questo quello dell’assassino per muoverlo con le freccie, più il tasto ctrl per muoverlo lateralmente. Cinque sensori per i tasti, script e attuatore simple motion.

Code:
cont = GameLogic.getCurrentController()

#sensori

avanti = cont.getSensor(“su”)
indietro = cont.getSensor(“giu”)
sinistra = cont.getSensor(“sinistra”)
destra = cont.getSensor(“destra”)
ctrl = cont.getSensor(“ctrl”)

#attuatori

MovGioc = cont.getActuator(“MovGioc”)
#print dir(MovGioc)
#processi
muovi = 0
striscia = 0
gira = 0
if avanti.isPositive():
muovi = muovi + 1
if indietro.isPositive():
muovi = muovi – 0.5
if sinistra.isPositive() and ctrl.isPositive():
striscia -= 0.5
elif sinistra.isPositive() :
gira += 0.04

if destra.isPositive() and ctrl.isPositive():
striscia += 0.5
elif destra.isPositive():
gira -= 0.04

MovGioc.setDLoc(striscia,muovi,0,1)
MovGioc.setDRot(0,0,gira,1)
GameLogic.addActiveActuator(MovGioc, 1)

Il tutto funziona, ma se magari mi suggerisci una forma più corretta di scriverlo te ne sarei grato, così faccio le cose come si deve. Ho notato che molti comandi che uso me li snobba, per cui penso che siano da evitare e sostituire con comandi più aggiornati.