用户提问

为了用DOM做2D游戏,你基本上要动态地调整元素风格,以便在页面上移动它。虽然有些时候DOM修改是很好的,但这一次我将重点介绍使用HTML5 Canvas来制作图像,因为对于现代浏览器,它是最灵活的。 页面设置 首先,你要创建一个HTML页面,其中包含...

推荐答案

为了用DOM做2D游戏,你基本上要动态地调整元素风格,以便在页面上移动它。虽然有些时候DOM修改是很好的,但这一次我将重点介绍使用HTML5 Canvas来制作图像,因为对于现代浏览器,它是最灵活的。

页面设置

首先,你要创建一个HTML页面,其中包含如下canvas标签:

如果你载入以上代码,当然什么也不会出现。那是因为虽然我们有一个canvas标签,但我们还没在上面绘制任何东西。我们来添加一些简单的canvas命令来绘制小箱子吧。

var canvas = null;

function onload() {

canvas = document.getElementById(‘gameCanvas’);

var ctx = canvas.getContext(“2d”);

ctx.fillStyle = ‘#000000′;

ctx.fillRect(0, 0, canvas.width, canvas.height);

ctx.fillStyle = ‘#333333′;

ctx.fillRect(canvas.width / 3, canvas.height / 3, canvas.width / 3,

canvas.height / 3);

}

在这个例子中,我已经在body标签中添加了一个onload事件,然后执行功能获得画布元素,并绘制几个箱子。非常简单。

这个箱子不错,但你会注意到,画布没有铺满整个浏览器窗口。为了解决这个问题,我们可以增加画布的宽度和高度。我是指根据画布所包含的文件元素的大小来灵活地调整画布尺寸。

var canvas = null;

