如何在HTMLCanvas上绘制复杂的、嵌套很深的场景?

如何在HTMLCanvas上绘制复杂的、嵌套很深的场景?,html,html5-canvas,Html,Html5 Canvas,我是我的马里奥式平板游戏,我把一切都画在画布上。有一个电视屏幕,你可以随便看看。当在电视屏幕上画东西时,我想把它画成屏幕左上角是(0;0),但电视本身总是旋转和平移的。如果存在更深层次的嵌套元素,问题会变得更糟。有没有一个框架或什么东西可以帮助你?如何绘制嵌套场景?还是这不适合HTML5 您可以建议将电视变成一个单独的画布,使用HTML旋转和翻译它。但是如果我需要把游戏中的一些东西放在电视后面,一些放在前面,那就行不通了。除非我将每个实体制作成单独的画布。在这种情况下,将有数百人。这可能是个坏主

我是我的马里奥式平板游戏,我把一切都画在画布上。有一个电视屏幕,你可以随便看看。当在电视屏幕上画东西时,我想把它画成屏幕左上角是(0;0),但电视本身总是旋转和平移的。如果存在更深层次的嵌套元素,问题会变得更糟。有没有一个框架或什么东西可以帮助你?如何绘制嵌套场景?还是这不适合HTML5

您可以建议将电视变成一个单独的画布,使用HTML旋转和翻译它。但是如果我需要把游戏中的一些东西放在电视后面,一些放在前面,那就行不通了。除非我将每个实体制作成单独的画布。在这种情况下,将有数百人。这可能是个坏主意,对吧

我已经为背景、用户界面等使用了一个单独的画布,但仍然有相当多的实体可以出现在电视的后面和前面。

您可以使用。例如,如果有一个函数
draw()
,可以在画布上绘制某些内容,则可以执行以下操作

function draw(){
    //draw something on the canvas
}

ctx.translate(100,150);
ctx.rotate(Math.PI/4);
ctx.scale(0.5,0.5);
draw();
内容将旋转45度,左上角显示为(100;150),大小为正常大小的一半。要重置转换,只需调用

ctx.resetTranform();
draw();
一切都会恢复正常。 然而,这也有不利的一面;内容不会被剪裁,因此如果
draw
呈现一些本来会在屏幕外显示的内容,它将显示在您想要显示的区域之外