热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

个人用Canvas开发HTML5小游戏

各位同学们,大家晚上好,受豪情大大委托,我来做一个简单的分享:个人用Canvas开发HTML5小游戏。第一次做这样的分享,心里还有点小激动呢,讲的不好的地方,请各位多多指正。先来个自我介

  各位同学们,大家晚上好, 受豪情大大委托,我来做一个简单的分享:个人用Canvas开发HTML5小游戏。第一次做这样的分享,心里还有点小激动呢,讲的不好的地方,请各位多多指正。

  先来个自我介绍吧,我是12年毕业的,但是毕业后一年才接触了前端,然后觉得对前端更感兴趣,就入坑啦。现在做前端已经3年啦,从小菜鸟成长为了大菜鸟。

  先来扯扯项目背景吧,机缘巧合下,有人找我做了一个私活,就是一个躲水果的小游戏。那个厂商的目的是为了品牌宣传吧,想借助于微信进行一个传播,然后游戏分数高的获得一定的奖励。

  当时我也没做过小游戏开发,然后想想应该会蛮有趣的,于是就接了。因为没做过,一开始怎么入手就把我难住了,于是就百度了一下,看了几个小游戏的做法,感觉简单做一下也不是非常难嘛,于是二话不说就上了。每次写代码前或者看别人的代码,会感觉这个功能实现应该蛮难的吧,然后可能会想一大堆,但是开始动手写了,会觉得写着写着就简单了,所以我觉得多写写,多理理很多难题都会迎刃而解。

  当时写代码的时候也没有考虑太多,前端用了canvas 画了,什么选型比较啊都没有做过。在正式开发中我们应该要考虑更多,为什么用这个东西,这个东西有什么缺点,能给我们带来什么。开发前考虑的东西多了,带来的坑自然会少的。之前开发公司的项目时,想选用一个mvvm框架时,比较react,vue 和angular ,这几个各有利弊,个人觉得vue用起来最简单,最顺手,同时也了解了react-router,redux,了解了阿里前后端分离的方案,用nodejs解决seo的问题,了解了react如何兼容ie8等。由于项目需要支持ie8,最后才定下来用react+redux 进行开发。所以开发项目前,大局上要定清楚尤其是自己没有接触过的,这样坑才会少。

  当时开发小游戏时,为了赶进度,也没有考虑性能上的问题,就直接画了,后来看了关于canvas的性能上的一篇文章 http://taobaofed.org/blog/2016/02/22/canvas-performance/,觉得当时写的好水啊,性能好渣啊。所以我觉得多看看别人写的,不断地向别人学习很重要,我们前端很多都是自学的,很多都没有经过系统性的学习,所以很多人会写,但不一定会理解。这里我推荐一个博文http://www.cnblogs.com/TomXu/tag/Javascript/,对基础性的提升会蛮大。

  还有一个觉得以前做的不对的是关于手机端适配的问题,当时用了

   这个来完成适配,当时这个兼容性并不好,后来看了淘宝的rem解决方案,觉得采用rem解决方案会更好,兼容性会更佳。

  我们这一行,你一旦停下脚步,将会有N多人把你超越,能力的成长是不断学习实践的积累。

  扯了太多废话啦,我们来讲讲这个项目具体怎么实现吧。后端我用了thinkphp,用户体系就用了微信公众号授权,可以拿到用户的openid作为用户唯一识别。

  游戏的套路,就是先载入游戏,然后触发游戏开始,游戏结束时记录游戏分数,并给出一个排名,诱导你转发盆友圈炫耀,或者再来一次。

  这里我们可以定义一个game_control 对象来控制这一系列流程,同时我们还需要一个人物对象,3个水果对象。

  我们可以定义一个基础原型对象ship作为类,可以记录位置,大小,x,y轴的移动速度,相应的图片,然后人物对象和水果对象就是它的几个实例啦。然后通过canvas的drawImage方法将它们画出在画布中。

  game_control 对象定义几个方法,init,start,draw,end,reset等方法。

  init方法主要是初始化游戏的,主要处理图片加载,图片加载完后,几个对象的初始化。然后调用bindmove方法给canvas注册手指触摸事件,如果手机触摸在人物对象这个位置,那么代表游戏开始,调用start方法。start方法主要是实现每一帧的循环方法。在循环方法中,通过手指的移动来计算 人物的x,y 轴的位置,通过时间 和 水果x,y 轴的速度(这里我们定了每5秒增加速度)计算出相应的位置(如果水果的位置与边界放生碰撞,则改变它移动的方向),然后再进行一一比较,看是否发生触碰,我们将模型当作矩形(复杂模型我也不造怎么算~~),当发生触碰时,则判定游戏结束,将坚持了的时间输出。至于持续性的与后台的数据交互可以通过websocket来实现(不过我没有试过~~,当时做项目的时候只是结束的时候去保存了一下,这种做法很容易被别人刷数据),游戏结束时提示 分享页面或者在玩一次即可。

  附上demo二维码(未优化版~~)

  

  同时附上git地址(简化版):https://github.com/zjb65532788/game

  最后再一次感谢豪情哥提供这样一个平台供大家学习戒交流,感谢小伙伴的耐心倾听,我也希望通过不断学习,让自己再提升几个台阶。感谢大家啦!


推荐阅读
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • uniapp开发H5解决跨域问题的两种代理方法
    本文介绍了uniapp开发H5解决跨域问题的两种代理方法,分别是在manifest.json文件和vue.config.js文件中设置代理。通过设置代理根域名和配置路径别名,可以实现H5页面的跨域访问。同时还介绍了如何开启内网穿透,让外网的人可以访问到本地调试的H5页面。 ... [详细]
  • 微信民众号商城/小顺序商城开源项目介绍及使用教程
    本文介绍了一个基于WeiPHP5.0开发的微信民众号商城/小顺序商城的开源项目,包括前端和后端的目录结构,以及所使用的技术栈。同时提供了项目的运行和打包方法,并分享了一些调试和开发经验。最后还附上了在线预览和GitHub商城源码的链接,以及加入前端交流QQ群的方式。 ... [详细]
  • 【前端工具】nodejs+npm+vue 安装(windows)
    预备先看看这几个是干嘛的,相互的关系是啥。nodejs是语言,类比到php。npm是个包管理,类比到composer。vue是个框架&# ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • 后端开发|php教程apache配置文件,thinkphp后端开发-php教程例如你的原路径是http:localhosttestindex.phpindexadd那么现在的地址是 ... [详细]
  • HowcanIaligntwoinline-blockssothatoneisleftandtheotherisrightonthesameline?Whyi ... [详细]
  • php怎么创建项目目录,ThinkPHP 5.1自动生成模块及目录、文件
    试用一下ThinkPHP5.1这最新版的TP框架,创建项目很简单,在web根目录使用composer搞定:composercreate-p ... [详细]
  • 安装vue.js需要安装什么
    web前端|Vue.jsvue.jsweb前端-Vue.js创意留言墙源码,ssh离线安装Ubuntu,爬虫抖店物流,phpitop,seo单向链接lzw《vue.js教学》ios ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文详细介绍了PHP中与URL处理相关的三个函数:http_build_query、parse_str和查询字符串的解析。通过示例和语法说明,讲解了这些函数的使用方法和作用,帮助读者更好地理解和应用。 ... [详细]
author-avatar
手机用户2702933940
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有