Skip to main content

Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines

Kant01

4
Posts
2
Topics
A member registered Jan 29, 2016

Recent community posts

Merci bilou pour ta réponse.
Un peu comme je fait là ? Ou est-il nécessaire d'utiliser getActor ?
class Boat :: stopMove ()
this.actor.getBehavior(BoatMovementBehavior).destroy();
Bonne soirée

(2 edits)

Bonjour,

Existe t-il dans superpowers un pathfinder (pour pointer le chemin le plus court sur une map en tennant compte des obstacles) et comment peux t'on l'utiliser ?
Sinon que me conseillez vous comme module à intégrer (et comment l'intégrer), ou des pistes de réalisations ?

Merci merci

(1 edit)

J'arrive à stopper le déplacement des autres acteurs en ajoutant un booléen dans le BoatMovementBehavior : 'rightMove'

Si je clique sur un acteur j'active bien la possibilité de le déplacer et je désactive la possibilité de déplacer le précédent, ça fonctionne donc plutôt bien de ce côté là.

Le problème c'est que si je clic sur un acteur alors que le précédent est toujours en déplacement (en restant appuyer sur une touche du clavier), le déplacement de l'acteur précédent ne s'arrête pas. Il garde la direction dans laquelle il était au moment de la sélection de l'autre acteur et ne fait même plus cas des collisions. Comme vous le voyez j'ai essayer plusieurs choses : booléen, overide de la méthode de mouvement, redéfinition de la variable speed, destroy du behavior mais rien y fait.

Si quelqu'un à une idée ? Merci

Ci dessous mon objet Boat qui implémente le comportement BoatMovementBehavior.
Tout en bas une copie écran pour visualiser le comportement des acteurs.

class Boat  {
    public actor   : Sup.Actor;
    public sprite  : Sup.SpriteRenderer;
    public ab2b    : Sup.ArcadePhysics2D.Body;
    constructor(objActor: any, objSprite: any, objAb2d: any) {    
        ..
    }   
    ...
    public startMove () : void {
        this.actor.addBehavior(BoatMovementBehavior);
        this.actor.getBehavior(BoatMovementBehavior).startMove();
    }
    public stopMove () : void {
       // this.actor.getBehavior(BoatMovementBehavior).stopMove();
        this.actor.getBehavior(BoatMovementBehavior).destroy();
        Sup.log("destroy?:", this.actor.getBehavior(BoatMovementBehavior).isDestroyed());
    }
....
}
class BoatMovementBehavior extends Sup.Behavior {
    public speed                 :number     = 0;
    public last_key              :string     = "down";
    public rightMove             :boolean    = false;
    inputMove                       = function () {};
    stopMove() {
        this.speed                  = 0;
        this.rightMove              = false;
        this.inputMove              = function () {};
    }
    startMove() {     
        this.speed                  = 0.05;
        this.rightMove              = true;
        this.inputMove              = function () {
            if(this.rightMove){
                let x = 0, y = 0, key = this.last_key;
                if (Sup.Input.isKeyDown("LEFT")) { 
                  x   = -this.speed;
                  key = "left";
                }
                if (Sup.Input.isKeyDown("RIGHT")) { 
                  x   = this.speed;
                  key = "right";
                }
                if (Sup.Input.isKeyDown("UP")) { 
                  y   = this.speed;
                  key = "up";
                }
                if (Sup.Input.isKeyDown("DOWN")) { 
                  y   = -this.speed;
                  key = "down";
                }
                if (Sup.Input.isKeyDown("UP") && Sup.Input.isKeyDown("RIGHT")) {
                  x   = this.speed;
                  y   = this.speed;
                  key = "up_right";
                }
                if (Sup.Input.isKeyDown("DOWN") && Sup.Input.isKeyDown("RIGHT")) {
                  key = "down_right";
                }
                if (Sup.Input.isKeyDown("UP") && Sup.Input.isKeyDown("LEFT")) {
                  key = "up_left";
                }
                if (Sup.Input.isKeyDown("DOWN") && Sup.Input.isKeyDown("LEFT")) {
                  key = "down_left";
                }
                this.move(x, y, key);
            }
        }
    }
    update() {
        this.inputMove();
    }
    getCollisions(x, y){
        if(this.rightMove){
            Sup.ArcadePhysics2D.collides(this.actor.arcadeBody2D, Sup.ArcadePhysics2D.getAllBodies());
            this.actor.arcadeBody2D.setVelocity(new Sup.Math.Vector2(x, y));
        }
    }
    move(x, y, key){
        if(key.indexOf("left")>1) { 
          key.replace("left","right");
        //  this.actor.spriteRenderer.setHorizontalFlip(true);
        }
        else{
         // this.actor.spriteRenderer.setHorizontalFlip(false);
        }
        this.last_key = key;
        if(x !== 0 || y !== 0){
        //  this.actor.spriteRenderer.setAnimation(key);
          this.getCollisions(x, y);
        }
        else {
        //  this.actor.spriteRenderer.setAnimation(key);
          this.getCollisions(0, 0);
        }
    }
}
Sup.registerBehavior(BoatMovementBehavior);



(1 edit)

Bonjour à tous !

Je voudrait tout d'abord remercier toute l'équipe pour ce projet superpowers, je m'éclate tous les jours à aller un peu plus loin dans le petit jeu que je suis en train de faire. Ainsi que tous ceux qui nous font des super tutos pour mieux appréhender et utiliser le soft et tous ceux qui nous aide dans nos galères :) !

Je fait un petit jeu 2D où je place mes acteurs sur la map, je leur ajoute un behavior de type button pour savoir lorsque je clique dessus (merci aux tutos vidéos). Quand on clique sur un acteur je lui ajoute le behavior de déplacement. Mais j'aimerai supprimer ce behavior des autres acteurs pour ne pas tous les déplacer en même temps.

Donc existe t-il un remove ou destroy pour faire un actor.removeBehavior(BoatMovementBehavior); (je n'ai pas réussi à trouver) ?
Sinon quel système je pourrais utiliser ?

Merci pour votre aide et bonne journée,