请查看以下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
。因此,我希望文本在本地按钮中居中 - 但它已被渲染到画布中的任意位置。你能告诉我我对PIXI.js的容器系统有什么不理解吗?
答案 0 :(得分:2)
您的文字没有出现在视角内的原因是因为您绘制了矩形的方式。将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'
在这里没有帮助,因为这对多行文本非常有用。它没有在其父容器中对齐文本;它只是使多行文本对象中的每一行都与中间对齐。
使对象中心在父容器内对齐的最简单方法是设置锚点: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;
}