notes_1(canvas)

来源:互联网 发布:mac命令行安装jdk 编辑:程序博客网 时间:2024/05/22 09:06

<canvas>

var context = canvas.getContext('2d');

  • 绘制矩形:
    fillRect(x,y,width,height) 实心的
    strokeRect(x,y,width,height) 空心的
    clearRect(x,y,width,height) 清除指定的矩形区域,使之完全透明
  • 绘制复杂形状或路径:
    beginPath() 开始新的路径
    closePath() 闭合路径
    fill() stroke() 填充,空心
    moveTo()
    lineTo()
    arc(x,y,radius,startAngle,endAngle,anticlockwise) 弧 (顺时针false)
  • 绘制文本
    strokeText(text,x,y)
    fillText(text,x,y)
    修改字体:
    context.font = '10 pt Arial';
    自定义画笔样式:
    context.fillStyle = "red";
    context.strokeStyle = ...;
  • 绘制图像
    drawImage(image,x,y,width,height)
    dranImage(image,sourceX,sourceY,sourceWidth,sourceHeight,x,y,width,height)
    从原图片切割一个矩形区域 在(x,y)处绘制。
  • 平移和旋转:
    translate(x,y) 坐标系的原点平移到(x,y)
    rotate(angle) 以原点为中心顺时针旋转坐标系
    scale(x,y)

Tip: 可以在操作前用save()方法保存当前状态,完毕后restore()返回至上一状态。


<audio>

audio格式:MP3、WAV、OGG

canPlayType() 方法检测浏览器支持。注意该函数返回的是: “”, “maybe”或者”probably”。

检测音频支持:

    var audio = document.createElement('audio');    var mp3Support, oggSupport;    if (audio.canPlayType) {        mp3Support = "" != audio.canPlayType('audio/mpeg');        oggSupport = "" != audio.canPlayType('audio/ogg; codecs="vorbis"');    } else {        mp3Support = false;        oggSupport = false;    }    var soundFileExtn = oggSupport?".ogg":mp3Support?"mp3":undefined;    if(soundFileExtn) {        var sound = new Audio();        sound.src = "somemusic" + soundFileExtn;        sound.play();    }

音频文件加载完成后,audio对象触发canplaythrough事件。可以利用追踪。

    if(soundFileExtn) {        var sound = new Audio();        sound.addEventListener('canplaythrouth', function () {            alert('loaded');            sound.play();        });        sound.src = "somemusic" + soundFileExtn;    }

精灵图 Sprite Sheet

context.drawImage(this.spriteImage, this.imageWidth*(imageNumber), 0, this.imageWidth, this.imageHeight, x, y,this.imageWidth, this.imageHeight)

动画

典型的动画和绘图循环

function animationloop () {    //遍历游戏物体并更新位置}function drawingloop () {    //1 擦除 canvas    //2 遍历所有物体    //3 绘制每个物体}

时间函数:
setInterval(functionName, timeInterval) 每隔一个时间间隔就调用一次函数。
clearInterval()

setTimeout(functionName, timeInterval) 在给定时间间隔后,调用函数一次。
clearTimeout()


使用requestAnimationFrame:

(function() {    var lastTime = 0;    var vendors = ['ms', 'moz', 'webkit', 'o'];    for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {        window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];        window.cancelAnimationFrame =           window[vendors[x]+'CancelAnimationFrame'] || window[vendors[x]+'CancelRequestAnimationFrame'];    }    if (!window.requestAnimationFrame)        window.requestAnimationFrame = function(callback, element) {            var currTime = new Date().getTime();            var timeToCall = Math.max(0, 16 - (currTime - lastTime));            var id = window.setTimeout(function() { callback(currTime + timeToCall); },               timeToCall);            lastTime = currTime + timeToCall;            return id;        };    if (!window.cancelAnimationFrame)        window.cancelAnimationFrame = function(id) {            clearTimeout(id);        };}());

使用requestAnimationFrame调用绘图循环:

function drawingLoop (nowTime) {    var gameLoop = requestAnimationFrame(drawingLoop);    //清空canvas    //遍历所有物体    //画出它们}

要停止动画:

cancelAnimationFrame(gameLoop);


0 0
原创粉丝点击