前端|画个火柴人

简介: 前端|画个火柴人

问题描述

我们经常会玩一些小游戏会看一些动漫,而在游戏和动漫里面最常出现的形象就是火柴人。火柴人形象处理简单但却可以通过改变四肢做出百变的动作,接下来就和笔者一起来看看如何绘制一个简单的火柴人吧。


问题分析

火柴人,通过分析示例图可以发现,火柴人可以分成两部分组成:头部、身体。头部由圆形组合形成脑袋、眼睛和嘴巴;身体主要是直线组合形成四肢。所以接下来绘制一个大圆当脑袋,两个小圆眼睛,一个弧形当嘴巴和几条直线当身体。

1 火柴人示例图

需要用代码来实现火柴人的绘制,在这里可以用html5 canvas标签来绘制火柴人,但canvas标签本身没有绘制图形的能力,它只能作为图形的容器,简单的来说就是日常画画用的画布,还需要画画的画笔,即脚本来完成绘图,在这里选择canvas标签+JavaScript脚本来完成整体的绘制。


解决方案及效果

1)定义画布canvas。

<!DOCTYPE html>

<html>

         <head>

                   <meta  charset="UTF-8">

                   <title>火柴人</title>

         </head>

         <body>

                   <canvas  id="myCanvas" width="500" height="300"  style="border: 1px solid black;">                           

                   </canvas>

         </body>

</html>

2 定义画布效果图

定义画布的示例代码中,用id表示画布的对象名称,用widthheight直接设置画布的大小,为了方便展示画布,给画布添加了border: 1px,使得可以看见画布的边界。


2)绘制头部大圆形

<script  type="text/javascript">

                   var  c = document.getElementById("myCanvas");

                   var  cxt = c.getContext("2d");

                   cxt.beginPath();

                   cxt.arc(100,50,40,0,Math.PI*2,true);

                   cxt.closePath();

             cxt.fillStyle="blank";

             cxt.fill();

</script>

3 大圆效果图

通过运用JavaScript绘制一个圆形。在arc函数中,前两个参数表示圆的x,y轴坐标,第三个参数表示圆的半径(单位为像素),第四和第五两个参数为弧度的开始和结束,最后一个参数表示绘制的弧形的方向(顺时针方向/逆时针方向)。所以在这里绘制了一个坐标为(10050),半径为40像素的圆形。


3)绘制表情

/*眼睛*/

         cxt.beginPath();

         cxt.fillStyle="white";

         cxt.arc(90,45,3,0,Math.PI*2,true);

         cxt.fill();

         cxt.moveTo(113,45);

         cxt.arc(110,45,3,0,Math.PI*2,true);

         cxt.fill();

         cxt.stroke();

 /*嘴巴*/

         cxt.beginPath();

         cxt.strokeStyle = 'white';

         cxt.lineWidth = 3;

         cxt.arc(100,50,20,0,Math.PI,false);

         cxt.stroke();

4 脸部表情效果图

绘制眼睛时,要使用beginPath()的方法重新开始绘制形状。然后再填充弧线,用arc函数绘制左眼,最后再使用moveTo()绘制右眼。

绘制嘴巴时,同样要先用beginPath()的方法重新开始绘制形状,用stroke()设置边框,lineWidth()设置线条宽度,然后绘制一个弧形形成嘴巴。


4)绘制四肢

/*四肢*/

         cxt.beginPath();

         cxt.moveTo(100,80);

         cxt.lineTo(100,150);

         cxt.moveTo(100,100);

         cxt.lineTo(60,120);

         cxt.moveTo(100,100);

         cxt.lineTo(140,120);

         cxt.moveTo(100,150);

         cxt.lineTo(80,190);

         cxt.moveTo(100,150);

         cxt.lineTo(140,190);

         cxt.lineWidth="10";

             cxt.strokeStyle="black";

         cxt.stroke();

5 四肢(整体)效果图

四肢相对就很简单,只需要设置直线的moveTo()开始坐标和lineTo()结尾坐标,绘制不同的直线,使这些直线最后连在一起形成四肢即可。


结语

canvasJavaScript结合真是个神奇的东西,可以根据自己的想象通过代码的形式绘制出一幅画来。当然想要运用画布的话,就必须要熟练的掌握相关的属性方法和脚本函数,才能画出理想中的图案来。



目录
相关文章
|
数据可视化 决策智能 Python
三种常用的风险价值(VaR)计算方法总结
风险价值(VaR)是金融领域广泛使用的风险度量,它量化了在特定时间范围内和给定置信度水平下投资或投资组合的潜在损失。它提供了一个单一的数字,代表投资者在正常市场条件下可能经历的最大损失。VaR是风险管理、投资组合优化和法规遵从的重要工具。
1907 0
|
运维 资源调度 Kubernetes
Kubernetes Scheduler Framework 扩展: 1. Coscheduling
# 前言 ## 为什么Kubernetes需要Coscheduling功能? Kubernetes目前已经广泛的应用于在线服务编排,为了提升集群的的利用率和运行效率,我们希望将Kubernetes作为一个统一的管理平台来管理在线服务和离线作业。但是默认的调度器是以Pod为调度单元进行依次调度,不会考虑Pod之间的相互关系。但是很多数据计算类的作业具有All-or-Nothing特点,要求所有的
3436 0
|
安全 编译器 C语言
【C语言】typeof 关键字详解
`typeof` 关键字在GCC中用于获取表达式的类型,便于动态类型定义和宏编程。它可以用于简化代码、提高代码的灵活性和可维护性。虽然 `typeof` 是 GCC 扩展,并非标准C的一部分,但它在实际编程中非常有用。
629 1
|
监控 API 索引
Elasticsearch集群健康检查
【11月更文挑战第4天】
424 3
|
搜索推荐 机器人 云计算
纳米机器人:医疗领域的微型革命与精准治疗
【9月更文挑战第16天】随着科技的飞速发展,纳米技术成为推动多个领域变革的重要力量。在医疗领域,纳米机器人以其独特优势引领着微型革命与精准治疗新时代。本文探讨其在药物输送、癌症治疗、手术辅助及疾病诊断中的应用,并分析其小型化、精准化、智能化与综合化的优势。尽管面临制造技术、体内控制等挑战,但随着科技的进步,纳米机器人有望成为人类健康的重要保障。
1014 10
|
JavaScript
Vue3基础(十wu)___ref获取原生dom元素
本文介绍了Vue3中使用`ref`来获取和操作原生DOM元素的方法,通过示例展示了如何通过`.value`改变元素的样式。
315 1
Vue3基础(十wu)___ref获取原生dom元素
|
SQL 关系型数据库 数据库
EF Core连接PostgreSQL数据库
EF Core连接PostgreSQL数据库
299 0
|
定位技术
高分GF与环境HJ系列国产卫星遥感影像数据图像免费批量下载方法
高分GF与环境HJ系列国产卫星遥感影像数据图像免费批量下载方法
524 1
|
JavaScript 前端开发
Three.js 的骨骼动画 SkinnedMesh
【2月更文挑战第16天】
469 2
|
缓存 图形学
【制作100个unity游戏之26】unity2d横版卷轴动作类游戏8(附带项目源码)
【制作100个unity游戏之26】unity2d横版卷轴动作类游戏8(附带项目源码)
313 0

热门文章

最新文章