Skip to main content

Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines
(2 edits)

Salut ! Moi aussi j'ai du mal avec le LookAt(), donc j'ai fait mon propre truc ^^

D'abord, tu crée un acteur avec un sprite (n'importe lequel, mais assez grand, voire même plus grand que ce que l'on voit in-game), puis tu le met à x=0, y=0 et à la hauteur voulue (donc celle du perso), et tu change l'opacité du sprite à 0, (sinon le sprite va tout recouvrir ^^)

Tu ajoute ça dans le update de l'acteur qui sert de joueur:

let ray: any // Tu crée un rayon

ray = new Sup.Math.Ray().setFromCamera(Sup.getActor("Camera").camera, Sup.Input.getMousePosition()).intersectActor(Sup.getActor(/*Nom de ton acteur qui contient le sprite que tu as crée*/))[0] //Ici on lance le rayon depuis la caméra jusqu'au sprite, pour plus tard récupérer la position de la souris

let point = null

if (ray != undefined) {

point = this.actor.getPosition().subtract(ray.point) //Pour éviter d'avoir un décalage quand le joueur bouge

this.actor.setLocalEulerZ( Math.atan2( point.y, point.x )) //On calcule l'angle que doit avoir le joueur selon la position de la souris

}

Et voilà, normalement c'est sensé marcher ! J'ai pas testé dans plusieurs situations, donc ça marchera peut-être pas pour toi, alors dis-moi-le si tu as un problème, que je regarde ^^

(Si tu as un décalage, c'est que le sprite est mal tourné, alors sur la ligne:

this.actor.setLocalEulerZ( Math.atan2( point.y, point.x ) - Math.PI/2)

Pour moi c'est - Math.PI/2 (ce qui revient à tourner de 90° vers la gauche) mais si tu veux tourner de 45° vers la droite, alors met this.actor.setLocalEulerZ( Math.atan2( point.y, point.x ) + Math.PI/4) à la place)