angularjs - Phaser3: Hvordan lage en grafikk med tekst?
Jeg bruker Phaser3 i Angular-prosjektet mitt og så langt har jeg klart å lage en grafisk firkant og en tekst. Det virker imidlertid komplisert og kjedelig å behandle dem separat. Finnes det en måte å lage ett objekt som lar meg integrere både en grafisk form og tekst sammen?
Dette er hva min nåværende kode er:
this.graphics = this.add.graphics();
this.graphics.lineStyle(1,0xff0000);
this.graphics.fillStyle(0x02455f, .5);
this.graphics.strokeRect(100,200,250,250);
this.graphics.fillRect(100,200,250,250);
this.helloWorld = this.add.text(
225,
300,
"Hello World", {
font: "40px Arial",
color: "#ffffff"
}
);
Koden ovenfor lager et kvadrat og en tekst, og jeg har plassert dem slik at de er nær hverandre, slik ser det ut: Det koden har vist
Jeg vil behandle dette som en egen separat ting, men jeg kan ikke når det er kodet på denne måten. Finnes det et bedre alternativ for å lage ett enkelt objekt som lar meg legge til begge stilene?
Svar #1
Jeg foreslår å bruke Phaser.GameObjects.Container
Et container-spillobjekt.
En beholder, som navnet tilsier, kan «inneholde» andre typer spillobjekter. Når et spillobjekt legges til i en beholder, blir beholderen ansvarlig for rendering av det.
[...]
Hvis du endrer en transform-egenskap til Container, slik som
Container.xellerContainer.rotation, vil det automatisk påvirke alle barn også.
Svar #2
Jeg er litt sen til festen, men en annen måte kan være å lage en ny tekstur og tegne/skrive teksten på den. (basert på det offisielle eksemplet)
Du må "bare":
- opprett et
graphics-objekt - opprett et
text-objekt - opprett en
renderTexture - tegn
graphicsogtextpårenderTexture - slett de opprettede objektene
- bruk nå den opprettede nye
texture, når og etter behov.
document.body.style = 'margin:0;';
var config = {
type: Phaser.AUTO,
width: 536,
height: 183,
scene: {
create
},
banner: false
};
function create () {
let graphics = this.make.graphics();
graphics.lineStyle(1,0xff0000);
graphics.fillStyle(0x02455f, .5);
graphics.strokeRect(10, 20, 160, 80);
graphics.fillRect(10, 20, 160, 80);
let helloWorld = this.add.text( 35, 50, "Hello World")
.setFont("20px Arial")
.setColor('#ffffff');
let renderTexture = this.add.renderTexture(9, 19, 172, 102);
renderTexture.draw(graphics);
renderTexture.draw(helloWorld);
renderTexture.saveTexture('newTexture');
graphics.destroy();
helloWorld.destroy();
renderTexture.destroy();
let image = this.add.image(100,100, 'newTexture').setOrigin(.5);
this.tweens.add({
targets: image,
angle: {from: 0, to: 360},
duration: 6000,
repeat:-1
});
}
new Phaser.Game(config);<script src="https://cdn.jsdelivr.net/npm/[email /dist/phaser.js"></script>