`Phaser.GameObjects.Container` 似乎强迫我们使用数组。为什么会这样?幕后有什么考虑吗?
`Phaser.GameObjects.Container` seems to force us to use array. Why does it works this way? Is there some consideration under the hood?
我正在尝试了解 Phaser.GameObjects.Container 的工作原理。这是代码。
class BootScene extends Phaser.Scene {
constructor() {
super();
}
create() {
this.menus = this.add.container();
var menuItemBlue = new Phaser.GameObjects.Text(this, 10, 30, 'Blue');
this.menus.add(menuItemBlue);
console.log(this.menus.length);
this.menus = this.add.container();
var menuItemRed = new Phaser.GameObjects.Text(this, 10, 50, 'Red');
this.menus.add(menuItemRed);
console.log(this.menus.length);
}
}
var config = {
width: 320,
height: 260,
scene: [BootScene]
}
var game = new Phaser.Game(config);
<script src="https://cdn.jsdelivr.net/npm/phaser@3.55.2/dist/phaser.js"></script>
create()
方法虽然向容器中添加了两个项目,但长度始终为 1。
我也试过这个
this.menus.add([menuItemBlue, menuItemRed]);
console.log(this.menus.length);
输出符合预期,即 2。
好像我一个一个地添加项目,容器只保留最后一个。如果我想保留它们,我必须将所有项目放在一个数组中,然后将数组添加到容器中。我的理解正确吗?
为什么 Phaser.GameObjects.Container
这样工作?幕后有什么考虑吗?
问题是,您正在创建两个容器 this.menus = this.add.container();
。
删除第二个 "creation",它起作用了。
(我以你的例子评论了第二个创建出来,现在它按预期工作了)
just in case: this.add.container()
creates a container, and adds it to the scene
.
class BootScene extends Phaser.Scene {
constructor() {
super();
}
create() {
// First Container
this.menus = this.add.container();
var menuItemBlue = new Phaser.GameObjects.Text(this, 10, 30, 'Blue');
this.menus.add(menuItemBlue);
console.log(this.menus.length);
// Second not needed Container
// this.menus = this.add.container();
var menuItemRed = new Phaser.GameObjects.Text(this, 10, 50, 'Red');
this.menus.add(menuItemRed);
console.log(this.menus.length);
}
}
var config = {
width: 320,
height: 260,
scene: [BootScene]
}
var game = new Phaser.Game(config);
<script src="https://cdn.jsdelivr.net/npm/phaser@3.55.2/dist/phaser.js"></script>
我正在尝试了解 Phaser.GameObjects.Container 的工作原理。这是代码。
class BootScene extends Phaser.Scene {
constructor() {
super();
}
create() {
this.menus = this.add.container();
var menuItemBlue = new Phaser.GameObjects.Text(this, 10, 30, 'Blue');
this.menus.add(menuItemBlue);
console.log(this.menus.length);
this.menus = this.add.container();
var menuItemRed = new Phaser.GameObjects.Text(this, 10, 50, 'Red');
this.menus.add(menuItemRed);
console.log(this.menus.length);
}
}
var config = {
width: 320,
height: 260,
scene: [BootScene]
}
var game = new Phaser.Game(config);
<script src="https://cdn.jsdelivr.net/npm/phaser@3.55.2/dist/phaser.js"></script>
create()
方法虽然向容器中添加了两个项目,但长度始终为 1。
我也试过这个
this.menus.add([menuItemBlue, menuItemRed]);
console.log(this.menus.length);
输出符合预期,即 2。
好像我一个一个地添加项目,容器只保留最后一个。如果我想保留它们,我必须将所有项目放在一个数组中,然后将数组添加到容器中。我的理解正确吗?
为什么 Phaser.GameObjects.Container
这样工作?幕后有什么考虑吗?
问题是,您正在创建两个容器 this.menus = this.add.container();
。
删除第二个 "creation",它起作用了。
(我以你的例子评论了第二个创建出来,现在它按预期工作了)
just in case:
this.add.container()
creates a container, and adds it to thescene
.
class BootScene extends Phaser.Scene {
constructor() {
super();
}
create() {
// First Container
this.menus = this.add.container();
var menuItemBlue = new Phaser.GameObjects.Text(this, 10, 30, 'Blue');
this.menus.add(menuItemBlue);
console.log(this.menus.length);
// Second not needed Container
// this.menus = this.add.container();
var menuItemRed = new Phaser.GameObjects.Text(this, 10, 50, 'Red');
this.menus.add(menuItemRed);
console.log(this.menus.length);
}
}
var config = {
width: 320,
height: 260,
scene: [BootScene]
}
var game = new Phaser.Game(config);
<script src="https://cdn.jsdelivr.net/npm/phaser@3.55.2/dist/phaser.js"></script>