Tengo una siguiente matriz de números hexadecimales, que son diferentes personajes en el juego.
gameState.charactersArray = [0xff5c33, 0x324563, 0x000000, 0xffffff, 0x003300];Y si trato de acceder a un número que incluye letras, por lo que los índices 0 y 3, entonces el carácter simplemente no se muestra (por cierto, no recibo ningún error registrado en la consola). Los números hexadecimales de esa matriz compuesta solo por números, por lo que los índices 1, 2 y 4 funcionan bien.
Además, si en la línea:
gameState.character.setTint(gameState.charactersArray[gameState.characterIndex]); Pongo cualquiera de los números hexadecimales con letras, por ejemplo, 0xff5c33 en lugar de gameState.charactersArray[gameState.characterIndex] , entonces también funciona bien.
Solo quiero poder establecer el color del personaje según la elección del usuario. También gameState.characterIndex funciona bien, no hay problemas.
Dado que los números hexadecimales son numbers y ambos se tratan de la misma manera (en javascript) , no debería importar si usa el literal hexadecimal o la forma decimal. Entonces, el problema probablemente esté en otro lugar, ¿tal vez gameState.characterIndex no sea correcto, o el tint se agregue varias veces?
Pero si quiere estar en el lado de guardar, puede usar el objeto Phaser Color , con esto puede convertirlo en cadenas, números o acceder a los componentes individuales.
Aquí una demostración, que ilustra los puntos mencionados anteriormente:
(si usa el objeto de color, lo usaría en la inicialización de la matriz, como let colors = [Phaser.Display.Color.ValueToColor(0xff5c33),..] más o menos.
document.body.style = 'margin:0;'; var config = { type: Phaser.AUTO, width: 536, height: 183, backgroundColor: 0xcdcdcd, scene: { preload, create }, banner: false }; function preload(){ this.load.image('img', 'http://labs.phaser.io/assets/sprites/copy-that-floppy.png'); } function create () { let colors = [0xff5c33, 0x324563, 0x000000, 0xffffff, 0x003300]; for(let idx = 0; idx < colors.length; idx++){ let currentColor = colors[idx]; let colorObj = Phaser.Display.Color.ValueToColor(currentColor); let colorString = Phaser.Display.Color.RGBToString(colorObj.r, colorObj.g, colorObj.b); let img = this.add.image(10 + (idx * 90), 10 , 'img').setScale(.5).setOrigin(0); let text = this.add.text(10 + (idx * 90), 90, `${currentColor}\n${colorString}`, {color: colorString}); img.setTint(currentColor); } } new Phaser.Game(config); <script src="https://cdn.jsdelivr.net/npm/phaser@3.55.2/dist/phaser.js"></script> Actualización (de los comentarios) :
los valores de matriz para el índice 0 y 3 deben haberse sobrescrito en alguna parte.