gpt4 book ai didi

javascript - 如何在 PIXI.js 中本地容器中将文本对象居中

转载 作者:行者123 更新时间:2023-12-02 14:03:51 27 4
gpt4 key购买 nike

请查看以下 JSFiddle:https://jsfiddle.net/r4yfozsw/1/

var stage = new PIXI.Container(),
renderer = PIXI.autoDetectRenderer(640, 480),
loader = PIXI.loader,
resources = loader.resources;

var menu = createMenu();

document.body.appendChild(renderer.view);
stage.addChild(menu);

//Render the stage
loop();


function loop(){
setInterval(() => {
renderer.render(stage);
}, 1000/10 );
}

function createMenu(){
var buttons = new PIXI.Container();
buttons.addChild(createButtonEndTurn());
return buttons;
}

function createButtonEndTurn(){
var buttonText = new PIXI.Text("End Turn",
{
fontFamily : 'Arial',
fontSize: 24,
fill : "white",
align : 'right'
});
var buttonEndTurn = new PIXI.Graphics();

buttonEndTurn.beginFill(0xFF2342);
buttonEndTurn.drawRect(400,300,150,100);
buttonEndTurn.endFill();
buttonEndTurn.interactive = true;
buttonEndTurn.on('mousedown', endTurnEvent);
buttonEndTurn.addChild(buttonText);

return buttonEndTurn;
}

function endTurnEvent(eventData){
eventData.target.children[0].setText("End Turn" + turn);
turn++;
console.log("Turn " + turn + " finished!");
}

我将 Text 对象作为子对象添加到我的按钮矩形中。我还为文本添加了选项align。因此,我希望文本在本地按钮内居中 - 但它已被渲染到 Canvas 中的任意位置。你能告诉我我对 PIXI.js 容器系统有什么不明白的地方吗?

最佳答案

您的文本没有出现在矩形内的原因是您绘制矩形的方式。将 Graphics 对象视为一个容器。在该容器中,您在位置 {x:400, y:300} 处绘制了一个矩形,但容器本身仍位于位置 {x:0, y:0}。因此,当您添加文本对象时,它也会位于容器内的位置 {x:0, y:0}。如果您希望文本在矩形内移动,则需要移动容器的位置。

buttonEndTurn.beginFill(0xFF2342);
buttonEndTurn.drawRect(0,0,150,100);
buttonEndTurn.endFill();
buttonEndTurn.x = 400;
buttonEndTurn.y = 300;

现在至于对齐,您必须手动设置。设置 align : 'center' 在这里没有帮助,因为这仅对多行文本真正有用。它不会在其父容器内对齐文本;它只是使多行文本对象中的每一行都居中对齐。

使对象在父容器内居中对齐的最简单方法是设置 anchor :buttonText.anchor.x = 0.5;

现在文本将从中点锚定,但正如您所看到的,它没有正确定位在父矩形内。因此,只需将其移过去即可:buttonText.x = buttonEndTurn.width/2;

完整的函数如下:

function createButtonEndTurn(){

var buttonEndTurn = new PIXI.Graphics();
buttonEndTurn.x = 400;
buttonEndTurn.y = 300;
buttonEndTurn.beginFill(0xFF2342);
buttonEndTurn.drawRect(0,0,150,100);
buttonEndTurn.endFill();
buttonEndTurn.interactive = true;
buttonEndTurn.on('mousedown', endTurnEvent);
var buttonText = new PIXI.Text("End Turn",
{
fontFamily : 'Arial',
fontSize: 24,
fill : "white",
align : 'center'
});
buttonText.anchor.x = 0.5;
buttonText.x = buttonEndTurn.width/2;
buttonEndTurn.addChild(buttonText);
return buttonEndTurn;
}

关于javascript - 如何在 PIXI.js 中本地容器中将文本对象居中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40211433/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com