背景:
上一篇,已经实现了水果不断向上抛的效果和开始界面,这一篇我们将分析如何切水果,获得分数;运行demo需要配置好CocosEditor,暂不支持其他工具。demo是跨平台的,可移植运行android,ios,html5网页等,代码是基于javascript语言,cocos2d-x游戏引擎,CocosEditor手游开发工具完成的。
源代码下载:
请到代码集中营下载(水果忍者 cocos2d-JS 源代码):http://blog.makeapp.co/?p=319
不同平台下的效果图:
windows
html5网页
android平台
代码分析:
1 创建水果静态数组,每一个水果都有四个参数,编号,分数,本身的图片,切除后的碎片;这里定义好了,下面直接用;
- FRUIT_DATA = [
- {
- num: 0,
- score: 1,
- fruitImage: "apple.png",
- cutImage: ["apple-1.png", "apple-2.png"]
- },
- {
- num: 1,
- score: 2,
- fruitImage: "banana.png",
- cutImage: ["banana-1.png", "banana-2.png"]
- },
- {
- num: 2,
- score: 2,
- fruitImage: "basaha.png",
- cutImage: ["basaha-1.png", "basaha-2.png"]
- },
- {
- num: 3,
- score: 3,
- fruitImage: "peach.png",
- cutImage: ["peach-1.png", "peach-2.png"]
- },
- {
- num: 4,
- score: 5,
- fruitImage: "sandia.png",
- cutImage: ["sandia-1.png", "sandia-2.png"]
- },
- {
- num: 5,
- score: 0,
- fruitImage: "boom.png",
- cutImage: "boomlight1.png"
- }
- ];
2 检测碰撞事件;
# 触摸有onTouchBegan和onTouchMoved,这是两个点,可以确定刀锋的方向,上一节已讲过;var flash = cc.MySprite.createFlash(this.rootNode, "flash.png", this.pBegin, loc);
# 首先检查碰撞,水果和移动点发生碰撞cc.rectContainsPoint(fruit.getBoundingBox(), loc)
#如果碰撞,播放音效;playEffect;
#创建flash
#水果消失,并产生切成两半 fruit slice
#根据水果的数据获得分数提示 scoretip
- MainLayer.prototype.onTouchesMoved = function (touches, event)
- {
- if (this.gameStatus == OVER) {
- return;
- }
- var loc = touches[0].getLocation();
- for (var i = 0; i < this.fruitList.length; i++) {
- var fruit = this.fruitList[i];
- if (fruit && fruit.cleanuped == false) {
- if (cc.rectContainsPoint(fruit.getBoundingBox(), loc)) {
- //splatter audio
- cc.AudioEngine.getInstance().playEffect(FRUIT_SOUNDS.splatter, false);
- //flash
- var flash = cc.MySprite.createFlash(this.rootNode, "flash.png", this.pBegin, loc);
- //Fruit Slice
- this.newSliceFruit(fruit.num, fruit.getPosition(), flash.getRotation());
- fruit.runAction(cc.ScaleTo.create(0, 0));
- fruit.cleanuped = true;
- //scoreTip
- var fruitScore = FRUIT_DATA[fruit.num].score;
- this.scoreTip(fruit.getPosition(), fruitScore + "");
- this.totalScore += Number(fruitScore);
- this.totalScoreFont.setString(this.totalScore);
- }
- }
- else {
- this.fruitList.splice(i, 1);
- }
- }
- };
3 水果切成两半的方法
#三个参数 水果编号num,切除的位置fruitPosition ,旋转角度rotation;
#从数组取出水果两个碎片图片,并创建两个cut1 cut2精灵
#创建两个cut的贝塞尔动作bezier1 bezier2,方向是相反的
#两个cut 分别runAction();
#本来切除的瞬间有一个果汁溅在墙上的效果shadow,因为没找到合适的图片 代码注释掉了
- MainLayer.prototype.newSliceFruit = function (num, fruitPosition, rotation)
- {
- //one fruit sliced two piece,cut1 and cut2
- var data = FRUIT_DATA[num];
- var cutImages = data.cutImage;
- var cut1 = cc.MySprite.create(this.rootNode, cutImages[0], fruitPosition, 100);
- var cut2 = cc.MySprite.create(this.rootNode, cutImages[1], fruitPosition, 100);
- cut1.setRotation(rotation);
- cut2.setRotation(rotation);
- var controlPoints1 = [
- fruitPosition,
- fruitPosition,
- cc.p(fruitPosition.x - 200, -100)
- ];
- var bezier1 = cc.BezierTo.create(1, controlPoints1);
- var controlPoints2 = [
- fruitPosition,
- fruitPosition,
- cc.p(fruitPosition.x + 200, -100)
- ];
- var bezier2 = cc.BezierTo.create(1, controlPoints2);
- var action2 = cc.RotateBy.create(1, getRandom(360));
- cut1.runAction(cc.Spawn.create(cc.Sequence.create(bezier1, cc.CleanUp.create(cut1)), action2));
- cut2.runAction(cc.Spawn.create(cc.Sequence.create(bezier2, cc.CleanUp.create(cut2)), action2.clone()));
- //fruit shadow
- /*var shadowImages = ["shadow2.png"];
- var colors = [cc.c4b(200, 0, 0, 20), cc.c4b(0, 200, 0, 20), cc.c4b(0, 0, 200, 20), cc.c4b(200, 200, 0, 20)];
- var shadow = cc.MySprite.create(this.rootNode, shadowImages[getRandom(shadowImages.length)], fruitPosition, 10);
- shadow.setColor(colors[getRandom(colors.length)]);
- shadow.setScale(0.5);
- shadow.runAction(cc.Sequence.create(cc.DelayTime.create(2), cc.CleanUp.create(shadow)));*/
- };
4 提示分数,这个很简单,只是一个创建文字标签的方法
- MainLayer.prototype.scoreTip = function (p, message)
- {
- var director = cc.Director.getInstance();
- var size = director.getWinSize();
- var label = cc.LabelTTF.create(message, "Arial", 30);
- label.setPosition(cc.p(p.x, p.y + 50));
- label.setColor(cc.c3b(0, 255, 0));
- label.setZOrder(10000);
- this.rootNode.addChild(label);
- label.runAction(cc.Sequence.create(cc.DelayTime.create(0.8), cc.CleanUp.create(label)));
- return label;
- };
这一篇就到这里;
CocosEditor开发工具:
CocosEditor,它是开发跨平台的手机游戏工具,运行window/mac系统上,javascript脚本语言,基于cocos2d-x跨平台游戏引擎, 集合代码编辑,场景设计,动画制作,字体设计,还有粒子,物理系统,地图等等的,而且调试方便,和实时模拟;
CocosEditor 下载,介绍和教程:http://blog.csdn.net/touchsnow/article/details/19070665;
CocosEditor官方博客:http://blog.makeapp.co/;
相关推荐
Fruit Ninja水果忍者VR.apk(oculus quest 游戏) 这个就不用多介绍了吧,喜欢玩的自然就喜欢,在VR的世界里挥动双刀切水果。 送给正在研究安卓开发的朋友们做参考。
水果忍者-Fruit Ninja.zipscratch2.0 3.0编程项目源文件源码经典游戏案例素材源代码水果忍者-Fruit Ninja.zipscratch2.0 3.0编程项目源文件源码经典游戏案例素材源代码水果忍者-Fruit Ninja.zipscratch2.0 3.0编程...
“水果忍者”(Fruit Ninja)是一款在全球范围内广受欢迎的休闲游戏,以其独特的切割水果的游戏玩法和精美的视觉效果吸引了无数玩家。在这个项目中,我们关注的是由Unity引擎开发的国外版本。Unity是一款强大的跨...
《水果忍者代码详解:基于Cocos2d的编程实践》 "水果忍者"是一款深受全球玩家喜爱的休闲游戏,其独特的切水果玩法和精美的画面设计,使其成为移动平台上的经典之作。本篇文章将深入探讨如何使用Cocos2d引擎来仿制...
在这个"html5 水果忍者 源代码"项目中,我们可以深入理解HTML5在游戏开发中的应用。 首先,让我们谈谈HTML5的核心优势。HTML5引入了许多新元素,如`<canvas>`,它为动态图形和交互式内容提供了画布。在水果忍者这样...
标题中的"fruit-ninja-master"指的是一个开源项目,它可能是《水果忍者》游戏的源代码仓库。《水果忍者》是一款在全球范围内广受欢迎的休闲切水果游戏,由Halfbrick Studios开发。通过分析这个项目的源码,我们可以...
《Scratch编程项目:深入解析“水果忍者”游戏源代码》 Scratch,这款由麻省理工学院(MIT)的“终身幼儿园团队”开发的图形化编程工具,以其直观易懂的界面和丰富的创意潜力,深受全球少儿编程教育者的喜爱。本案例...
总结来说,“水果忍者HTML5代码”为开发者提供了一个可直接使用的框架,通过深入学习和二次开发,我们可以创建出更多有趣的HTML5游戏,进一步拓展游戏的边界。无论是对新手学习游戏开发,还是对资深开发者寻找灵感,...
【压缩包子文件的文件名称列表】"html5-fruit-ninja"可能是一个包含所有游戏源代码和资源文件的文件夹,比如HTML文件、CSS样式表、JavaScript脚本、图片资源等。这些文件共同构成了一个完整的HTML5游戏项目。 接...
在"HTML5水果忍者源代码 v1.0"这个项目中,开发者使用HTML5技术构建了一个流行的移动游戏——水果忍者的网页版。这款游戏以其简单易玩、刺激的切割体验深受玩家喜爱。 HTML5的核心优势在于其对多媒体的支持,它内置...
《水果忍者HTML5简易版》是一款基于HTML5技术开发的轻量级游戏,它以其小巧的体积(仅几MB)和对多种浏览器的良好兼容...通过分析和研究这款游戏的源代码,我们可以深入理解HTML5的实战应用,提升自己的前端开发技能。
关于文件"ChineseDron-fruit-ninja-7d1960f",这很可能是游戏源代码的版本控制标识。"ChineseDron"可能是开发团队的名字或者是项目代号,"fruit-ninja"揭示了游戏的主题,而"7d1960f"则可能是一个Git或SVN的版本哈希...
【水果忍者网页版源代码】是一个开源项目,旨在提供一个与知名手机游戏"水果忍者"相似的在线体验。这个项目的源代码分享是出于学习和交流的目的,让更多的人能够了解游戏开发的基本流程和技术。 首先,我们要理解的...
《水果忍者(Fruit Ninja)游戏源代码解析》 在IT行业中,游戏开发一直是一项充满挑战和趣味性的任务,而《水果忍者》作为一款备受欢迎的休闲游戏,其背后的编程逻辑和技术实现自然引起了众多开发者的好奇。本文将...
scratch Fruit Ninja 游戏,用scratch图形化平台编辑。
通过分析“水果忍者”的源码,我们可以了解到游戏是如何实现动态水果生成、刀片轨迹计算、分数统计等关键功能的。源代码中的每一行都可能隐藏着开发者的心血与智慧,它们构成了游戏的灵魂,让玩家在指尖舞动间体验到...
"HTML5水果忍者源码压缩包.zip"是一个包含HTML5版本的“水果忍者”游戏源代码的压缩文件,这对于学习和理解HTML5游戏开发的开发者来说是一个宝贵的学习资源。 "水果忍者"是一款广受欢迎的休闲游戏,玩家通过滑动...
Windows Phone 7上的水果忍者。 XAP包。部署到手机上即可使用。
水果忍者 风靡iphone android版
水果忍者网页版,js+css+html 《水果忍者》当人们打开游戏的时候,看到水果图标很自然就会去点击,但是会看到手指划过的提示,于是就会很自然的采用划过的手势去点击图标,并且会把这种交互方式延续到游戏中。