应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

教你用ECharts轻松做一个FlappyBird小游戏

  本文分享自华为云社区《没想到吧!这个可可爱爱的游戏居然是用ECharts实现的!云社区华为云》,作者:DevUI。前言
  echarts是一个很强大的图表库,除了我们常见的图表功能,echarts有一个自定义图形的功能,这个功能可以让我们很简单地在画布上绘制一些非常规的图形,基于此,我们来玩一些花哨的。
  FlappyBird小游戏体验地址(看看你能玩几分):
  foolmadao。github。ioechartflap
  下面我们来一步步实现他。1在坐标系中画一只会动的小鸟
  首先实例化一个echart容器,再从网上找一个像素小鸟的图片,将散点图的散点形状,用自定义图片的方式改为小鸟。constmyChartecharts。init(document。getElementById(main));option{series:〔{name:bird,type:scatter,symbolSize:50,symbol:image:bird。png,data:〔〔50,80〕〕,animation:false},〕};myChart。setOption(option);
  要让小鸟动起来,就需要给一个向右的速度和向下的加速度,并在每一帧的场景中刷新小鸟的位置。而小鸟向上飞的动作,则可以靠角度的旋转来实现,向上飞的触发条件设置为空格事件。option{series:〔{xAxis:{show:false,type:value,min:0,max:200,},yAxis:{show:false,min:0,max:100},name:bird,type:scatter,symbolSize:50,symbol:image:bird。png,data:〔〔50,80〕〕,animation:false},〕};设置速度和加速度leta0。05;letvh0;letvw0。5timersetInterval((){小鸟位置和仰角调整vhvha;option。series〔0〕。data〔0〕〔1〕vh;option。series〔0〕。data〔0〕〔0〕vw;option。series〔0〕。symbolRotateoption。series〔0〕。symbolRotate?option。series〔0〕。symbolRotate5:0;坐标系范围调整option。xAxis。minvw;option。xAxis。maxvw;myChart。setOption(option);},25);
  效果如下
  2用自定义图形绘制障碍物
  echarts自定义系列,渲染逻辑由开发者通过renderItem函数实现。该函数接收两个参数params和api,params包含了当前数据信息和坐标系的信息,api是一些开发者可调用的方法集合,常用的方法有:api。value(),意思是取出dataItem中的数值。例如api。value(0)表示取出当前dataItem中第一个维度的数值。api。coord(),意思是进行坐标转换计算。例如varpointapi。coord(〔api。value(0),api。value(1)〕)表示dataItem中的数值转换成坐标系上的点。api。size(),可以得到坐标系上一段数值范围对应的长度。api。style(),可以获取到series。itemStyle中定义的样式信息。
  灵活使用上述api,就可以将用户传入的Data数据转换为自己想要的坐标系上的像素位置。
  renderItem函数返回一个echarts中的graphic类,可以多种图形组合成你需要的形状,graphic类型。对于我们游戏中的障碍物只需要使用矩形即可绘制出来,我们使用到下面两个类。type:group,组合类,可以将多个图形类组合成一个图形,子类放在children中。type:rect,矩形类,通过定义矩形左上角坐标点,和矩形宽高确定图形。数据项定义为〔x坐标,下方水管上侧y坐标,上方水管下侧y坐标〕data:〔〔150,50,80〕,。。。〕renderItem:function(params,api){获取每个水管主体矩形的起始坐标点letstart1api。coord(〔api。value(0)10,api。value(1)〕);letstart2api。coord(〔api。value(0)10,100〕);获取两个水管头矩形的起始坐标点letstartHead1api。coord(〔api。value(0)12,api。value(1)〕);letstartHead2api。coord(〔api。value(0)12,api。value(2)8〕)水管头矩形的宽高letheadSizeapi。size(〔24,8〕)水管头矩形的宽高letrectapi。size(〔20,api。value(1)〕);letrect2api。size(〔20,100api。value(2)〕);坐标系配置constcommon{x:params。coordSys。x,y:params。coordSys。y,width:params。coordSys。width,height:params。coordSys。height}水管形状constrectShapeecharts。graphic。clipRectByRect({x:start1〔0〕,y:start1〔1〕,width:rect〔0〕,height:rect〔1〕},common);constrectShape2echarts。graphic。clipRectByRect({x:start2〔0〕,y:start2〔1〕,width:rect2〔0〕,height:rect2〔1〕},common)水管头形状constrectHeadShapeecharts。graphic。clipRectByRect({x:startHead1〔0〕,y:startHead1〔1〕,width:headSize〔0〕,height:headSize〔1〕},common);constrectHeadShape2echarts。graphic。clipRectByRect({x:startHead2〔0〕,y:startHead2〔1〕,width:headSize〔0〕,height:headSize〔1〕},common);返回一个group类,由四个矩形组成return{type:group,children:〔{type:rect,shape:rectShape,style:{。。。api。style(),lineWidth:1,stroke:000}},{type:rect,shape:rectShape2,style:{。。。api。style(),lineWidth:1,stroke:000}},{type:rect,shape:rectHeadShape,style:{。。。api。style(),lineWidth:1,stroke:000}},{type:rect,shape:rectHeadShape2,style:{。。。api。style(),lineWidth:1,stroke:000}}〕};},
  颜色定义,我们为了让水管具有光泽使用了echarts的线性渐变色对象。itemStyle:{渐变色对象color:{type:linear,x:0,y:0,x2:1,y2:0,colorStops:〔{offset:0,color:ddf38c0处的颜色},{offset:1,color:587d2a100处的颜色}〕,global:false缺省为false},borderWidth:3},
  另外,用一个for循环一次性随机出多个柱子的数据functioninitObstacleData(){添加minHeight防止空隙太小letminHeight20;letstart150;obstacleData〔〕;for(letindex0;index50;index){constheightMath。random()30minHeight;constobstacleStartMath。random()(90minHeight);obstacleData。push(〔start50index,obstacleStart,obstacleStartheight100?100:obstacleStartheight〕)}}
  再将背景用游戏图片填充,我们就将整个游戏场景,绘制完成:
  3进行碰撞检测
  由于飞行轨迹和障碍物数据都很简单,所以我们可以将碰撞逻辑简化为小鸟图片的正方形中,我们判断右上和右下角是否进入了自定义图形的范围内。
  对于特定坐标下的碰撞范围,因为柱子固定每格50坐标值一个,宽度也是固定的,所以,可碰撞的横坐标范围就可以简化为(x501)0。6
  在特定范围内,依据Math。floor(x50)获取到对应的数据,即可判断出两个边角坐标是否和柱子区域有重叠了。在动画帧中判断,如果重叠了,就停止动画播放,游戏结束。centerCoord为散点坐标点functionjudgeCollision(centerCoord){if(centerCoord〔1〕0centerCoord〔1〕100){returnfalse;}letcoordList〔〔centerCoord〔0〕15,centerCoord〔1〕1〕,〔centerCoord〔0〕15,centerCoord〔1〕1〕,〕for(leti0;i2;i){constcoordcoordList〔i〕;constindexcoord〔0〕50;if(index10。6obstacleData〔Math。floor(index)3〕){if(obstacleData〔Math。floor(index)3〕〔1〕coord〔1〕obstacleData〔Math。floor(index)3〕〔2〕coord〔1〕){returnfalse;}}}returnfalse}functioninitAnimation(){动画设置timersetInterval((){小鸟速度和仰角调整vhvha;option。series〔0〕。data〔0〕〔1〕vh;option。series〔0〕。data〔0〕〔0〕vw;option。series〔0〕。symbolRotateoption。series〔0〕。symbolRotate?option。series〔0〕。symbolRotate5:0;坐标系范围调整option。xAxis。minvw;option。xAxis。maxvw;碰撞判断constresultjudgeCollision(option。series〔0〕。data〔0〕)if(result){产生碰撞后结束动画endAnimation();}myChart。setOption(option);},25);}总结
  echarts提供了强大的图形绘制自定义能力,要使用好这种能力,一定要理解好数据坐标点和像素坐标点之间的转换逻辑,这是将数据具象到画布上的重要一步。
  运用好这个功能,再也不怕产品提出奇奇怪怪的图表需求。
  源码地址:github。comfoolmadaoe
  点击下方,第一时间了解华为云新鲜技术
  华为云博客大数据博客AI博客云计算博客开发者中心华为云

