【发布时间】:2015-10-21 02:33:02
【问题描述】:
我正在尝试使用 SVG 图像制作游戏,以实现可扩展性并通过程序从它们中制作物理对象(请参阅 matter.js 了解如何)。
我遇到的问题是,如果我加载 2 个不同的 SVG 纹理然后渲染它们,第二个在它下面有第一个分层。
光栅图像不会发生这种情况,画布选项不会发生这种情况,只有 WebGL 会发生这种情况。
有没有办法阻止这种情况,还是我做错了 SVG?
var renderer = PIXI.autoDetectRenderer(
window.innerWidth,
window.innerHeight,
{
backgroundColor : 0xffffff,
resolution:2
}
);
// add viewport and fix resolution doubling
document.body.appendChild(renderer.view);
renderer.view.style.width = "100%";
renderer.view.style.height = "100%";
var stage = new PIXI.Container();
//load gear svg
var texture = PIXI.Texture.fromImage('https://upload.wikimedia.org/wikipedia/commons/thumb/0/0b/Gear_icon_svg.svg/2000px-Gear_icon_svg.svg.png');
var gear = new PIXI.Sprite(texture);
//position and scale
gear.scale = {x:0.1,y:0.1};
gear.position = {x:window.innerWidth / 2,y:window.innerHeight / 2};
gear.anchor = {x:0.5,y:0.5};
//load heart svg
var texture2 = PIXI.Texture.fromImage('https://upload.wikimedia.org/wikipedia/commons/thumb/4/42/Love_Heart_SVG.svg/2000px-Love_Heart_SVG.svg.png');
var heart = new PIXI.Sprite(texture2);
//position and scale
heart.scale = {x:0.1,y:0.1};
heart.position = {x:window.innerWidth/4,y:window.innerHeight / 2};
heart.anchor = {x:0.5,y:0.5};
//add to stage
stage.addChild(gear);
stage.addChild(heart);
// start animating
animate();
function animate() {
gear.rotation += 0.05;
// render the container
renderer.render(stage);
requestAnimationFrame(animate);
}
<script src="https://github.com/pixijs/pixi.js/releases/download/v4.8.2/pixi.min.js"></script>
【问题讨论】:
-
你找到解决办法了吗?
-
这听起来像是浏览器和/或 pixi.js 的错误。您是否仍然看到这种行为?
-
不清楚你的意思是“我遇到的问题是如果我加载 2 个不同的 SVG 纹理然后渲染它们,第二个在它下面有第一个分层。”你能看穿你的svg吗?它是透明的svg吗?你能添加一个突出显示问题的屏幕截图吗?
-
我不明白你为什么要使用 SVG 作为纹理。为什么不直接导入该 SVG 内部的 .png 呢?在 WebGL 中没有矢量图像的概念。
-
我相信问题提供的示例是使用 PNG,而不是 SVG。查看传递给
PIXI.Texture.fromImage()的 URL。 URL 以2000px-Gear_icon_svg.svg.png和2000px-Love_Heart_SVG.svg.png结尾。这些是 PNG 文件,而不是 SVG 文件。所以......无论这里发生什么行为,我怀疑它与 SVG 与 PNG 无关。我也不明白为什么行为不正确。
标签: javascript svg webgl pixi.js