HTML5 Canvas在同一画布中分层对象

时间:2012-05-02 09:18:25

标签: javascript html5 canvas z-index

我一直在寻找在同一画布中分层对象,但没有找到很多关于它的信息。

目前我已经使用多种画布技术将事物叠加在一起

例如: canvas Holder< ---这包含所有其他画布 加载画布 菜单画布 游戏画布 背景画布

并按特定顺序将它们添加到“stage = new stage (mainCanvas)”,即可获得所需的分层

stage.addChild(background);
stage.addChild(game);
stage.addChild(menu);
stage.addChild(loading);

这很好用,但我想知道是否有办法改变添加到'游戏'画布的图像的zIndex,如果我在画布中有2个图像?

我已经在现场游戏中看到了这种事情,游戏遵循网格状格式,当你将射手放在另一个射手上方的广场上时,会在它后面重新定位......

http://fieldrunnershtml5.appspot.com/#sd ---适用于Chrome

任何想法如何完成?

由于

3 个答案:

答案 0 :(得分:1)

不需要多个画布。当您在画布2d中使用游戏时,通常会清除并重绘画布〜每秒60次。你最后画的是什么。因此,为了模拟图层,您可以根据z-index对数组中的所有游戏对象进行排序,然后迭代数组中的所有对象,调用它们的绘制方法。

优化这样的渲染器有很大的空间,但这是使其工作的基本而简单的方法。

答案 1 :(得分:0)

canvas只是像素 - 它没有“图层”。

如果你想进行视差滚动,那就是把多个画布放在同一个地方,并使用透明度来展示背后的那些。

答案 2 :(得分:0)

使用多个画布实现图层的技术是非常好的方法。您还应该跟踪需要清除/重绘的层 - 例如,{}仅在滚动时才刷新map或者GUI/HUD实际上不需要每秒重绘60次。

画布中没有z-index或对象,所有机制都取决于您自己的实现。例如,您可以创建一个要绘制的命令或对象数组 - 然后按zIndex(或任何您命名的方式)对其进行排序,并执行每个元素。