Skip to main content

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

Mais c'est normal de s'y intéresser ;)

Alors pour le premier cas, tu peux poster le bout de code histoire de voir un peu mieux ? Une idée à priori c'est que ton code se fait exécuter avant la création de ton acteur ? Autre chose peut être, dans Sup.getActor(...), tu dois passer le nom de l'acteur et c'est pas possible de donner un "chemin" du style Sup.getActor("Camera/Hud/Scoreboard"). Si c'est ta situation, ce qu'il est possible de faire c'est plutot Sup.getActor("Camera").getChild("Hud/Scoreboard"). Le getChild permet de récupèrer un enfant de ton acteur et cette fonction supporte un chemin.

Pour le deuxième cas, tu peux accéder à un behavior (et donc à ses attributs) sur un acteur comme ceci:

Sup.getActor("Scoreboard").getBehavior(ScoreboardBehavior).setScore(variableDeScore);

// En imaginant avoir la fonction setScore définit sur ton Behavior
class ScoreboardBehavior extends Sup.Behavior {
awake() { } update() { } setScore(score: number) { this.actor.textRenderer.setText(score); } } Sup.registerBehavior(ScoreboardBehavior);

En fait le Actor est dans une Scene, il n'est jamais déclaré autrement que dans cette scene. Hors la scène, je dois la load uniquement à la fin. Je dois déclarer mon actor ailleurs ?


Un bout de code :

//en haut de mon code, déclaration des variables :
let Score = Sup.getActor("Score");

//Behavior de l'élément qui déclenche le changement :
class BalleBehavior extends Sup.Behavior {
update(){
if (this.actor.getX() > 3.5){
//...
Player2Score ++;

TexteScore = Player1Score.toString + " : " + Player2Score.toString;

Sup.getActor("ScenePong/Score").getBehavior(ScoreBehavior).modifierScore(TexteScore); //testé aussi: //Score.textRenderer.setText(Player1Score.toString + " : " + Player2Score.toString);

} }

(+1)

Donc plusieurs choses.

Déjà comme j'ai essayé d'expliquer de facon sans doute peu claire, tu ne peux pas faire Sup.getActor("ScenePong/Score"). Tu dois sois faire Sup.getActor("Score") avec le risque d'avoir un conflit si il y a plusieurs acteurs avec ce nom. Soi tu peux faire Sup.getActor("ScenePong").getChild("Score")

Ensuite, ta première ligne let Score = Sup.getActor("Score") ne peut pas fonctionner si ce code est appelé avant le chargement de la scène. Tu pourrais faire let Score: Sup.Actor; juste pour déclarer la variable. Et après le chargement de la scène, via un awake d'un behavior par exemple, tu pourrais faire Score = Sup.getActor("Score");

J'ai mal recopié mon texte, le "scenepong" était en trop par rapport à un test désespéré de ma part. :)

Je ne comprends pas trop, j'ai tenté le

Sup.getActor("ScenePong").getChild("Score")

Sans succès (au passage je ne savais pas que les scenes étaient des acteurs également), il ne trouvait pas l'actor (null).

Puis j'ai effacé pour avoir :

Sup.getActor("Score")

Et ça a marché. C'est bizarre parce que c'est mot pour mot ce que j'avais d'écrit avant de modifier.

En tout cas merci bien, tu m'as bien aidé.

Je garde le principe de l'awake de côté :)

Alors c'est sans doute pas trop clair. Une scène n'est pas un acteur. Si "ScenePong" c'est le nom de ta scène alors mon code était complètement faux...

(+1)

J'aurais eu le mérite d'essayer des trucs !