别踩白块儿游戏源代码
运行 demo 需要配置好 CocosEditor,暂不支持其他工具。demo 是跨平台的,可移植运行 android,ios,html5 网页等,代码是基于 javascript 语言,cocos2d-x 游戏引擎,CocosEditor 手游开发工具完成的。
代码分析:(只挑选核心主代码分析,更多细节自行研究源码)
1 创建曲谱数组 do、re、mi、fa,sol、la、duo
CITY_OF_SKY = [ 4, 3, 4, 1, 3 , 3, 1, 1, 1, 7, 4, 4, 7, 7, 6, 7, 1, 7, 1, 3, 7 , 3 , 6, 5, 6, 1 , 5 , 3, 3];
2 初始化表格,本来先创建4*曲谱数组长度的表格,但为了优化,先创建4*5表格,使用时候再不断新建增加表格;
//tables this.tables = new Array(this.pianoLengthIndex); for (var j = 0; j < this.pianoLength; j++) { var sprites = new Array(4); var random = getRandom(4); for (var i = 0; i < 4; i++) { sprites[i] = this.newBlock(i, j, random); } this.tables[j] = sprites; }
3 创建单个表格元素,可根据colortype在一行里确定一个黑色元素
MainLayer.prototype.newBlock = function (i, j, colorType) { //simple block var block = cc.Sprite.create("res/whiteBlock.png"); block.setPosition(cc.p(this.blockWidth / 2 + this.blockWidth * i, this.blockHeight / 2 + this.blockHeight * j)); block.setScaleX(this.scaleX); block.setScaleY(this.scaleY); block.setZOrder(100); block.setAnchorPoint(cc.p(0.5, 0.5)); var color = "white"; if (j == 0) { block.setColor(cc.c3b(0, 255, 0)); } else { if (i == colorType) { block.setColor(cc.c3b(30, 30, 30)); color = "black"; } } block.blockData = {col: i, row: j, color: color}; this.blockNode.addChild(block); return block; };
4 触摸表格,如果是黑色;如果是当前一行的上一行才能继续;
#如果没到顶,创建新的一行moveAddNewSprites,如果到顶了,创建分数结束节点createTopOverNode;
#如果整个表格移动到顶if (block.blockData.row == (this.pianoLengthIndex - 1)),游戏结束 this.gameStatus = OVER;
#如果没到顶,整个表格往下移一行this.blockNode.runAction(cc.MoveTo.create(0.2, cc.p(0, (this.blockNode.getPositionY() - this.blockHeight * heightNum))));
#单个元素运行一个缩放动画,移动步数+1; this.moveNum += 1;
//touch black if (block.blockData.color == "black") { if (block.blockData.row == (this.moveNum + 1)) { //create new sprite if (this.pianoLength < this.pianoLengthIndex) { //not reach top this.moveAddNewSprites(); } if (this.pianoLength == this.pianoLengthIndex) { //when reach top this.createTopOverNode(); } //move down cc.AudioEngine.getInstance().playEffect(PIANO_SIMPLE[this.pianoListIndex[j - 1]], false); block.setColor(cc.c3b(100, 100, 100)); var heightNum = 1; if (block.blockData.row == (this.pianoLengthIndex - 1)) { //when last row ,game success end, move two height heightNum = 2; cc.log("end"); this.gameStatus = OVER; cc.AudioEngine.getInstance().playEffect(SOUNDS.win, false); } this.blockNode.runAction(cc.MoveTo.create(0.2, cc.p(0, (this.blockNode.getPositionY() - this.blockHeight * heightNum)))); this.moveNum += 1; block.runAction(cc.Sequence.create( cc.ScaleTo.create(0, this.scaleX * 4 / 5, this.scaleY), cc.ScaleTo.create(0.2, this.scaleX, this.scaleY) )); } }
5 触摸表格,如果是白色,游戏结束;
#创建分数结束节点this.createTopOverNode();
#改变分数节点的颜色背景,结果失败;
this.createTopOverNode(); //create score node and move this.gameStatus = OVER; cc.AudioEngine.getInstance().playEffect(SOUNDS.error, false); block.setColor(cc.c3b(255, 0, 0)); block.runAction(cc.Sequence.create( cc.ScaleTo.create(0, this.scaleX * 4 / 5, this.scaleY * 4 / 5), cc.ScaleTo.create(0.2, this.scaleX, this.scaleY) )); this.scoreNode.bgColor.setColor(cc.c3b(255, 0, 0)); this.scoreNode.result.setString("失败了"); this.scoreNode.runAction(cc.MoveTo.create(0.2, cc.p(0, this.blockHeight * this.moveNum)));
6 创建添加新的一行
MainLayer.prototype.moveAddNewSprites = function () { cc.log("moveAddNewSprites"); var sprites = new Array(4); var random = getRandom(4); for (var k = 0; k < 4; k++) { sprites[k] = this.newBlock(k, this.pianoLength, random); } this.tables[this.pianoLength] = sprites; this.pianoLength += 1; };
7 分数结束节点创建函数
MainLayer.prototype.createTopOverNode = function () { //top score node this.scoreNode = cc.Node.create(); this.scoreNode.setPosition(cc.p(0, this.blockHeight * this.pianoLength)); this.scoreNode.setAnchorPoint(cc.p(0, 0)); this.scoreNode.setZOrder(130); this.blockNode.addChild(this.scoreNode); //color bg var bgColor = cc.Sprite.create("res/whiteBlock.png"); bgColor.setPosition(cc.p(0, 0)); bgColor.setScaleX(720 / 300); bgColor.setScaleY(1280 / 500); bgColor.setAnchorPoint(cc.p(0, 0)); bgColor.setColor(cc.c3b(0, 255, 0)); this.scoreNode.addChild(bgColor); this.scoreNode.bgColor = bgColor; //mode var wordsMode = ["经典", "街机", "禅"]; var modeLabel = cc.LabelTTF.create(wordsMode[GAME_MODE] + "模式", "Arial", 70); this.scoreNode.addChild(modeLabel); modeLabel.setPosition(cc.p(350, 1000)); modeLabel.setColor(cc.c3b(0, 0, 0)); modeLabel.setAnchorPoint(cc.p(0.5, 0.5)); //result var resultLabel = cc.LabelTTF.create("成功了", "Arial", 110); this.scoreNode.addChild(resultLabel); resultLabel.setPosition(cc.p(360, 750)); resultLabel.setAnchorPoint(cc.p(0.5, 0.5)); resultLabel.setColor(cc.c3b(139, 58, 58)); this.scoreNode.result = resultLabel; //back var backLabel = cc.LabelTTF.create("返回", "Arial", 50); this.scoreNode.addChild(backLabel); backLabel.setPosition(cc.p(200, 400)); backLabel.setAnchorPoint(cc.p(0.5, 0.5)); backLabel.setColor(cc.c3b(0, 0, 0)); this.scoreNode.back = backLabel; //return var returnLabel = cc.LabelTTF.create("重来", "Arial", 50); this.scoreNode.addChild(returnLabel); returnLabel.setPosition(cc.p(500, 400)); returnLabel.setAnchorPoint(cc.p(0.5, 0.5)); returnLabel.setColor(cc.c3b(0, 0, 0)); this.scoreNode.return = returnLabel; };
本文向大家介绍javascript实现别踩白块儿小游戏程序,包括了javascript实现别踩白块儿小游戏程序的使用技巧和注意事项,需要的朋友参考一下 最近有朋友找我用JS帮忙仿做一个别踩白块的小游戏程序,但他给的源代码较麻烦,而且没有注释,理解起来很无力,我就以自己的想法自己做了这个小游戏,主要是应用JS对DOM和数组的操作。 程序思路:如图:将游戏区域的CSS设置为相对定位、溢出隐藏;两块“游
本文向大家介绍jQuery实现别踩白块儿网页版小游戏,包括了jQuery实现别踩白块儿网页版小游戏的使用技巧和注意事项,需要的朋友参考一下 大致介绍 终于结束了考试,放假回家了。这次的别踩白块儿网页版要比之前做的 jQuery编写网页版2048小游戏 要简单一点,基本的思路都差不多。 这篇博客并不是详细的讲解,只是大致介绍函数的作用,其中实现的细节注释中有解释,网上的这个源码有点乱,如果想看比较整
本文向大家介绍js实现一款简单踩白块小游戏(曾经很火),包括了js实现一款简单踩白块小游戏(曾经很火)的使用技巧和注意事项,需要的朋友参考一下 效果图如下所示: html js css 总结 以上所述是小编给大家介绍的js实现一款简单踩白块小游戏,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对呐喊教程网站的支持! 如果你觉得本文对你有帮助,欢迎转载,烦
CocosEditor开源版 笔者历时一个晚上,终于完成了cocos2d-js开源版本,编码虽易,创意不易,且行且珍惜; 此版本包含了网上流行的各种版本。包括原版,朝代版,金庸版,星座,豪车等等近10个版本,代码开源,希望读者基于开源代码做出各种版本,供全名娱乐; 运行demo需要配置好CocosEditor,暂不支持其他工具。demo是跨平台的,可移植运行android,ios,html5网页等
GiantMIDI-Piano 是一个古典钢琴 MIDI 数据集,包含 2786 位作曲家的 10854 个 MIDI 文件,作曲家姓氏的管理子集包含包含 1787 名作曲家的 7236 个MIDI文件,GiantMIDI-Piano 是由字节跳动使用高分辨率钢琴转录系统从现场录音中转录而来的。 下载 GiantMIDI 钢琴 方法一(推荐) 按照 disclaimer.md 同意免责声明并下载
接入电钢琴等设备 MIDI 接口,访问站点,通过钢琴的弹奏实时显示瀑布流线条。全兼容各个平台的主流浏览器。 功能特性 实时接收 MIDI 数据并显示 可调控的速度和显示的颜色