如何在Phaser 3中将精灵存储在数组中?

时间:2019-02-25 01:08:00

标签: javascript html phaser-framework

我想将游戏中的障碍物存储在数组中,以便可以生成随机数并从数组中绘制随机精灵。所以这是我的问题:

  1. 如何将精灵存储在数组中?
  2. 如何访问数组中的精灵并使用它们?

2 个答案:

答案 0 :(得分:0)

人们之所以不赞成您的问题,是因为a)您尚未在问题中提供任何代码尝试,并且b)您的问题有点太广泛了。

您基于随机数生成障碍物的想法听起来不错。

我不确定您的Sprite对象是什么样子,也不确定您的代码级别,但是下面将向您展示如何创建对象数组。

var obstacles = [
		{image: 'https://via.placeholder.com/50'},
		{image: 'https://via.placeholder.com/100'},
		{image: 'https://via.placeholder.com/150'},
		{image: 'https://via.placeholder.com/200'},
	];
// Get the number of images in the obstacles Array
var obstacleCount = Object.keys(obstacles).length;

// get a random number for pick an obstacle
var randomOb = Math.floor((Math.random() * obstacleCount) + 0);

for(var keyNumber in obstacles){
	if(parseInt(keyNumber) === randomOb){
		// This will be your image object selected by the random number
		console.log(JSON.stringify(obstacles[keyNumber]['image']));
	}
}

希望这可以帮助您前进。

答案 1 :(得分:0)

1)您可以创建精灵,然后将其存储在数组中

let arr = [];
let sprite1 = this.add.image(400, 300, 'spritekey1');
arr.push(sprite1);
let sprite2 = this.add.image(400, 300, 'spritekey2');
arr.push(sprite2);
let sprite3 = this.add.image(400, 300, 'spritekey3');
arr.push(sprite3);

// To get Random element from array use Phaser's Utility function
let randomSprite = Phaser.Utils.Array.GetRandom(arr);

2)或者您可以像这样创建组

let group = this.add.group();
let sprite1 = this.add.image(400, 300, 'spritekey1');
let sprite2 = this.add.image(400, 300, 'spritekey2');
let sprite3 = this.add.image(400, 300, 'spritekey3');    
group.add(sprite1);
group.add(sprite2);
group.add(sprite3);

// group.getChildren() returns an array
let randomSprite = Phaser.Utils.Array.GetRandom(group.getChildren());

组示例here将很有用。 组Documentation.

使用 Phaser 提供的效用函数来获取随机元素是最简单直接方法。 Phaser.Util.Array.GetRandom() documentation.