美文网首页
面向对象+canvas(初级实战)

面向对象+canvas(初级实战)

作者: 关自由 | 来源:发表于2019-03-08 15:57 被阅读0次

脑图

一丶展示出静态效果

构造函数+canvas精灵图,将人物放入canvas画布中,并定义girl对象

<body>

<canvas id="canvas" width="500" height="400"></canvas>

<script>

//画布+精灵图

var canvas=document.getElementById("canvas");

    var ctx=canvas.getContext("2d");

var img=new Image();

img.src="girl.png";

//定义Girl构造函数及渲染

function Girl(){

}

Girl.prototype.render=function(){

ctx.drawImage(img,0,0,79,108,100,100,79,108)

}

//生成实例,渲染

var girl= new Girl(0,0);

img.onload=function(){

girl.render()

}

</script>

</body>

二、动态效果-转向

1.按照脑图创建出Girl的各种属性。

2.创建Gril方法changeDirection(),并将其与键盘上下左右想绑定,进行改变direction属性的值

<body>

<canvas id="canvas" width="500" height="400"></canvas>

<script>

//画布+精灵图

var canvas=document.getElementById("canvas");

    var ctx=canvas.getContext("2d");

var img=new Image();

img.src="nvhai.png";

//Girl构造函数

function Girl(){

this.step=0,

this.direction=0,

this.x=100,

this.y=100

}

//渲染

Girl.prototype.render=function(){

ctx.drawImage(img,79*this.step,108*this.direction,79,108,this.x,this.y,79,108)

}

//改变方向

Girl.prototype.changedirection=function(direction){

this.direction=direction;

}

//生成实例

var girl= new Girl();

    //定时器,20毫秒刷新一下画布

img.onload=function(){

setInterval(function(){

ctx.clearRect(0, 0, 500, 400)

girl.render()

girl.update()

},20)

}

//键盘事件

document.onkeydown=function(e){

console.log(e.keyCode)

if(e.keyCode==37){

girl.changedirection(1)

}else if(e.keyCode==38){

girl.changedirection(3)

}else if(e.keyCode==39){

girl.changedirection(2)

}else if(e.keyCode==40){

girl.changedirection(0)

}

}

</script>

</body>

三、移动效果

1.根据direction判断下x,y变化

2.移动时step变化

3.键盘抬起时停止动画

4.完结撒花

<body>

<canvas id="canvas" width="500" height="400"></canvas>

<script>

//画布+精灵图

var canvas=document.getElementById("canvas");

    var ctx=canvas.getContext("2d");

var img=new Image();

img.src="nvhai.png";

//Girl构造函数

//direction1-4 表示人物移动的方向

//x,y表示画布上移动的距离

//step1-4分别显示精灵图的不同位置

function Girl(){

this.step=0,

this.direction=0,

this.x=100,

this.y=100

this.run=false

}

//渲染

Girl.prototype.render=function(){

ctx.drawImage(img,79*this.step,108*this.direction,79,108,this.x,this.y,79,108)

}

//改变方向

Girl.prototype.changedirection=function(direction){

this.direction=direction;

}

//状态机

Girl.prototype.update=function(){

//direction1-4 表示人物移动的方向

//x,y表示画布上移动的距离

if(this.run){if(this.direction==0){

this.y+=14

}else if(this.direction==1){

this.x-=14

}else if(this.direction==2){

this.x+=14

}else if(this.direction==3){

this.y-=14

}

//step1-4分别显示精灵图的不同位置

    this.step++;

if(this.step>3){

this.step=0

  }

    }

}

Girl.prototype.go=function(){

this.run=true

}

Girl.prototype.stop=function(){

this.run=false

}

//生成实例

var girl= new Girl();

    //定时器,20毫秒刷新一下画布

img.onload=function(){

setInterval(function(){

ctx.clearRect(0, 0, 500, 400)

girl.render()

girl.update()

},20)

}

//键盘事件

//键盘按下go()changeDirection()

document.onkeydown=function(e){

if(e.keyCode==37){

girl.go()

girl.changedirection(1)

}else if(e.keyCode==38){

girl.go()

girl.changedirection(3)

}else if(e.keyCode==39){

girl.go()

girl.changedirection(2)

}else if(e.keyCode==40){

girl.go()

girl.changedirection(0)

}

}

document.onkeyup=function(){

girl.stop()

}

</script>

相关文章

  • 面向对象+canvas(初级实战)

    脑图 一丶展示出静态效果 构造函数+canvas精灵图,将人物放入canvas画布中,并定义girl对象 //画布...

  • 02Canvas

    【canvas】 《2.6.5 面向对象基础复习补充:》 创建对象的方式: * var o = { name: '...

  • canvas

    canvas动画思想 canvas 面向对象思想 绘制矩形、直线 填充矩形 矩形边框 擦除画布 绘制路径(逆时针绘...

  • 面向对象实战

    1.封装一个轮播组件 轮播组件效果 2.封装一个曝光加载组件 曝光组件效果 3.封装一个 Tab 组件 Tab栏切...

  • 面向对象实战

    1.tab封装http://js.jirengu.com/tusiloliji/1/edit2.轮播http://...

  • 面向对象实战

    题目1:封装一个轮播组件 效果demo 题目2:封装一个曝光加载组件 效果demo 题目3:封装一个 Tab 组件...

  • 面向对象实战

    封装一个轮播组件 代码效果预览 封装一个曝光加载组件 效果代码预览 封装一个 Tab 组件 效果代码

  • 面向对象实战

    1、tab组件封装2、轮播组件封装3、曝光组件封装

  • 面向对象实战

    题目1: 封装一个轮播组件轮播组件题目2: 封装一个曝光加载组件曝光加载组件题目3: 封装一个 Tab 组件Tab 组件

  • 面向对象实战

    1. 封装一个轮播组件 预览链接 2. 封装一个渐变轮播组件 预览链接 3. 封装一个曝光加载组件 预览链接 4....

网友评论

      本文标题:面向对象+canvas(初级实战)

      本文链接:https://www.haomeiwen.com/subject/ejerpqtx.html