Я создаю скретч-карту с 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() {
}
Кто-нибудь знает, как это исправить? или есть другой способ поцарапать?