2 votes

Phaser IO Mise à jour du texte créé dynamiquement lors d'un rappel

Je suis en train de créer un jeu en utilisant Phaser IO et SignalR (+jQuery), Je reçois une liste de joueurs du serveur (pour l'instant contenant un ID et un Nom), pour chaque joueur je crée un champ texte, que je veux ensuite manipuler (avec le nombre de votes que le joueur spécifique a), cependant je n'ai aucune idée sur la façon de référencer l'objet texte dynamiquement.

Je suis également ouvert aux nouvelles idées

var game = new Phaser.Game($window.innerWidth, $window.innerHeight, Phaser.Auto, 'gameCanvas');

        var dayState = {
            preload: function () {
                // Preloaded stuff
            },
            create: function () {
                var world = game.world;

                // Players alive in game
                var players = // Call to Server, retrieves list of players

                // Add player 
                for (var i = 0; i < players.length; i++) {
                    var currentPlayer = players[i];

                // Player name
                    game.add.text(world.width - 225, y, currentPlayer.Name);

              // I WANT TO UPDATE THIS UPON CALLBACK
                game.add.text(world.width - 175, y, 0)

                    // Vote button
                        game.add.button(world.width - 50, y + 2, //preloaded texture for button, voteFunction, currentPlayer.Id , 2, 1, 0);                    
                }
            }
        };
        game.state.add('DayState', dayState);
        game.state.start('DayState');

        function voteFunction() {
            // Posts vote to server
        };

function voteReturnedFromServer(amount){
// Server calls this function (SignalR)
// This is where I want to update text element created above with data from SignalR
// Update text with callback data "amount"
};

1voto

James Skemp Points 1993

Vous pouvez aller de l'avant et définir une variable au même niveau que game (pour plus de facilité), puis définissez une variable égale au texte que vous ajoutez au jeu.

var voteText;
// ...

voteText = game.add.text('world.width - 175, y, 0);

Il suffit ensuite de mettre à jour le text si voteText est défini.

voteText.text = 'data returned from the server'

0voto

user1725266 Points 91

Le problème était de trouver le texte après qu'il ait été créé. J'ai fini par créer un tableau en dehors des états du jeu, puis j'ai poussé les textes dans ce tableau. Ensuite, lorsque j'ai besoin d'éditer le texte, je cherche dans le tableau en utilisant grep (puisque j'utilise déjà jQuery).

var game = new Phaser.Game($window.innerWidth, $window.innerHeight, Phaser.Auto, 'gameCanvas');

// This is where I'll push my texts
var voteTexts = [];

        var dayState = {
            preload: function () {
                // Preloaded stuff
            },
            create: function () {
                var world = game.world;

                // Players alive in game
                var players = // Call to Server, retrieves list of players

                // Add player 
                for (var i = 0; i < players.length; i++) {
                    var currentPlayer = players[i];

                // Player name
                    game.add.text(world.width - 225, y, currentPlayer.Name);

              // I WANT TO UPDATE THIS UPON CALLBACK
                var vote = game.add.text(world.width - 175, y, 0)
vote.id = currentPlayer.Id;
voteTexts.push(vote);

                    // Vote button
                        game.add.button(world.width - 50, y + 2, //preloaded texture for button, voteFunction, currentPlayer.Id , 2, 1, 0);                    
                }
            }
        };
        game.state.add('DayState', dayState);
        game.state.start('DayState');

        function voteFunction() {
            // Posts vote to server
        };

function voteReturnedFromServer(amount){
                var textToUpdate = $.grep(voteTexts, function (e) {
                    return e.id === votes.TargetId;
                });
// Since I know there'll be a result and only one, then I use [0]
                textToUpdate[0].text = votes.Count;
};

0voto

StefanBob Points 2251

Utiliser la méthode intégrée setText()

text.setText(amount);

https://photonstorm.github.io/phaser3-docs/Phaser.GameObjects.Text.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X