функция скретч-карт getImageData - PullRequest
1 голос
/ 20 марта 2020

Я создаю скретч-карту с Phaser 3 на angular 8, у меня проблема, я не могу определить, сколько текстур я "поцарапал", глядя на inte rnet Я нашел функцию getImageData () но всегда возвращает 0. Это источник игры:

bg: Phaser.GameObjects.TileSprite;
player: Phaser.GameObjects.Sprite;

constructor(private authService: AuthService) {
    super('MainScene');
}

preload() {
    this.load.image('bg_blu', './assets/game/gratta/bg_blu.png');
    this.load.image('bg_rosso', './assets/game/gratta/bg_rosso.png');
    this.load.image('brush', './assets/game/gratta/sparkle1.png');
}

create() {
    const bg = this.add.image(0, 0, 'bg_blu').setOrigin(0, 0);

    const rt = this.add.renderTexture(0, 0, 800, 600);

    for (let y = 0; y < 2; y++) {
        for (let x = 0; x < 2; x++) {
            rt.draw('bg_rosso', x * 512, y * 512);
        }
    }

    const brush = this.make.image({key: 'brush'}, false).setScale(0.5);

    // const brush = this.add.circle(0,0, 32, 0xffffff)

    this.input.on('pointermove', (pointer) => {
        if (pointer.isDown) {
            rt.erase(brush, pointer.x - 16, pointer.y - 16);
            console.log(this.test(rt));

        }
    }, this);

    this.input.on('pointerdown', (pointer) => {
        rt.erase(brush, pointer.x - 16, pointer.y - 16);
    });
}


test(ctx) {
    let alphaPixels = 0;

    const data = ctx.canvas.getContext('2d').getImageData(0, 0, ctx.canvas.width, ctx.canvas.height).data;
    console.log(data)
    for (let i = 3; i < data.length; i += 4) {
        if (data[i] > 0) {
            alphaPixels++;
        }
    }
    console.log(alphaPixels);

    return alphaPixels / (ctx.canvas.width * ctx.canvas.height);
}

update() {


}

Кто-нибудь знает, как это исправить? или есть другой способ поцарапать?

...