- 日志
- 好友
- 卖家信用
- 买家信用
- 注册时间
- 2008-7-13
- 在线时间
- 小时
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册账号
x
可以将两个<canvas>重叠在一起, 底层的用来显示背景图, 上层的用来动态地画图 , 如果上层的<canvas>上动态的画移动的小人 , 那么就能高效地实现类似游戏里的效果了。
HTML----------------------------------------------------------------------------
...
<div id="canvasBox" style="border:1px solid gray; padding:5px;width:812px;height:412px;">
<canvas id="backgroundCanvas" width="800" height="400"
style="background-color:lightgrey;"></canvas>
<canvas id="forgroundCanvas" width="800" height="400"
style="position:relative;left:0px;top:-405px;"></canvas>
</div>
...
---------------------------------------------------------------------------------------------
JS----------------------------------------------------------------------------------------
...
//描画オブジェクト作成
var drawer = {};
drawer.backgroundCanvas = document.getElementById("backgroundCanvas");
drawer.backgroundDc = drawer.backgroundCanvas.getContext("2d"); //Device Context
drawer.forgroundCanvas = document.getElementById("forgroundCanvas");
drawer.forgroundDc = drawer.forgroundCanvas.getContext("2d");
//描画領域の矩形を保持
drawer.backgroundCanvasRect = new myNameSpace.Rectangle();
drawer.backgroundCanvasRect.w = drawer.backgroundCanvas.width;
drawer.backgroundCanvasRect.h = drawer.backgroundCanvas.height;
//背景画像を描画する
var bkImg = new Image();
bkImg.src = "./img/2058583--embed2.jpg";
bkImg.onload = function () {
//背景画像を比例縮小しながら、描画する
drawer.backgroundDc.drawImage(bkImg,
0,
0,
bkImg.width,
bkImg.height,
0,
0,
drawer.backgroundCanvasRect.w,
drawer.backgroundCanvasRect.h);
//文字列の幅を取得し、背景に描画 OK
/*
var metrics = drawer.backgroundDc.measureText("abcABCあいうえお漢字");
drawer.backgroundDc.fillText("「abcABCあいうえお漢字」の幅:" + metrics.width,
20, 60);
*/
// createImageData() / getImageData() / putImageData()
//var img01 = context.createImageData(100,80); //100X80の画像データ領域作成
//後は offset = 4 * (x + y * width) で (x,y)ピクセル位置を計算し
// var byteB = data[offset + 0]; // 0 - 255
// var byteG = data[offset + 1];
// var byteR = data[offset + 2];
// var byteA = data[offset + 3]; // 0 - 1
//で各分量を取得、編集し、
// context.putImageData(img01, dx, dy); で描画
//100ms後に実行
//setTimeout(drawForground, 100);
//100ms毎に実行
var handle = setInterval(drawForground, 100);
/**
* 前画面を描画する
*/
var drawForground = function () {
var posX = Math.random() * 800;
var posY = Math.random() * 400;
if (posX < 0)
posX = 0;
if (posX > 800)
posX = 800;
if (posY < 0)
posY = 0;
if (posY > 400)
posY = 400;
//再描画: 前回の描画をクリア
drawer.forgroundDc.clearRect(0, 0,
drawer.backgroundCanvasRect.w,
drawer.backgroundCanvasRect.h);
drawer.forgroundDc.fillStyle = "rgba(255,0,0,0.5)";
drawer.forgroundDc.fillRect(posX, posY, 20, 20);
};//end drawForground()
...
---------------------------------------------------------------------------------------------
--效果图 为了方便,前台只画一个不断变换位置的矩形而已(实际上可以按照需要画一些复杂图形)
背景是固定不变的图 前台是不断变化的图
|
|