Ответ был опубликован Ivon на этом форуме .
Это серьезная проблема, которая существует все время PixiJS, она даже предшествует pixi, она существует во Flash!
Вопрос в следующем:
реквизиты ширины и высоты - зло.Они не первоклассные граждане.https://github.com/pixijs/pixi.js/wiki/v4-Gotchas#width-and-height-are-evil
поведение не может быть изменено из-за совместимости со вспышкой.https://github.com/pixijs/pixi.js/blob/dev/src/core/display/Container.js#L570
Смотрите здесь: https://github.com/pixijs/pixi.js/blob/dev/src/core/sprites/Sprite.js#L373.Расширьте класс Sprite, переопределите метод getLocalBounds так, чтобы он игнорировал дочерние элементы, оставьте только код внутри этого «if».
Я решил свою проблему следующим образом;вместо использования PIXI.Sprite, я использовал PIXI.Container
export class ViewContainer extends PIXI.Container {
bg: PIXI.Sprite
constructor(x: number, y: number, w: number, h: number, color: number, container: Container) {
// as we're extending a class, we need to call the inherited classes constructor first
super()
this.x = x
this.y = y
this.bg = new PIXI.Sprite(PIXI.Texture.WHITE)
this.bg.tint = color
this.bg.width = w
this.bg.height = h
this.addChild(this.bg)
container.addChild(this)
}
addBorder() {
let border = new PIXI.Graphics();
border.lineStyle(.1,0xFFFFFF,1);
border.drawRect(0,0,10,10);
border.endFill();
this.bg.addChild(border)
}
}
Затем я создал контейнеры с этим кодом
function createContainers() {
let appW = app.renderer.view.width
let appH = app.renderer.view.height
cardContainer = new ViewContainer(0, appH*10/11, appW*2/5, appH/11, 0x3C2415, app.stage)
actionContainer = new ViewContainer(appW*2/5, appH*10/11, appW*2/5, appH/11, 0x00FF00, app.stage)
chatContainer = new ViewContainer(appW*4/5, 0, appW/5, appH/2, 0x008080, app.stage)
playerContainer = new ViewContainer(appW*4/5, appH/2, appW/5, appH/2, 0xCCCCCC, app.stage)
mapContainer = new ViewContainer(0, 0, appW - appW/5, appH*10/11, 0x0000FF, app.stage)
}
Теперь я могу расположить все объекты какхочу с таким кодом:
let settlement = new PIXI.Sprite(PIXI.loader.resources.settlement_red.texture)
settlement.height = 10
settlement.width = 10
settlement.x = 0
settlement.y = 0
chatContainer.addChild(settlement)