【问题标题】:How do I scale a group in Phaser 3如何在 Phaser 3 中缩放组
【发布时间】:2019-12-25 05:44:10
【问题描述】:

在 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');

【问题讨论】:

    标签: game-engine game-physics phaser-framework


    【解决方案1】:

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

    组配置API Reference。您还可以看到here 的现场演示。

    在你的情况下,要扩展这个组,你应该简单地创建它:

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

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

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

    【讨论】:

    • 第一个片段不适用于我的代码。我不知道为什么。我更新了问题以显示我是如何创建对象的。
    • 我绝对应该在 js 中使用迭代器,因为代码看起来更时尚:D
    • 继续您的方法并更新您的问题,如果它不起作用,可能是因为您没有添加游戏对象但您使用密钥将其添加到组中? jsfiddle.net/nazimboudeffa/m3649ydn
    • 啊,我的错——第一个 sn-p 仅适用于您还在组配置中创建所有子对象时。如果您想独立创建每个组对象,则需要第二个 sn-p。
    【解决方案2】:

    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);
      }
      
    }
    &lt;script src="//cdn.jsdelivr.net/npm/phaser@3.19.0/dist/phaser.js"&gt;&lt;/script&gt;

    【讨论】:

    • 我想直接在群里设置比例
    • 我认为以我尝试的方式扩展组是不正确的。我读过一些地方说组不是视觉对象,所以用它们做这些事情是没有意义的..
    • 我刚刚以一种人们可以想到的简单方式进行了回答,通过对组子项进行迭代,肯定还有另一种方法可以做到这一点,但这样对于 Phaser 新手来说看起来很干净
    猜你喜欢
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-08
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多