售价不到200元的格力电风扇到底怎么样?购买理由家里房间里空调吹的还是不够凉快,特别是刚从外面回来需要进到空调房间里需要爽一把,一边吹空调一边吹电扇一定是一件很舒服的事情。另外,空调房里我个人认为最舒服的方式并……总决赛场均24分,却被球队交易,他太失望了,球队要出现矛盾了自从杜兰特提出交易之后联盟当中各支球队都为之一震,很多支球队他们还是非常想要得到杜兰特的,毕竟得到杜兰特之后他们球队将会立刻成为夺冠的热门球队,现在杜兰特的个人能力依旧是非常出……三张图读懂万亿比亚迪供应链文高雅制图张可、郑灿城编辑彭孝秋去年5月的最后一天,宁德时代市值第一次站上10000亿元。今年6月中旬,比亚迪也首次站上万亿市值,成为中国车企里第一个破……杨洋且试天下丰兰息武功被废,杨洋演的痛到战栗,演技无懈可击电视剧且试天下从看第一集开始,就觉得杨洋演的真的很好,很适合演古装戏!希望杨洋以后多演古装,好看加油!而看新戏时杨洋却没有旧角色的代入感,太强了吧,内娱太需要这种颜值加演……推荐,密云捧河湾45个小时的休闲游捧河湾,一个不大的景点,人不多,好停车。野趣十足,老冰棍儿3元一根。沿着溪水清潭上行,走走停停,不累。树荫较多,不热。半山腰有一飞瀑从山上飞下,再往上走百米有两个洞……穆里尼奥太高兴了,宴请全队吃披萨,有这样的主帅幸福穆里尼奥没有因为1:0小胜而烦恼,也没有因为小魔仙迪巴拉错失机会而不快,更没有因为小扎鸟浪射而生气。相反,他非常高兴,因为从萨勒尼塔纳毫无悬念地带走三分,不像卫冕冠军,在……肿瘤化疗后需要注意什么,哪些东西不可以吃?最近有粉丝朋友问,这段时间做完了化疗,不知道肿瘤化疗后需要注意什么,吃的方面需要特别注意什么,哪些东西可以吃哪些东西不可以吃?今天给大家讲一下化疗以后的饮食。对于化疗的患……小黑裤下岗了!今年夏天流行这条裤子,时髦优雅,真高级姑娘们觉得夏天买什么最容易踩雷?我猜肯定有人说短裤,我之前就是买3条退3条的人。买回家要么提不上去,要么大腿肉嘞出线但想穿长裤遮肉显瘦,有些面料太厚的夏天一上身,不……技术突破使我们距离现实中的太赫兹技术更近了一步科学家们在二维导电系统中发现了一种新的效应,有望改善太赫兹探测器的性能。最近在二维导电系统中的一项物理学发现使一种新型的太赫兹探测器成为可能。太赫兹频率位于电磁辐射频谱的微波和……新疆9月份穿什么衣服?防风防潮防雨防晒透气全要考虑到新疆9月份适合穿的衣服有:1、三合一冲锋衣也称户外夹克,可以防风、防潮、防雨、防晒、防寒、还透气,一件可解决全天候穿衣;2、薄羽绒服搭配夏装,早穿羽绒服午穿夏装;3、带全四季服……男子每天吞9颗维生素,肝衰竭住院!滥补维生素,3大危害你想不作为人体最重要的催化剂,维生素担当着促进器官和组织运转的重要作用,如果身体里的维生素缺乏,就好比轴承之间缺少润滑油一样,身体会变得滞涩且不适,甚至增加各种疾病风险。也正是……吸血鬼乌贼最早的祖先?化石告诉了我们古生物学家认为他们发现了一种新的已经灭绝的头足类动物的,它有十个功能性的前肢,类似于吸血乌贼,为了纪念美国总统乔拜登对科学的贡献而命名为Syllipsimopodibideni……
日本的悲情城市从焦土中成长,游客看到的都是悲伤日本是一个让许多中国游客纠结的国家,一方面从历史文化的角度来说,无论古代日本还是如今的日本,其文化之源皆来自中国,但在上个世纪日本人对中国也曾犯下滔天罪行;另一方面,近些年来随……辽篮再做大举动,传递辽篮精神,5人成幸运儿,周俊成变身发言人北京时间6月17日消息,CBA联赛正处于休赛期,各个俱乐部正在忙着进行人员的调配工作,辽宁男篮眼下正在沈阳进行备战。就在6月17日上午,辽宁男篮再做大举动,传递辽篮精神,5人成……颜值爆表小白也可轻松上路的WiFi6路由器Mesh组网搭建指随着网络科技的日新月异,智能家居从以前的单一家电开始覆盖到所有的家电产品,家里需要上网的设备也越来越多。家里原来的路由服役许久,身体和心理也越来越跟不上时代的发展,网络覆盖小,……全球头号女骗子和马云聊天和总统吃饭,为何300亿资产一夜归零19岁辍学,31岁身价高达45亿美元。她曾被称为女版乔布斯,和巴西总统一起吃饭,和马云一起谈笑风生究竟,她是如何用一滴血,忽悠整个美国,骗传媒大亨默多克给自己投钱的呢?……长度2。8纳米的碳纳米管分子结晶体管问世,中国国际顶刊论文数来源:科技日报、科研圈、环球科学、中国科学报、科学网、中科院文献情报中心等天问一号火星离子与中性粒子分析仪首个成果发布来源:EarthandPlantaryPhysics……秽土鼬还原度又被质疑,期待的须佐能乎落空,像是晓鼬的升级版?火影忍者手游的秽土鼬全技能效果各位也都已经看到了,很多人说策划志乃在还原度方面很用心,还专门针对二技能的第二段防反效果逐个忍者做改动,这个工作量确实很大。而且伊邪那美的呈现形式……华为!一个令美国恐惧的中国科技企业当今要说中国民营科技企业,大家应该首先想到的就是华为,华为有什么厉害?能让美国政府千方百计加以制裁,阻止华为5G技术的发展!要知道,华为5G技术很大程度决定中国未来5年10年5……爱长斑的人,这么保养试试,不花钱能美白总是暴露在阳光下、有雀斑遗传基因的人、皮肤比较白比较干的人更容易长斑。而且随着年龄的增加,长斑的几率越来越高,祛斑的难度逐渐增加,最终可能色斑满脸。爱长斑的人怎么保养才能……三星ISOCELLHP3发布,2亿像素支持16合1在几年之前,三星发布了全球首个1。08亿像素的手机相机传感器,而在前段时间三星又发布了2亿像素的ISOCELLHP1传感器。而就在今天三星再次发布了2亿像素的ISOCELLHP……杜兰特脱单的机会来了?詹娜日常操作,与布克分手,两年恋情结束谁的机会来了?布克和詹娜分手,詹娜提出的!新鲜劲过去了,该分手了詹娜的日常操作而已,不知道她又相中了哪个NBA球星。要不考虑一下杜兰特?作为资深球迷,你们有没……乡村景观设计要点空间布局要素解读点击上方关注本号,更多行业内容推送乡村景观介于城市景观和纯自然景观之间,是有自己生产生活方式的田园风光,因其具有自然与人文并蓄的特色,也是一种独特的旅游资源。村落、农田、……盘点NBA历史五大矮个内线别看我个子小,照样翻江倒海小球时代的来临,对NBA联盟造成了极大的冲击,他带来的最大影响,就是一大批的传统内线面临着失业的尴尬,像艾顿这样的饼锋,已经很难有自己的容身之地了,既没有自主进攻能力,又没有大……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网