canvas之2d上下文

使用canvas时必须先指定widthheight作为绘图区域.
canvas的开闭标签之间的内容, 在浏览器不支持canvas标签时显示.

getContext(contextType)用于获取上下文, contextType是上下文的类型, 值可以为"2d", "webgl"

填充和描边

填充fillStyle: 指定填充样式
描边strokeStyle: 指定图形的边样式
属性值可以为: 字符串/渐变对象/模式对象.

绘制矩形

fillRect()绘制填充矩形
strokeRect()绘制描边矩形
clearRect()清除矩形区域
这三个方法接受四个参数: 矩形的x, y坐标和矩形的widthheight.

绘制路径

beginPath(): 新建一条路径,生成之后,图形绘制命令被指向到路径上生成路径
closePath(): 闭合路径之后图形绘制命令又重新指向到上下文中。
stroke(), 用strokeStyle的值描边
fill(), 用fillStyle的值填充
isPointInPath(x, y)用于判断点(x, y)在路径关闭前是否在路径上.

圆弧

arc(x, y, radius, startAngle, endAngle, counterclockwise): 以(x,y)为圆心绘制一条弧线, 弧线半径为radius, 起始和结束角度(用弧度表示)分别为startAngle, endAngle. 最后一个参数表示起始角度和结束角度是否按逆时针方向计算. 值为false表示按顺时针方向计算.

arcTo(x1, y1, x2, y2, radius): 从上一点开始绘制一条弧线, 到(x2, y2)为止, 并且以给定半径radius穿过(x1, y1)

线

lineTo(x,y): 从上一点开始绘制一条直线, 到(x, y)为止

移动

moveTo(x, y): 将绘图游标移动到(x, y), 不画线

矩形

rect(x, y, width, height): 从点(x, y)开始绘制一个矩形, 宽度和高度分别由widthheight指定. 这个绘制的是矩形路径

贝赛尔曲线

quadraticCurveTo(cx, cy, x, y): 二次贝塞尔曲线, 从上一点开始绘制一条二次曲线, 到(x, y)为止. 并且以(cx, cy)作为控制点

bezierCurveTo(c1x, c1y, c2x, c2y, x, y): 三次贝塞尔曲线, 从上一点开始绘制一条曲线, 到(x, y)为止, 并且以(c1x, c1y)(c2x, c2y)为控制点.

绘制文本

fillText()fillStyle绘制文本
strokeText()strokeStyle为文本描边
这两个方法接收四个参数: 绘制的字符串, xy坐标, 以及可选的最大像素宽度

font表示文本样式, 大小及字体
textAlign表示文本对齐方式. start/end/left/right/center, 和x坐标有关
textBaseline表示文本的基线. top/hanging/middle/alphabetic/ideographic/bottom, 和y坐标有关
direcion表示文本方向. ltr/rtl/inherit

fillText()strokeText()根据上面四个属性绘制文本

变换

rotate(angle): 围绕原点旋转angle弧度, 顺时针
scale(scaleX, scaleY): 缩放图像, 在x方向乘以scaleX, 在y方向乘以scaleY. 默认值都为1.0
translate(x, y): 将坐标原点移动到(x, y)处.
transform(m1_1, m1_2, m2_1, m2_2, dx, dy): 当前变换矩阵参数乘以下面矩阵修改变换矩阵

∣ m 1 1 m 1 2 d x m 2 1 m 2 2 d y 0 0 1 ∣ \begin{vmatrix} m1_1&m1_2&dx\\m2_1&m2_2&dy\\0&0&1\end{vmatrix}\quad m11m210m12m220dxdy1

m1_1: 水平方向的缩放
m1_2: 水平方向的倾斜偏移
m2_1: 竖直方向的缩放
m2_2: 竖直方向的倾斜偏移
dx: 水平方向的移动
dy: 数值方向的移动
setTransform(m1_1, m1_2, m2_1, m2_2, dx, dy): 将变换矩阵重置为默认状态, 然后再调用transform()
resetTransform(): 重置当前变换为单位矩阵

save()将变换的当前设置保存在栈结构中
restore()栈顶出栈, 返回栈顶的设置
上面两个方法保存一下内容

  1. 当前的变换
  2. strokeStyle, fillStyle, globalAlpha, lineWidth, lineCap, lineJoin, miterLimit, shadowOffsetX, shadowOffsetY, shadowBlur, shadowColor, globalCompositeOperation 的值
  3. 当前的裁切路径

绘制图像

绘制图像要用到drawImage()方法, 这个方法的第一个参数可以是image对象或canvas元素或者是一个图像的URL
drawImage(image, x, y): 坐标(x,y)表示绘制图像的起点. 这种方法绘制的图像大小和原始图像大小一致
drawImage(image, x, y, width, height): widthheight用来缩放图像
drawImage(image, x1, y1, w1, h1, x2, y2, w2, h2): 选中原始图像的某个区域进行绘制
x1: 源图像的x坐标
y1: 源图像的y坐标
w1: 源图像的宽度
h1: 源图像的高度
x2: 目标图像的x坐标
y2: 目标图像的y坐标
w2: 目标图像的宽度
h2: 目标图像的高度
toDataURL(MIME): 到处创建的图像, MIME为图像的MIME类型格式, 可以为image/png, image/jpg
要注意的是:

  1. 调用toDataURL时, 图像不能来自其他域.
  2. toDataURLCanvas对象的方法, 不是上下文对象的方法.

