HTML5吃豆豆游戏开发实战(一)使用Canvas绘制游戏主角

最近在学习HTML5,爱因斯坦曾说过,“最好的学习就是自己去经历”。于是,我想在学习HTML5的同时,做一款简单的小游戏,这样学习起来也会很有趣的,我想做的是以前小时候玩儿的小霸王上面的很经典的一款游戏,叫“吃豆豆”,后面有怪物跟着跑,蛮好玩的,还很虐心,相信大家都玩儿过。

吃豆豆就是这款啦:

我就用前面学的一些HTML5的简单的一些知识来简单模拟这款游戏吧。我做这款游戏不打算用图片,全部用canvas来画,这样才有意思,嘿嘿。

正如大家所看到的,我们游戏的主角就是图中的黄色的嘴巴,虽然只有一张嘴巴,还是比较酷的,简单就是美,嘿嘿。

首先第一步,我们要使用Canvas把它画出来,

分析一下,画出来还是挺简单的:

设张开的嘴巴角度为90°,如图,然后做直角坐标系,平分夹角,两边都是45°,然后用cos或者sin就可以求出A,B坐标,嘿嘿。

首先画3/4圆,在连两条线,即可。

下面是代码:

//往右/左的样子
    function drawBall_RightOrLeft(ball,isRight)
    {

        //document.write(state);
        //画眼睛,眼睛是公共的
        //画眼睛-外圈
        var eyeX;
        if(isRight == true)     //右
            eyeX = ball.x - 5;
        else eyeX = ball.x + 5;//左
        var eyeY = ball.y-8;
        var eyeR = 6;//目前限定死这个
        cxt.beginPath();
        cxt.fillStyle="#000000";
        cxt.arc(eyeX,eyeY,eyeR,0,Math.PI * 2,false);
        cxt.fill();
        cxt.closePath();
        //画眼睛-眼球
        var qiuR = eyeR / 2;
        cxt.beginPath();
        cxt.fillStyle="#FF0000";
        cxt.arc(eyeX,eyeY,qiuR,0,Math.PI * 2,false);
        cxt.fill();
        cxt.closePath();
        switch(state)
        {
            //张嘴
            case 1:
                //画红球
                cxt.beginPath();
                cxt.fillStyle="#FF0000";
                //嘴巴大小为90°
                //画圆弧--脸
                if(isRight)
                cxt.arc(ball.x,ball.y,radius,1/4 * Math.PI,3/2 * Math.PI + 1/4 * Math.PI,false);
                    else
                    cxt.arc(ball.x,ball.y,radius,3/4 * Math.PI, Math.PI + 1/4 * Math.PI,true);
                cxt.stroke();
                cxt.closePath();
                cxt.beginPath();
                //画嘴巴
                var ax = 0,ay = 0;
                var bx = 0,by = 0;
                var temp = radius * Math.sqrt(2)/2;
                if(isRight)
                ax = ball.x + temp;
                    else
                        ax = ball.x - temp;
                ay = ball.y - temp;
                bx = ax;
                by = ball.y + temp;
                cxt.moveTo(ball.x,ball.y);
                cxt.lineTo(ax,ay);
                cxt.moveTo(ball.x,ball.y);
                cxt.lineTo(bx,by);
                cxt.closePath();
                cxt.stroke();
                state = 0;
                break;
            //闭嘴
            case 0:
                //画圆弧--脸
                cxt.beginPath();
                cxt.arc(ball.x,ball.y,radius,0,Math.PI * 2,false);
                cxt.stroke();
                cxt.closePath();
                //从圆心到嘴巴末点的连线
                cxt.beginPath();
                cxt.moveTo(ball.x,ball.y);
                if(isRight)
                cxt.lineTo(ball.x + radius,ball.y);
                    else
                    cxt.lineTo(ball.x - radius,ball.y);
                cxt.stroke();
                cxt.closePath();
                state = 1;
                break;
            default :
                break;
        }
    }

效果图:

对Canvas不清楚的同学,可以看看我前面的文章哈。

本专题将会持续更新,直到游戏做出来,欢迎交流,欢迎评论,谢谢!

时间: 2024-10-08 05:13:38

HTML5吃豆豆游戏开发实战(一)使用Canvas绘制游戏主角的相关文章

HTML5游戏开发实战--注意点

1.WebSocket是HTML5标准的一部分,Web页面可以用它来持久连接到socket服务器上.该接口提供了浏览器与服务器之间的事件驱动型连接,这意味着客户端不必再每隔一个时间段就需要向服务器发送一次新的数据请求.当有数据需要更新时,服务器就可以直接推送数据更新给浏览器.该功能的好处之一就是玩家之间可以实时进行交互.当一个玩家做了些事,就会向服务器发送数据,服务器将广播一个事件给其他已连接的所有浏览器,让它们知道玩家做了什么.这样就使得制作HTML5网络游戏成为可能. 2.随着现代浏览器对H

cocos2d 游戏开发实战

