我遇到了一些问题:我试图访问已添加精灵的容器的宽度,但它似乎返回为 1。但是,当我在控制台中检查对象时,它给了我合适的宽度。
我写了一个代码笔来显示这个问题,但它是这样的:
var container = new PIXI.Container();
app.stage.addChild(container);
var sprite = PIXI.Sprite.fromImage('https://i2.wp.com/techshard.com/wp-
content/uploads/2017/05/pay-1036469_1920.jpg?ssl=1&w=200');
container.addChild(sprite);
console.log(container.height);
console.log(container);
Run Code Online (Sandbox Code Playgroud)
第一个控制台日志返回 1,而如果我进入第二个日志中的对象,它会返回 141。
我正在尝试像演示中那样将容器居中。演示容器返回正确的宽度,除非您尝试仅对一只“兔子”执行此操作(用互联网图像替换兔子纹理,并且 for 循环也被注释掉)。
有关于此的正确方法有什么建议吗?干杯
小智 6
这里有一些事情需要解决。
您正在从尚未加载的图像创建纹理。
在图像加载之前,pixi 将无法为您提供其尺寸,并且当您立即查询容器时,容器会报告宽度和高度为 1。如果您将相同的 console.log 语句置于超时状态,那么它将在图像加载后报告尺寸,因此尺寸将是准确的。
注销对象本身似乎可行,因为当您检查其内容时,它们已更新为正确的值,因为此时图像已加载。
如果在您使用它创建新精灵时纹理已经在缓存中,那么您无需等待即可访问其真实尺寸。
事实上,确实如此。你只是没有注意到而已。
魔法就在bunny.anchor.set(0.5);. 它将 25 个宽度和高度均为 1 的精灵排列在网格中。通过将它们分开,它们的容器现在的宽度和高度均为 160。
该容器现在根据其当前尺寸立即居中,然后当精灵纹理完成加载并且精灵使用其新尺寸更新时。然而,由于它们的锚点设置为 0.5,这意味着尽管它们的容器现在更大,但它们仍保持居中。
您可以尝试使用比兔子更大的图像来夸大事物并更改锚点值,以及使用重新运行代码按钮而不仅仅是刷新页面。如果重新运行代码,用于纹理的图像仍由 pixi 缓存,因此您会得到不同的结果。
在使用资源创建精灵之前加载资源。
(或者至少在加载之前等待,然后再查询其尺寸来定位事物)
您可以在此处找到 pixi 资源加载器的示例:http://pixijs.io/examples/ ?v=next-interaction#/basics/spritesheet.js