阴影

shadowColor: 用CSS颜色格式表示阴影颜色, 默认为黑色
shadowOffsetX: 形状或路径x轴方向的阴影偏移量, 默认为0
shadowOffsetY: 形状或路径y轴方向的阴影偏移量, 默认为0
shadowBlur: 模糊的像素数, 默认为0(不模糊)

渐变

渐变由CanvasGradient实例表示.
createLinearGradient(x1, y1, x2, y2): 绘制线性渐变. 从起点(x1, y1)到终点(x2, y2). 上下文调用这个方法后返回CanvasGradient实例
createRadialGradient(x1, y1, r1, x2, y2, r2): 绘制放射渐变. 前三个参数为第一个园的圆心和半径,后三个参数为第二个园的圆心和半径

获取图像数据

getImgeData(x, y, width, height): 用于获取原始图像数据. (x, y)为数据的起始点, width为该区域的宽度, height为高度, 单位是px. 这个方法返回imageData对象的实例.
imageData实例有三个属性:width, heightdata
data是一个数组, 保存这个每个像素的数据. 每个像素数据用4个数组项来保存, 分别为红, 绿, 蓝和透明值.
如, 获取第一个像素的数据.

data = imageData.data
red = data[0]
green = data[1]
blue = data[2]
alpha = data[3]

可以推出第n个像素的数据为:

red = data[4n-4]
green = data[4n-3]
blue = data[4n-2]
alpha = data[4n-1]

合成

globalAlpha: 值介于0(默认值)和1之间, 表示透明度.

globalCompositionOperation表示后绘制图形和先绘制的图形如何结合. 有以下值选择.
source-over: 默认值, 后绘制的图形位于先绘制的图形上方
source-in: 后绘制的图形与先绘制的图形重叠的部分可见, 其他部分完全透明
source-out: 后绘制的图形与先绘制的图形不重叠部分可见, 先绘制的图形完全透明
source-atop: 后绘制的图形与先绘制的图形重叠部分课件, 先绘制的图形不受影响
destination-over: 后绘制的图形位于先绘制的图形的下方, 只有之前透明像素下的部分才可见
destination-in: 后绘制的图形位于先绘制的图形下方, 两者不重叠部分完全透明
destination-out: 后绘制的图形擦除与先绘制的图形的重叠的部分
destination-atop: 后绘制的图形位于先绘制的图形下方, 在两者不重叠的地方, 先绘制的图形会变透明
lighter: 后绘制的图形与先绘制的图形重叠部分的值相加, 使该部分变亮.
copy: 后绘制的图形完全替代与之重叠的先绘制图形
xor: 后绘制的图形与先绘制的图形重叠的部分执行"异或"操作

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
随着html5 相关技术的兴起,因其跨平台的特性,和标准的日益完善。html5相关技术越来越多的被应用到前沿app的开发中,尤其是html5 小游戏的开发。 Laro 是一个基于html5 canvas的用于平面2d或者2.5d游戏制作的轻量级游戏引擎。 因为当前canvas作为画布形态的dom元素,并提供了大量关于矢量图以及texture绘制的api,但是由于其本身提供的api太过于底层,在类似游戏这一类交互性,逻辑性较为复杂的app时。需要开发者编写大量底层的api来实现本身的业务逻辑。 Laro出现的目的是为了简化使用canvas制作游戏时的api调用。同时提供了一套“有限状态机”的开发模式,这种模式在对于游戏这一类的典型的“事件驱动”的模型的开发上。能够很好的做到模块间的低耦合,利于开发者梳理整个开发逻辑。 Laro 游戏引擎目前已经完成了游戏开发中所需要的模块和api的封装,并有一些实际的Demo和TestCase供使用者参考。而且随后会结合这个引擎整理出一套用于html5 小游戏开发的可视化编辑工具。 旨在帮助开发者更快更容易的搭建一款小游戏为目的。 目前已经开源到github (https://github.com/AlloyTeam/Laro) 我们团队希望通过Laro的不断完善,能够帮助更多的html5 小游戏开发者以更快的速度,更优的质量完成 html5小游戏 产业化的开发。 Version Log 0.1 - 基础模块搭建 0.2 - 融入jcanvas,配合鼠标事件处理 0.3 - 加强状态机模块 查看以下demo最好使用chrome  : ) http://hongru.github.com/proj/laro/examples/emberwind/ http://hongru.github.com/proj/laro/examples/typeshot/index.html http://hongru.github.com/proj/laro/examples/jxhome/ http://heroes.github.com/world-of-heroes/development/

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值