我觉得,html5很有前景,移动终端智能化、普及是一个大趋势,html5的应用有跨平台这一大的优势,传统的应用很依赖终端的系统,同样一个应用,html5也能实现,它就可以在所有的智能终端下使用,而且又有本地存储,离线使用等特性,这使得它成为未来的主流
用html5开发游戏是一件很激动人心的事,好的,开始我的html5游戏之路吧
先不看别人怎么写的,先去看一下html5给我们提供什么东西,然后说说我的想法吧
经过阅读html5 Canvas API,发现,提供的东西不多,无非是一些数学图形画法,有点、线、矩形等,然后还有一个外加载图像的功能,不过有一个激动人心的东西,就是它也提供像素级处理,这个强大,因为直接对像素处理可以进行复杂的图像变换,比强像ps里面的滤镜效果,除此之外,还有一些样式控制,状态控制。这个Canvas让我想到了和Ps的里的对比,只是让我们直观了解下Canvas
首先,Canvas里的beginPath等就是Ps里的路径,stroke就像是描边,fill就是油漆桶填充,Gradient就是渐变,bezierCurveTo就是钢笔绘贝塞尔曲线
做动画,首先想到的是,像html的div移动一样,不断改变div的css值就行了,后来发现,Canvas是绘图的,不是做动画的,它没有图层的概念,你将某个图片放到画布上,它就是整一个图片了,你不可能控制这个图片的移动了。后来想,那就不移动它,再重新画一张就行了
以Flash的模式来用Canvas做游戏动画
舞台、祯、元件这些概念用在Canvas上
想一想Flash的逐祯动画的制作过程
一个小丑的移动过程:每一祯都是一幅图像,每一幅图像中,小丑向前移动一步,Flash控制每隔很短的时间显示一祯,这样就形成了一个动画
对就Canvas里就可以这么做,一个舞台对象,舞台上有各种小丑(元件),一祯一祯的显示,这一祯显示完了就把舞台清空,然后重新绘制下一祯
Flash里边涉及两个问题:
一条主控时间线,控制舞台的显示,然后对于每个元件,可能还会一个自己的时间线,就是当元件是动画的时候
那么在Canvas里,就可以对应着这样的设计模式
构造一个舞台对像Stage,将各个元件放在舞台上,不要时间主线,Stage有一个擦空原来舞台,根据Stage的各元件状态重绘舞台的方法,每一个元件要做动画的时候就生成一个自己的时间线,比如小丑要移动的时候,可以在任何时候要求舞台Stage重绘舞台,这样,可能会在某个时刻,没有一个元件要求重绘舞台,那么Canvas的祯频就是0,这样的帧频是动态变化的
var Stage = {};
Stage.paint(){
//根据舞台上每个小丑当前时刻的状态,重绘舞台
}
function Sprite(){
this.go = function(){
setInterval(goAhead,100);
function goAhead(){
//一些状态改变代码.......
Stage.paint();//要求舞台重绘
}
}
}
function Sprite2(){
This.go = function(){
setInterval(goAhead,100);
function goAhead(){
//一些状态改变代码.......
Stage.paint();//要求舞台重绘
}
}
}
另外一种设计模式是,只有一个时间线,每隔固定时间显示一祯,就是每隔一定时间舞台Stage步进一祯,步进的时候舞台上所有元件同时步进一次,任何元件要产生动画的时候,加入到这个时间主线中,跟着Stage步进而步进,这样的帧频是固定的,即使在不产生动画的情况下,Stage也是在不停地重绘着var Stage = {};
Stage.players = {
//...将小丑添加至舞台
};
Stage.step(){
for(i in Stage.players){
Stage.players.step();//舞台上每个小丑步进
}
setTimeout(this.step,100);//舞台每隔一定时间步进
}
function Sprite(){
this.step = function(){
//......步进
}
}
写了一个简单的控制小丑移动的程序
]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title></title>
</head>
<body>
<canvas id='canvas' width="800" height="800"></canvas>
<script type='text/javascript' src='jquery.js'></script>
<script type='text/javascript'>
var kit = {};
var FPS = 30;
kit.imgArr = ["img/player.gif","img/bg.png"];
kit.load = function(){
this.img = [];
for(i in this.imgArr){
this.img[i] = new Image();
this.img[i].src = this.imgArr[i];
}
}
kit.load();
var ctx = document.getElementById("canvas").getContext("2d");
var controller = {};//控制对象
controller.stage = {};//舞台对象
controller.stage.players = {//舞台上的小丑们
scen:new Scen(),
player1:new Sprite()//一个小精灵
}
controller.stage.paint = function(){//绘制桢
ctx.fillStyle = "#fff";//清除前桢
ctx.fillRect(0,0,800,800);
for(every in this.players){
this.players[every].paint();//小丑们添加动作到舞台
}
}
controller.stage.endPaint = function(){
ctx.fillStyle = "#fff";//清除前桢
ctx.fillRect(0,0,800,800);
for(every in this.players){
this.players[every].endPaint();//小丑们添加动作到舞台
}
}
controller.walk = function(){//让精灵前进吧
var that = this;
clearInterval(kit.playerTime);
function go(){
that.stage.players.player1.walk();//精灵自己走一步吧
that.stage.paint();//绘制此桢
}
kit.playerTime = setInterval(go,1000/FPS);
}
controller.back = function(){//让精灵后退吧
var that = this;
clearInterval(kit.playerTime);
function back(){
that.stage.players.player1.back();//精灵自己走一步吧
that.stage.paint();//绘制此桢
}
kit.playerTime = setInterval(back,1000/FPS);
}
controller.jump = function(){
var that = this;
clearInterval(kit.playerTime);
var count = 0;
function jump(){
count++;
that.stage.players.player1.jump();
that.stage.paint();
if(count < 50){
setTimeout(jump,1000/FPS);
}
}
jump();
}
function Sprite(){//一个精灵类
this.stageCount = 0;//记录精灵向舞台添加的次数
this.nowDot = [30,202];//精灵现在的坐标
this.towards = 0;
this.frame = [];
this.frame[0] = [
[163,0,28,60,0,0,28,60]
];
this.frame[1] = [
[140,0,22,60,0,0,22,60],
[112,0,28,60,0,0,28,60],
[81,0,31,60,0,0,31,60]
];
this.frame[2] = [
[0,0,22,60,0,0,22,60],
[22,0,28,60,0,0,28,60],
[50,0,31,60,0,0,31,60]
];
this.frame[3] = [
];
var i = 0;
this.walk = function(){//精灵向前走
this.nowDot[0]++;
this.towards = 1;
this.stageCount++;
}
this.back = function(){//精灵向后走
this.nowDot[0]--;
this.towards = 2;
this.stageCount++;
}
this.jump = function(){
this.nowDot[1]--;
this.stageCount++;
}
this.paint = function(){//精灵添加动作到舞台
var i = this.stageCount/4 % this.frame[1].length;
i = parseInt(i);
var t = this.frame[this.towards];
ctx.drawImage(kit.img[0],t[i][0],t[i][1],t[i][2],t[i][3],this.nowDot[0],this.nowDot[1],t[i][6]*2,t[i][7]*2);
}
this.endPaint = function(){
i = 0;
var t = this.frame[0];
ctx.drawImage(kit.img[0],t[i][0],t[i][1],t[i][2],t[i][3],this.nowDot[0],this.nowDot[1],t[i][6]*2,t[i][7]*2);
}
}
function Scen(){
this.paint = function (){
ctx.drawImage(kit.img[1],0,0);
}
this.endPaint = this.paint;
}
var state = 0;
$(document).keydown(function(e){
if(state > 0) return;
if(e.keyCode == 37) {
controller.back();
state ++;
}
if(e.keyCode == 39){
controller.walk();
state++;
}
if(e.keyCode == 38){
controller.jump();
state++;
}
});
$(document).keyup(function(e){
state = 0;
clearInterval(kit.playerTime);
controller.stage.endPaint();
});
</script>
</body>
</html>
接着学习中……
分享到:
相关推荐
csp - j初试模拟卷.docx csp - j初试模拟卷.docx csp - j初试模拟卷.docx csp - j初试模拟卷.docx csp - j初试模拟卷.docx csp - j初试模拟卷.docx csp - j初试模拟卷.docx csp - j初试模拟卷.docx csp - j初试模拟...
【标题】"中科大-计算机-考研-初试-复试-资料详解.zip" 提供了中国科学技术大学(中科大)计算机专业考研的重要参考资料,涵盖了初试和复试的关键环节。这个压缩包显然是一份全面的学习资源,旨在帮助考生充分准备...
这份"南京大学-计算机-考研-初试-复试-机试-真题整理.zip"压缩包显然是一份宝贵的资源,包含了考生们在备考过程中可能需要的重要资料。以下是基于标题、描述和标签所涉及的知识点的详细解释: 一、考研 考研,全称...
标题"华中科技大学-计算机-考研初试-复试-资料.zip"表明这是一份针对华中科技大学计算机专业考研的综合资料包,涵盖了初试和复试两个阶段的学习材料。从".zip"文件格式来看,这是一个压缩文件,意味着其中包含多个...
标题"哈工大-计算机-854考研-初试-复试-机试知识以及经验总结.zip"表明这是一个针对哈尔滨工业大学计算机专业854科目考研的资源包,包含了初试、复试及机试的相关知识和经验分享。哈工大是知名的工科院校,其计算机...
部编人教版五年级语文上册-交流平台 初试身手-教案教学设计.docx部编人教版五年级语文上册-交流平台 初试身手-教案教学设计.docx部编人教版五年级语文上册-交流平台 初试身手-教案教学设计.docx部编人教版五年级语文...
上海交大软件工程专硕的考研-初试-复试真题知识总结.zip
这份“杭州电子科技大学-计算机-考研-初试-复试-复习知识点总结.zip”压缩包文件,包含了历年的考研复习重点,旨在帮助考生们精准把握考试脉络,提升备考效率。 一、核心课程与基础理论 1. 数据结构:作为计算机...
以下是对初试和复试关键知识点的详细梳理。 一、初试知识点 1. 数据结构与算法:这是考研基础中的核心部分,包括线性表、栈、队列、树、图、排序算法(如冒泡、选择、插入、快速、归并、堆排序等)、查找算法(二...
这份"南京理工大学-考研-初试-复试上机试题.zip"压缩包包含了历年的真实考试题库,对于备考的学子来说,是一份宝贵的参考资料。 1. 数据结构:数据结构是计算机科学的基础,包括数组、链表、栈、队列、树、图等。...
部编人教版六年级语文上册-交流平台与初试身手-教案教学设计.docx部编人教版六年级语文上册-交流平台与初试身手-教案教学设计.docx部编人教版六年级语文上册-交流平台与初试身手-教案教学设计.docx部编人教版六年级...
本资料整理了初试和复试的核心知识点,旨在帮助考生系统地理解和掌握相关知识。 1. 计算机组成与设计: - 计算机系统的层次结构:了解从硬件到软件的层次模型,理解每层的作用。 - 数据表示:学习二进制、八进制...
这些资料主要涵盖了北京大学计算机科学与技术专业考研的相关内容,包括初试、复试和机试的知识点及经验总结。以下是对各个文件内容的详细解析: 1. **操作系统期末试卷(含答案).doc**:这份文档提供了操作系统课程...
5. 印刷与设计:对于IT从业者来说,虽然不是核心技能,但理解基本的印刷术语和设计概念可以帮助更好地与设计团队沟通,确保文件在打印时能达到预期效果。 这些知识点对于任何在IT领域工作或学习的人来说都是实用且...
这个初学者的学习主题“HTML5的初试学习”涵盖了许多核心概念和技术,包括新的元素、多媒体支持、离线存储以及增强的表单和图形处理能力。 首先,HTML5引入了一些新的结构元素,如、、、和等,它们帮助开发者更好地...
重庆大学计算机专业的考研资源集合,包括初试与复试的相关材料,是考生们宝贵的参考资料。这份压缩包涵盖了多种关键的学习资源,旨在帮助考生更好地准备考试,提高成功通过的可能性。 首先,"复试真题和答案(11·19...
河海大学电路初试822-843初试真题答案详解(各有6-7套),真题很重要,答案不好找
河海大学电路初试822-843初试真题答案详解(题目比较新)
广电艺术备考-初试参考书目阅读方法与技巧.pdf