Sam*_*Sam 3 javascript html5-canvas
我试图绘制不同的画布元素并独立清除它们。但是,我的2种不同的上下文似乎同时影响了画布元素,并且没有作为单独的图层起作用。我希望能够独立更改不同的画布元素以创建背景和前景。
相关HTML:
<canvas id="canvas" style="position: abosloute; top:0px; left: 0px; z-index: 0;" width="500" height="300"></canvas>
<canvas id="canvas2" style="position: abosloute; top:0px; left: 0px;z-index: 1;" width="500" height="300"></canvas>
Run Code Online (Sandbox Code Playgroud)
相关JavaScript(用于创建上下文对象):
var canvas = document.getElementById( "canvas" );
var canvas2 = document.getElementById( "canvas2" );
var ctx = canvas.getContext( "2d" );
var ctx2 = canvas.getContext( "2d" );
Run Code Online (Sandbox Code Playgroud)
相关的JavaScript调用:
ctx.clearRect( 0, 0, canvas.width, canvas.height );
Run Code Online (Sandbox Code Playgroud)
似乎同时清除了ctx和ctx2。我不懂为什么。
这是jsfiddle上完整代码的链接:
您正在从同一画布对象加载上下文:
var ctx = canvas.getContext( "2d" );
var ctx2 = canvas.getContext( "2d" );
Run Code Online (Sandbox Code Playgroud)
使用此代替:
var ctx = canvas.getContext( "2d" );
var ctx2 = canvas2.getContext( "2d" );
Run Code Online (Sandbox Code Playgroud)
现在唯一想知道的是,为什么要使用两个画布而不是一个?看起来您要覆盖它们,但是如果添加边框,您会发现一个在底部,另一个在顶部。
您真正想要做的是在绘制对象之一之前保存状态,然后还原到先前的状态。
我创建了一个新的小提琴,并提供了使用一个上下文的示例(无requestAnimationFrame):
代码的另一个问题是您使用的是setInterval而不是window.requestAnimationFrame。您可以在以下位置找到更多信息:
https://developer.mozilla.org/zh-CN/docs/Web/API/window.requestAnimationFrame
恩,怎么了,更新了JSFiddle以使用requestAnimationFrame:
http://jsfiddle.net/z5vtL/3/(注意每个对象的speed属性)
| 归档时间: |
|
| 查看次数: |
1278 次 |
| 最近记录: |