function onload() {

canvas = document.getElementById(‘gameCanvas’);

canvas.width = canvas.parentNode.clientWidth;

canvas.height = canvas.parentNode.clientHeight;

加载后,你会看到画布铺满整个屏幕了。太好了。

再进一步,如果浏览器窗口大小是由用户调整的,我们还要重置画布的尺寸。

var canvas = null;

function onload() {

canvas = document.getElementById(‘gameCanvas’);

resize();

}

function resize() {

canvas.width = canvas.parentNode.clientWidth;

canvas.height = canvas.parentNode.clientHeight;

var ctx = canvas.getContext(“2d”);

ctx.fillStyle = ‘#000000′;

ctx.fillRect(0, 0, canvas.width, canvas.height);

ctx.fillStyle = ‘#333333′;

ctx.fillRect(canvas.width/3, canvas.height/3, canvas.width/3, canvas.height/3);

}

添加onresize命令到body标签。

现在,如果你调整浏览器的大小,矩形应该如下图所示。

载入图像

大部分游戏都需要动画的子画面,所以我来添加一些图像吧。

首先,你需要图像资源。因为我们要用javascript绘制它,所以我觉得先声明图像然后设置它的src属性为你想载入的图像的URL,比较合理。

var img = null;

function onload() {

img = new Image();

img.src = ‘simba.png’;

}

然后你可以通过添加这个到resize方法中来绘制图像:

ctx.drawImage(img, canvas.width/2 – (img.width/2), canvas.height/2 – (img.height/2));

如果你重新载入页面后,在大部分情况下,你会看到图像出现了。不过我说的是大部分情况下,因为这取决于你的机器跑得有多快、浏览器是否已经缓存了图像。那是因为resize方法的调用时间介于你开始载入图像(设置它的src属性)的时间到浏览器准备好的时间之间。对于一两张图像,这个方法可能不错,但当你的游戏开始变大时,你就必须等到所有图像加载完才能执行活动。

给图像添加一个通知监听器,这样当图像准备就绪时你就会收到回叫信号。我得重新整理一下,以下是更新过的代码:

var canvas = null;

var img = null; var ctx = null;

var imageReady = false;

function onload() {

canvas = document.getElementById(‘gameCanvas’);

ctx = canvas.getContext(“2d”);

img = new Image();

img.src = ‘images/simba.png’;

img.onload = loaded();

resize();

}

function loaded() {

imageReady = true; redraw();

}

function resize() {

canvas.width = canvas.parentNode.clientWidth;

canvas.height = canvas.parentNode.clientHeight; redraw();

}

function redraw() {

ctx.fillStyle = ‘#000000′;

ctx.fillRect(0, 0, canvas.width, canvas.height);

if (imageReady)

ctx.drawImage(img, canvas.width/2 – (img.width/2), canvas.height/2 – (img.height/2));

}

结果应该是:

这个图像显示了一只吸血鬼猫(好吧,是我自己觉得像)的6个奔跑帧。为了把这个子画面做成动画,我们必须每次绘制一个帧。

辅助答案

用户:超级猪猪侠

2016年11月01日

去w3cschoocl 看看

如何用html5 canvas制作子画面动画,如何用HTML5 Canvas制作子画面动画相关推荐

  1. html制作图片动画效果代码,HTML5 Canvas:制作动画特效

    编辑推荐: 本文来自于jquery之家 ,html5制作canvas动画的基本步骤,控制canvas动画和实例代码. 要在 HTML5 canvas 中绘制图像动画效果,你需要绘制出每一帧的图像,然后 ...

  2. 如何用python制作动画_如何基于Python Matplotlib实现网格动画

    -1- 如果你对本文的代码感兴趣,可以去 Github (文末提供)里查看.第一次运行的时候会报一个错误(还没找到解决办法),不过只要再运行一次就正常了. 这篇文章虽然不是篇典型的数据科学类文章,不过 ...

  3. 用html制作个人站点,【制作个人网站】如何在网上制作自己的网页?如何用html5制作个人主页?制作个人网页设计思路是怎样的?...

    [制作个人网站]如何在网上制作自己的网页?如何用html5制作个人主页?制作个人网页设计思路是怎样的?下面就和小编一起来看看吧! 如何在网上制作自己的网页? 网站设计的八个步骤现在看到的工具越来越多, ...

  4. canvas 擦除动画_用HTML5 Canvas 做擦除及扩散效果

    2013年的时候曾经使用canvas实现了一个擦除效果的需求,即模拟用户在模糊的玻璃上擦除水雾看到清晰景色的交互效果.好在2012年的时候学习HTML5的时候研究过canvas了,所以在比较短的时间内 ...

  5. html5 粒子动画效果制作,8款惊艳的HTML5粒子动画特效

    原标题:8款惊艳的HTML5粒子动画特效 HTML5确实非常强大,很多时候我们可以利用HTML5中的新技术实现非常炫酷的粒子动画效果,粒子动画在HTML5应用中也是比较消耗本地资源的,尤其是CPU,但 ...

  6. HTML5期末大作业:榆林子州网站设计——榆林子州-含论文(6页) 榆林子州旅游网页HTML代码 学生网页设计与制作期末作业下载 大学生网页设计与制作成品下载 DW旅行网页作业

    HTML5期末大作业:榆林子州网站设计--榆林子州-含论文(6页) 榆林子州旅游网页HTML代码 学生网页设计与制作期末作业下载 大学生网页设计与制作成品下载 DW旅行网页作业 常见网页设计作业题材有 ...

  7. CG动画制作项目第四篇:镜头的运用以及画面的布局

    这一段时间主要开始的是我们动画二维部分的制作: 1.首先在已经画好的分镜稿上看清楚我们的画面的主要内容,以及要表现的方式 2.制作动画的demo来更直观的看出我们的制作的效果 3.开始手绘,完成我们最 ...

  8. html5常用动画效果教程,HTML5教程 8个经典HTML5 Canvas动画学习

    本篇教程探讨了HTML5教程 8个经典HTML5 Canvas动画学习,希望阅读本篇文章以后大家有所收获,帮助大家HTML5+CSS3从入门到精通 . < HTML5非常强大,尤其是Canvas ...

  9. html5怎么制作音乐相册,怎么制作音乐相册-怎么制作音乐相册并加字幕 就是很多照片制作动画加背景音乐加文字...

    怎么制作音乐相册-怎么制作音乐相册并加字幕 就是很多照片制作动画加背景音乐加文字 音乐相册制作是我们与各位小伙伴老生常谈的话题,先不说咱自家的狸窝PPT转换器可以做出各种风格的音乐相册,现如今很多视频 ...

  10. HTML5期末大作业:绿色环境保护网站设计(10页) 带flash动画带背景音HTML+CSS+JavaScript

    HTML5期末大作业:绿色环境保护网站设计(10页) 带flash动画带背景音HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 大学生毕设网页设计源码HT ...

最新文章

  1. 【统计图】Echarts实现多条折线图渐变堆叠效果
  2. 初识C语言---(1)
  3. 未处理的异常: 0xC0000235: 由句柄所调用的 NtClose 已使用 NtSetInformationObject 以防止关闭。...
  4. yum的方式安装mysql_Linux安装mysql之yum安装方式
  5. 百度大脑险胜最强大脑背后:200万人2亿照片做训练
  6. C语言不使用结构体实现链表,不用指针链表和结构体数组怎么编学生成绩管理系统啊...
  7. 6.0 《数据库系统概论》之关系数据库的规范化理论(数据依赖对表的影响[插入-删除-修改-冗余]、1NF-2NF-3NF-BCNF-4NF、函数依赖与多值依赖)
  8. docker 容器保存为镜像_Docker容器和镜像操作
  9. P8-DevOps中的CI/CD环境搭建与调优
  10. python函数进阶小结_python之函数进阶
  11. LQR轨迹跟踪算法Python/Matlab算法实现_LQRmatrix推导(2)
  12. 2012总结--第10篇--工作篇
  13. BZOJ 4094 USACO 2013 Dec. Optimal Milking
  14. 当AS3遇见Swift
  15. docker添加新的环境变量_DockerFile 设置环境变量
  16. python打开rar_使用Python解压zip、rar文件
  17. CentOS导入CA证书
  18. 解决Linux服务器时差问题
  19. ToDoList本地存储原生js版/jQuery版
  20. mermaid flowchart使用指南

热门文章

  1. with as 用法_这九类介词用法辨析,2021高考英语必考(附固定搭配)
  2. javaWeb项目内存溢出解决方案
  3. PS技术在学校里学三年也学不到这么多
  4. blender海浪动画渲染
  5. jQuery MiniUI 开发教程 表单控件 数据绑定(一)
  6. [zz CSDN]上班族饮食十大“夺命”恶习
  7. 【一种类似labelme自动勾画方式---opencv】
  8. 3dmax动画导入到Unity1
  9. vue导出Excel表格全局函数(简洁明了)
  10. Android -- 基础篇 -- Activity跳转动画的五种方式(下)