开发者问题收集

如何在 Phaser 3 中缩放群组

2019-08-20
4863

在 Phaser 2 中,我们通过设置 scale 属性来缩放简单对象,如文档中所述:

https://phaser.io/examples/v2/groups/group-scale

但在 Phaser v3 中没有等效项。

可能的 URL https://phaser.io/examples/v3/groups/group-scale 指向的内容为空。如果我这样做:

this.enemies = this.add.group();
this.enemies.scale.set(2, 2);

它会抛出:

 Phaser v3.19.0 (WebGL | Web Audio)  https://phaser.io
indexph.js:22 Uncaught TypeError: Cannot read property 'set' of undefined

在 Phaser 3 中缩放一组精灵的适当形式是什么?

我认为下面的代码应该可以工作,但是它不行......它不能缩放从组创建的对象:

preload() {
    this.load.atlas("sprites", "assets/spritesheet.png", "assets/spritesheet.json")
}

create() {


    this.enemies = this.add.group({
        key: 'sprites' ,                        
        setScale: { x: 0.1, y: 0.1 }
    });

    this.enemies.create(60, 60, 'sprites', 'hamburguer.png');
2个回答

在 Phaser 3 中,您可以通过修改声明组时传入的 GroupConfig 对象来缩放组。

GroupConfig API 参考 。您还可以在 此处 查看现场演示。

对于您而言,要缩放此组,只需像这样创建它:

this.enemies = this.add.group({
  setScale: { x: 2, y: 2}
});

或者,您可以在创建组后对其进行迭代,并单独缩放每个子对象。

this.enemies = this.add.group();
this.enemies.children.iterate((child) => {
  child.setScale(2, 2);
});

brae
2019-08-20
var config = {
    type: Phaser.AUTO,
    parent: 'phaser-example',
    width: 800,
    height: 600,    loader: {
      baseURL: 'https://raw.githubusercontent.com/nazimboudeffa/assets/master/',
      crossOrigin: 'anonymous'
    },
    scene: {
        preload: preload,
        create: create
    },
    physics: {
        default: 'arcade'
    }
};

var game = new Phaser.Game(config);

function preload ()
{
  this.load.image('alien1', 'sprites/phaser-alien.png');
  this.load.image('alien2', 'sprites/alien2.png');
}

function create ()
{ 
  this.enemies1 = this.add.group();
  this.enemies2 = this.add.group();
  
  for (let i = 0; i < 64; i++)
  {
    let x = Phaser.Math.Between(0, 400);
    let y = Phaser.Math.Between(0, 600);

    this.enemy1 = this.add.image(x, y, 'alien1');
    this.enemies1.add(this.enemy1);
  }
  
  for (let i = 0; i < 64; i++)
  {
    let x = Phaser.Math.Between(400, 800);
    let y = Phaser.Math.Between(0, 600);

    this.enemy2 = this.add.image(x, y, 'alien2');
    this.enemies2.add(this.enemy2);
  }
  
  console.log(this.enemies1.getLength())
  //console.log(this.enemies.getChildren())
  console.log(this.enemies1.getChildren()[2])
  
  for (let i = 0; i < 64; i++)
  { 
    this.enemies1.getChildren()[i].setScale(2);
  }
  
}
<script src="//cdn.jsdelivr.net/npm/[email protected]/dist/phaser.js"></script>
nazimboudeffa
2019-08-20