3. Canvas 常见用法
3.1 canvas中的色彩
对于canvas中色彩的表示,主要沿用CSS的四种方式:
- #RRGGBB 十六进制表示法
- #RGB 上述十六进制中特殊色彩的简写表达,两种表示法的对应关系为复制R,G,B位上的数值,如#0bf是#00bbff的简写表达方式
- rgb(R,G,B) 函数式的表达方式,各色彩取值为0~255
- rgba(R,G,B,A) 在上述基础上添加了对透明度的支持
虽然最终色彩是以字符串的方式表示,但实际操作时还是会用数字来描述色彩。由于每一种色彩均使用8个bit来表示,所以以上色彩表示方式称为24 bit表示法。
16进制色彩的生成
在JavaScript中,16进制表法为0x与对应的16进制数值。如0xf为十进制中的15。如果我们使用控制台来打印一个16进制的数,将会默认得到其十进制表示。如
console.log(0xFF55F3);
将会输出16733683。同时JavaScript的Number对象提供的toString方法,在指定参数(进制数)后,可以实现进制的转换。如:
var color=(16733683).toString(16);
将会得到color的值为ff55f3。于是,我们得到了色彩字符串与对应十进制数字的相互转换方式:
var color=’#ff00ff’;
var colorNumber=window.parseInt(color.slice(1),16);
var colorNumber=16711935;
var color=’#’+colorNumber.toString(16);
很多时候,我们需要独立操作24bit色彩中的R,G,B三色值,此时就需要将色彩进行处理。可以使用“移位”符号和按位“与”符号,有如下的变换公式:
var red=color >> 16 && 0xff;
var green=color >> 8 && 0xff;
var blue=color && 0xff;
对应地,如果我们已知R,G,B三色值,可以使用如下变换公式来组合为24bit色彩值
var color=red<<16 | green <<8 | blue;
通过上面的知识,我们很容易就得到几个对色彩进行处理的工具函数:
utils.getRandomColor=function(){
var colorNumber=Math.random()*0xffffff|0;
var color='#'+('00000'+colorNumber.toString(16)).substr(-6);
return color;
}
【注】使用位运算符|可以实现去除数字小数部分的功能:1.1|0=1 11.1|0=11 -12.6|0=-12
3.2 canvas上下文及clearRect
Canvas标签的大多数API的调用,都依赖于其上下文对象。很容易就能获取上下文对象,如:
var canvas=document.getElementById(“canvas”);
var context=canvas.getContext(canvas);
前面介绍到,canvas 实现的游戏主要是逐帧动画。大多数游戏场景中,在每一帧开始前,都需要清除之前帧的所有信息,此时就会用到clearRect方法。如:
context.clearRect(0,0,canvas.width,canvas.height);
此时,我们是将整个画布给清空。当然,效率更高的方案是只清除需要清除的区块,这就需要具体与游戏的逻辑结合起来。
3.3 使用直线绘制图形
使用canvas中的直线(调用方法lineTo)可以实现很多基础图形的绘制。 按照API的说明,在每次绘制一个新的路径的时候,使用beginPath方法,在绘制完路径后,使用closePath方法即可完成起点到终点由一条直线连接。如果需要填充色,使用fill方法,如需要边缘勾勒,使用stroke方法。
如下是一个简单的模拟画图板的小应用:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Canvas</title>
<style type="text/css">
body {
margin: 0px;
padding: 0px;
}
#canvas {
margin: 0px;
padding: 0px;
border: 1px solid #000000;
}
</style>
</head>
<body>
<canvas id="canvas" width="400" height="400">当前浏览器不支持canvas</canvas>
<script type="text/javascript" src="utils.js"></script>
<script type="text/javascript" src="arrow.js"></script>
<script type="text/javascript">
window.onload=function(){
var canvas=document.getElementById("canvas");
var context=canvas.getContext("2d");
var mouse=utils.captureMousePosition(canvas);
//添加mousedown监听事件,在用户鼠标按下后开始画线,并注册mousemove事件
canvas.addEventListener("mousedown",function(event){
context.beginPath();
context.moveTo(mouse.x, mouse.y);
canvas.addEventListener("mousemove",onMouseMove,false);
},false);
//在鼠标移动时划线
function onMouseMove(event){
context.lineTo(mouse.x,mouse.y);
context.stroke();
}
//在鼠标按键松开后,注销鼠标移动事件
canvas.addEventListener("mouseup",function(event){
canvas.removeEventListener("mousemove",onMouseMove,false);
},false);
};
</script>
</body>
</html>
分享到:
相关推荐
9. **最佳实践**:分享HTML5 Canvas开发的最佳实践,包括代码组织、调试技巧以及如何确保兼容性。 10. **社区与资源**:可能还会介绍一些HTML5和Canvas的在线社区、工具、库和框架,帮助读者持续学习和提高。 总的...
在这个"HTML5 Canvas核心技术图形、动画与游戏开发"的PDF扫描版中,读者可以深入学习到Canvas的核心概念和实践技巧。 首先,Canvas的基本使用方法是通过JavaScript API来实现的。这个API提供了大量的绘图命令,如`...
HTML5的Canvas是一个强大的绘图API,它允许开发者在网页上进行动态的、基于...随着对Canvas的深入理解和实践,你会发现它的潜力无穷无尽。在实际项目中,可以结合CSS3、WebGL等技术,构建更复杂的交互式Web应用。
在微信小程序中,Canvas是一个非常重要的组件,它允许开发者在...以上就是关于"小程序canvasDemo"项目中涉及的主要技术点,通过学习和实践,你可以掌握微信小程序中canvas的使用技巧,进一步提升你的小程序开发能力。
HTML5 Canvas是Web开发中的一个强大工具,它允许开发者在网页上进行动态图形绘制,创造出丰富的交互式用户体验。在这个“html5_canvas_...这样的实现不仅方便分享,也为开发者提供了一个学习和实践Canvas API的好平台。
《canvas+js绘制图形的实践探索》 在Web开发领域,HTML5的canvas元素提供了一种强大的机制,允许开发者在浏览器上进行动态图形绘制。这篇博文将深入探讨如何结合JavaScript,利用canvas API来构建一个简单的绘图小...
这个功能在很多场景下都非常有用,比如网页分享、游戏截图、在线编辑器保存草图等。 首先,我们要了解canvas的基本用法。canvas是一个矩形画布,通过JavaScript来控制它的内容。我们可以通过`<canvas>`标签在HTML中...
HTML5 Canvas是Web开发中的一个关键技术,...通过学习和实践这些HTML5 Canvas的核心技术,开发者可以构建出交互性强、视觉效果丰富的Web应用程序,无论是数据可视化、游戏开发还是艺术创作,Canvas都能提供强大的支持。
9. **保存和导出**:Canvas上的内容可以导出为图像,或者使用toDataURL方法生成数据URL,方便分享和存储。 10. **实际应用**:书中实例可能涵盖游戏开发、图表绘制、数据可视化、地图应用等多个实际场景,帮助...
这篇博客"canvas画图测试"可能涉及了使用Canvas进行图形绘制的基础知识和实践技巧。Canvas API的使用通常包括以下几个核心知识点: 1. **Canvas元素**:在HTML中,`<canvas>`标签定义了一个可编程的画布,通过...
2. 用户界面(UI):Android游戏通常使用自定义View或SurfaceView来实现游戏画面,结合Canvas进行绘制。UI的设计也包括菜单、暂停、设置等交互元素。 3. 图形渲染:游戏可能使用OpenGL ES进行高性能的2D或3D图形...
通过学习和理解这个Third Person Controller - Shooter模板,开发者不仅能快速搭建起第三人称射击游戏的框架,还能深入掌握Unity的游戏开发流程和最佳实践。对于初学者,这是一个极好的学习资源,而对于经验丰富的...
1. Canvas绘图:H5游戏常用Canvas API进行动态绘图,实现游戏场景的渲染。通过JavaScript操作Canvas的绘图方法,可以绘制角色、障碍物并实现动画效果。 2. Event Handling:JavaScript的事件监听和处理机制在游戏中...
在“HTML5 Canvas学习笔记(6)拼图游戏(数字版)”这篇博文中,作者分享了如何利用Canvas构建一个数字拼图游戏。下面我们将详细探讨这个知识点。 1. **HTML5 Canvas基础**: - Canvas是一个基于矢量图形的画布元素...
H5游戏源码的分享,对于学习者来说是一次宝贵的实践机会,可以了解游戏逻辑、动画效果、用户交互等核心元素的实现方法。 【标签】"游戏":游戏是软件的一种类型,它可以提供娱乐、挑战或教育功能。H5游戏作为游戏的...
这个技术的引入极大地扩展了网页的交互性和动态性,尤其在创建复杂的动画效果和游戏场景时表现得尤为出色。在这个特定的场景中,我们讨论的是如何使用HTML5 Canvas实现视频网站的文字弹幕动画特效。 首先,我们要...
在“H5自写的小游戏源码分享”这...同时,这也是一个很好的学习实践机会,可以提升你的JavaScript编程水平,理解游戏开发中的逻辑思维和问题解决能力。不断练习和学习,你将能够创造出更多有趣、引人入胜的HTML5游戏。
在这个项目中,“games:使用canvas api开发一堆HTML游戏以使其更好,并且仅使用HTML/CSS/JS堆栈构建游戏”,我们将探讨如何利用这个API来构建各种类型的游戏,只使用HTML、CSS和JavaScript这三个基础的前端技术。...
《Unity游戏源码分享-仿开心消消乐Match3Jewel》 Unity是一款强大的跨平台游戏开发引擎,被广泛应用于各种类型的游戏制作,包括2D、3D、桌面游戏以及移动平台游戏。本资源是基于Unity开发的一款仿开心消消乐风格的...
8. **性能优化**:分享关于Canvas性能的技巧,如批处理绘图操作、使用图像数据缓冲区和避免不必要的重绘。 9. **高级应用**:深入探讨更复杂的用例,如粒子系统、游戏开发、图表绘制和数据可视化。 10. **实践案例...