文章转自:http://uliweb.clkg.org/tutorial/read/40 6   cocos2d 游戏开发实战 6.1   创建cocos2d项目 6.2   cocos2d v3 "hello world" 6.2.1   显示一个飞船 6.3   精灵 6.4   開始 space viking 之旅 6.4.1   添加 sneakyinput 6.5   精灵的移动效果,旋转效果 6.6   定时器效果 6.7   启动 cocos2d,默认竖屏 6.8   检

unity3D游戏开发实战原创视频讲座系列10之《保卫战:异形入侵》游戏开发第一季

讲解目录 <保卫战:异形入侵>游戏开发    1 第一讲   游戏演示和资源的介绍    1 第二讲  "异形"怪物的实现    1 第三讲  "异形"怪物生命值的体现    9 第四讲  "异形"怪物死后处理    12 第五讲  玩家的制作    15 第六讲  玩家的行走控制(键盘)    16 第七讲  武器的切换(鼠标)     16 第八讲  摄像头的变化(鼠标)    19 第九讲  子弹预制体和特效的制作    20

[ios5 cocos2d游戏开发实战] 笔记3-FileUtils, notificationCenter

FileUtils //文件管理工具 FileUtils::getInstance() std::string getStringFromFile(const std::string& filename);//读取文件中的字符串 Data getDataFromFile(const std::string& filename);//获取文件数据 void setSearchPaths(const std::vector<std::string>& searchPaths

Cocos2d-x+3.x游戏开发实战pdf

下载地址:网盘下载 内容简介  · · · · · · <Cocos2d-x 3.x游戏开发实战>是一本介绍Cocos2d-x游戏引擎的实用图书,全面介绍了最新的Cocos2d-x 3.2游戏引擎各方面的知识. <Cocos2d-x 3.x游戏开发实战>从内容层次上可分为四个部分.第一部分介绍了游戏开发的基础知识.游戏引擎概念.Cocos2d-x的下载与安装,以及跨平台开发环境的搭建.第二部分介绍了Cocos2d-x中的核心类.动作.动画.3D特效.文字.字体.菜单.事件处理.UI

《Cocos2d-x游戏开发实战精解》学习笔记3--在Cocos2d-x中播放声音

<Cocos2d-x游戏开发实战精解>学习笔记1--在Cocos2d中显示图像 <Cocos2d-x游戏开发实战精解>学习笔记2--在Cocos2d-x中显示一行文字 之前的内容主要都是介绍如何在屏幕上显示图像,事实上除了图像之外,音乐的播放也可以被理解为一种显示的方式,本节将学习在Cocos2d-x中播放声音的方法. (1)在HelloWorld.h中对HelloWorld类进行如下定义: class HelloWorld : public Cocos2d::Layer { pu

《Cocos2d-x游戏开发实战精解》学习笔记1--在Cocos2d中显示图像

Cocos2d-x中的图像是通过精灵类来显示的.在Cocos2d-x中游戏中的每一个角色.怪物.道具都可以理解成是一个精灵,游戏背景作为一种特殊的单位将其理解成是一个精灵也没有什么不妥.在源文件本章目录下的项目ChapterThree03就展示了使用Cocos2d-x实现简单游戏开始界面的方法,主要就是通过精灵类来显示图像,其关键代码如范例3-5所示. [范例3-5 在Cocos2d-x中显示图像] Size size = Director::getInstance()->getVisibleS

cocos2d-x游戏开发实战原创视频讲座系列1之2048游戏开发

 第一讲 游戏的演示和工具介绍...1 第二讲 创建项目...2 第三讲 界面显示...3 第四讲 数字2的产生...7 第五讲 输入操作的推断...9 第六讲 输入操作的反应...13 第七讲 分数的累加.游戏结束检測...18 第八讲 界面美化...22 视持续更新中.... 视频存放地址例如以下:http://ipd.pps.tv/user/1058663622 或者:http://www.iqiyi.com/u/1058663622 持续更新中~~~~~~~~~~~~~~. 第一讲 

Unity游戏开发实战视频教程

Unity客户端架构设计与网络游戏关键技术(Avatar,热更新,Protobuf)课程分类:游戏开发适合人群:中级课时数量:20(42节)课时用到技术:Unity客户端,UI设计框架,Avatar换装,Protobuf-net等涉及项目:搭建Unity客户端 UI设计框架以及Avatar换装和移动端热更新技术实现以及Protobuf-net在Unity中运用咨询qq:1840215592 课程介绍:1.课程研发环境开发工具:Unity4.6和VS20082.内容简介本课程内容详细介绍了如何实现

Swift游戏开发实战教程(大学霸内部资料)

Swift游戏开发实战教程(大学霸内部资料) 试读下载地址:http://pan.baidu.com/s/1sj7DvQH 介绍:本教程是国内第一本Swift游戏开发专向资料. 本教程详细讲解记忆配对.太空侵略者.Simon记忆.迷你高尔夫.银河大战五个游戏的开发.在项目讲解同时,还着详细介绍了图形绘制.游戏引擎.音频引擎.用户交互.传感器等专向技术.最后,教程讲解苹果专用游戏框架Sprit Kit的使用.为了帮助读者充分了解实际开发,教程还详细讲解游戏开发的必备知识,如帐号绑定.发布游戏等内容