如何使用cocos2dx try catch-x开发音乐类游戏,如Music Catch这样的音乐游戏

君,已阅读到文档的结尾了呢~~
本文主要介绍了如何用cocos2d-x来开发非常简单的游戏,是你入门的最佳资料,特别是重点介绍了cocos2d-x在音乐和音效方面的知识,是你开发游戏必不可少的资料。
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
如何用cocos2d-x来开发简单的Uphone游戏:(四) 音乐音效
最后的润色
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口你现在的位置:&&&&&&【游戏】MUSIC CATCH 边听边玩边放松
【游戏】MUSIC CATCH 边听边玩边放松
一款音乐游戏,只需要滑动鼠标,半夜睡不着,拿来放松下说不定能完出睡意来
这只游戏的亮点在于可以让玩家自由设置音乐,将个人喜欢的音乐贴入 MP3 FROM URL 试试吧&
推荐两首吉他的,有兴趣的可以贴进去玩玩
きっとまたいつか
wedding bell Let's Go!!
嫌麻烦但又想试试的人,选Randomize --&Surprise me --&Play
&Game Instructions
Catch as many good notes as you can to score top points.
Collect the yellow ones to increase your score multiplier. Avoid the red ones because they will diminish your score multiplier.
Use the mouse to collect the shapes.
哭,昨晚好的 现在我也看不见了
& 委屈下 自己点来玩
好梦好梦~ 晚安
--------------------老打错别字楼主
晚安小十八。
--------------------……
我终于坐上小十八的沙发了。
--------------------……
阿姐~ 为了你这句话 我以后都半夜来发帖 让你做沙发~
--------------------老打错别字
不要不要哇
我好久没这么晚睡了
您还是早点儿发帖
也早点儿休息吧
--------------------……
这贴 我也想早点发 贴游戏跟贴视频 不一样 我捣鼓了老半天 才成功的看在我这么辛苦的份上你玩下吧~ 里面的歌很不错
--------------------老打错别字
--------------------蔚蓝的天空下
在呢 好吧 我准备洗洗睡了
--------------------老打错别字
--------------------蔚蓝的天空下
第一个链接打开404
第二个要保存
视频是白的。
--------------------不要迷茫,不要悲伤,活在当下...
别哭 我也玩不了了 变白了
--------------------老打错别字
网址都没了
--------------------……
不过十八叔还是最帅的。
--------------------不要迷茫,不要悲伤,活在当下...
参与话题讨论,请先
78968名成员12213个主题
可用积分:25分//&cpp&with&cocos2d-x
#include&"SimpleAudioEngine/SimpleAudioEngine.h"
//&objc&with&cocos2d-iphone
#import&"SimpleAudioEngine.h"&
然后在bool HelloWorld::init()方法中,加入播放背景音乐的代码
//&cpp&with&cocos2d-x
SimpleAudioEngine::getSharedEngine()-&playBackgroundMusic(
&& & & & & & & & & & & & & & & & & & & "background-music-aac.mp3");
//&objc&with&cocos2d-iphone
[[SimpleAudioEngine&sharedEngine]&playBackgroundMusic:
&& & & & & & & & & & & & & & & & & &@"background-music-aac.caf"];&
接着在ccTouchesEnded方法中播放扔出飞镖的音效
//&cpp&with&cocos2d-x
SimpleAudioEngine::getSharedEngine()-&playEffect("pew-pew-lei.wav");
//&objc&with&cocos2d-iphone
[[SimpleAudioEngine&sharedEngine]&playEffect:@"pew-pew-lei.caf"];&
音效和背景音乐就这样简单搞定了。
七、最后的润色
现在让我们创建一个新场景,在打掉若干小怪、或者被小怪穿到屏幕左边时显示“You Win”或“You Lose”的界面。在Visual Studio中新建两个文件, GameOverScene.cpp和GameOverScene.h
GameOverScene.h的内容&
&1&//&cpp&with&cocos2d-x
&2&#ifndef&_GAME_OVER_SCENE_H_
&3&#define&_GAME_OVER_SCENE_H_
&5&#include&"cocos2d.h"
&7&class&GameOverLayer&:&public&cocos2d::CCColorLayer
&9&public:
10&&&GameOverLayer():_label(NULL)&{};
11&&&virtual&~GameOverLayer();
12&&&bool&init();
13&&&LAYER_NODE_FUNC(GameOverLayer);
15&&&void&gameOverDone();
17&&&CCX_SYNTHESIZE_READONLY(cocos2d::CCLabel*,&_label,&Label);
24&class&GameOverScene&:&public&cocos2d::CCScene
26&public:
27&&&GameOverScene():_layer(NULL)&{};
28&&&~GameOverScene();
29&&&bool&init();
30&&&SCENE_NODE_FUNC(GameOverScene);
32&&&CCX_SYNTHESIZE_READONLY(GameOverLayer*,&_layer,&Layer);
37&#endif&//&_GAME_OVER_SCENE_H_
&1&//&objc&with&cocos2d-iphone
&5&#import&"cocos2d.h"
&7&@interface&GameOverLayer&:&CCColorLayer&
17&&&CCLabel&*_
20&@property&(nonatomic,&retain)&CCLabel&*
24&@interface&GameOverScene&:&CCScene&
32&&&GameOverLayer&*_
35&@property&(nonatomic,&retain)&GameOverLayer&*
1. 在objc的头文件中,可以不声明类成员函数,而直接在.m文件里实现。cpp不允许这样做。所以我们会多个bool init();&
2. 由于cpp里没有self这种强大的关键字,所以CCLayer::node()和CCScene::node()方法的都需要派生类自己实现一份,不能像objc那样直接从父类继承下来靠self关键字变成指向自己的对象。node()方法很方便,集合了new,init,autorelease等方法,可以减少调用者的代码量。但由于每份node方法的代码都类似,我们就做了两个宏来方便大家 LAYER_NODE_FUNC和SCENE_NODE_FUNC. 如果想使用这两个宏,就必须在派生类里实现bool init()方法。
2. 关于构造函数和init方法。cocos2d-x在从objc改写为cpp时,并不是直接把init的内容翻到C++构造函数里面,主要出于这样的考虑:C++构造函数有个天生缺陷——没有返回值。这就导致C++构造函数依赖try-catch来捕捉逻辑异常。而一般try-catch用的人不多,开启try-catch支持会使编译后的二进制程序增加不少体积,而且android NDK上也是彻底不支持try-catch。所以我们采取现在比较流行的“二阶段构造”的方法,即使用时先调构造函数,再调用init处理初始化逻辑。这种思路不论是在苹果iOS的接口设计(比如[[NSString alloc] init],即二阶段构造)、还是在samsung bada操作系统使用C++类时都是如此。
3. objc中的@synthesize实现了_label和_layer两个属性的具体setter和getter。我们在cocos2dx\include\Cocos2dDefine.h中实现了一系列的宏定义,来模仿实现@property和@synthesize的功能。在上面代码中,我们用CCX_SYNTHESIZE_READONLY宏来实现了只读的类成员变量,只有getter没有setter。由于VC++的规则是inline函数只能在头文件里实现,所以@synthesize就从objc的.m文件里移动到cpp的.h文件里,和成员变量声明一并实现了
4. 严谨起见,我们需要在CPP的类构造函数里,对所有成员变量初始化,上文中增加了构造函数把_layer和_label指针初始化为NULL
接着就实现GameOverScene.cpp的内容
&1&//&cpp&with&cocos2d-x
&2&#include&"GameOverScene.h"
&3&#include&"HelloWorldScene.h"
&5&using&namespace&cocos2d;
&8&bool&GameOverScene::init()
10&&&if(&CCScene::init()&)
12&&&&&this-&_layer&=&GameOverLayer::node();
13&&&&&_layer-&retain();
14&&&&&this-&addChild(_layer);
16&&&&&return&true;
20&&&&&return&false;
24&GameOverScene::~GameOverScene()
26&&&if&(_layer)
28&&&&&_layer-&release();
29&&&&&_layer&=&NULL;
38&bool&GameOverLayer::init()
40&&&if&(&CCColorLayer::initWithColor(&ccc4(255,255,255,255)&)&)
42&&&&&CGSize&winSize&=&CCDirector::getSharedDirector()-&getWinSize();
43&&&&&this-&_label&=&CCLabel::labelWithString("","Artial",&32);
44&&&&&_label-&retain();
45&&&&&_label-&setColor(&ccc3(0,&0,&0)&);
46&&&&&_label-&setPosition(&ccp(winSize.width/2,&winSize.height/2)&);
47&&&&&this-&addChild(_label);
49&&&&&this-&runAction(&CCSequence::actions(
50&&&&&&&&&CCDelayTime::actionWithDuration(3),
51&&&&&&&&&CCCallFunc::actionWithTarget(this,&
52&&&&&&&&&&&&&&&&&&&&&callfunc_selector(GameOverLayer::gameOverDone)),
53&&&&&&&&&NULL));
55&&&&&return&true;
59&&&&&return&false;
63&void&GameOverLayer::gameOverDone()
65&&&CCDirector::getSharedDirector()-&replaceScene(&HelloWorld::scene()&);
68&GameOverLayer::~GameOverLayer()
70&&&if&(_label)
72&&&&&_label-&release();
73&&&&&_label&=&NULL;
&1&//&objc&with&cocos2d-iphone
&2&#import&"GameOverScene.h"
&3&#import&"HelloWorldScene.h"
&5&@implementation&GameOverScene
&6&@synthesize&layer&=&_
&8&-&(id)init
10&&&if&((self&=&[super&init]))&
12&&&&&self.layer&=&[GameOverLayer&node];
14&&&&&[self&addChild:_layer];
16&&&return&
24&-&(void)dealloc&
28&&&[_layer&release];
29&&&_layer&=&
30&&&[super&dealloc];
35&@implementation&GameOverLayer
36&@synthesize&label&=&_
38&-(id)&init
40&&&if(&(self=[super&initWithColor:ccc4(255,255,255,255)]&))&
41&&&{&&&&&&&&&&&&&&&&
42&&&&&CGSize&winSize&=&[[CCDirector&sharedDirector]&winSize];
43&&&&&self.label&=&[CCLabel&labelWithString:@""&fontName:@"Arial"&fontSize:32];
44&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
45&&&&&_label.color&=&ccc3(0,0,0);
46&&&&&_label.position&=&ccp(winSize.width/2,&winSize.height/2);
47&&&&&[self&addChild:_label];
48&&&&&&&&&&&&&&&&&
49&&&&&[self&runAction:[CCSequence&actions:
50&&&&&&&&&[CCDelayTime&actionWithDuration:3],
51&&&&&&&&&[CCCallFunc&actionWithTarget:self&
52&&& & & & & & & & & & & & & &selector:@selector(gameOverDone)],
53&&&&&&&&&nil]];&&&&&&&&&&&&
54&&&}&&&&&&&&
55&&&return&
63&-&(void)gameOverDone&
65&&&[[CCDirector&sharedDirector]&replaceScene:[HelloWorld&scene]];&&&&&&
68&-&(void)dealloc&
72&&&[_label&release];
73&&&_label&=&
74&&&[super&dealloc];
1. 再次注意GameOverLayer._label和GameOverScene._layer两个属性。这两个属性在objc的头文件里被声明为@property (nonatomic, retain),也就是被retain了一次,所以在dealloc里才要调用release方法。同样地,我们在~GameOverLayer()和~GameOverScene()析构函数里分别release()了这两个属性,但这个release需要和一个retain对应,所以在两个init方法里都分别添加了_label-&retain()和_layer-&retain();
2. 关于NSAutoReleasePool, cocos2d-x里也有个模仿实现,这个简单的垃圾回收机制对C++编程来说是个福音;它使用起来和iOS上的NSAutoReleasePool原则一样,参考苹果的文档 /library/ios/#documentation/cocoa/reference/foundation/Classes/NSAutoreleasePool_Class/Reference/Reference.html
简而言之就是,在使用cocos2d-x中继承自NSObject类的对象指针时,以下两种情况是需要用户多调一个release
类对象是用户自己new出来的。比如CCSprite *sprite = new CCSprite();
类对象是通过某个静态函数建立并返回的,比如CCSprite *sprite = CCSprite::spriteWithFile(...),这种情况不需要用户release;但如果你接着调用了sprite-&retain(), 那么就需要一个sprite-&release()对应
这个山寨版的NSAutoReleasePool使用和调试细节,多释放了或未释放了应如何处理,我会另外写篇文章描述&
注意,上面GameOverScene.cpp里有两个对象,一个场景(scene)和一个图层(layer),场景可以包含多个图层,而这个图层只在屏幕正中间放了一个文字标签(label),显示3秒种后返回到HelloWorldScene中。
最后,为了调用起这个GameOverScene,我们需要在HelloWorldScene中添加一些游戏逻辑代码。先得添加一个变量,判断我们的带头大哥一共用飞镖干掉了多少杂兵。在class HelloWorld中添加一个成员变量:
1&//&cpp&with&cocos2d-x
2&protected:
3&&&int&_projectilesD
1&//&objc&with&cocos2d-iphone
3&int&_projectilesD
然后在HelloWorldScene.cpp中,添加对GameOverScene.h的引用
//&cpp&with&cocos2d-x
#include&"GameOverScene.h"
//&objc&with&cocos2d-iphone
#import&"GameOverScene.h"
在HelloWorld::update方法中的removeChild(target)后面的targetsToDelete循环中增加计数并检查获胜条件,获胜了就显示"You Win!"界面
//&cpp&with&cocos2d-x
_projectilesDestroyed++;&&&&&&&&&&&&&&&&&&&&&&&
if&(_projectilesDestroyed&&&30)
&&GameOverScene&*gameOverScene&=&GameOverScene::node();
&&gameOverScene-&getLayer()-&getLabel()-&setString("You&Win!");
&&CCDirector::getSharedDirector()-&replaceScene(gameOverScene);
//&objc&with&cocos2d-iphone
_projectilesDestroyed++;
if&(_projectilesDestroyed&&&30)
&&GameOverScene&*gameOverScene&=&[GameOverScene&node];
&&[gameOverScene.layer.label&setString:@"You&Win!"];
&&[[CCDirector&sharedDirector]&replaceScene:gameOverScene];
与之匹配的是失败条件:任何一个反派小兵穿越了屏幕的最左边,你就挂了。于是修改spriteMoveFinished方法,在if (sprite-&getTag() == 1)条件里面增加“You Lose”的代码:
//&cpp&with&cocos2d-x
GameOverScene&*gameOverScene&=&GameOverScene::node();
gameOverScene-&getLayer()-&getLabel()-&setString("You&Lose&:[");
CCDirector::getSharedDirector()-&replaceScene(gameOverScene);
//&objc&with&cocos2d-iphone
GameOverScene&*gameOverScene&=&[GameOverScene&node];
[gameOverScene.layer.label&setString:@"You&Lose&:["];
[[CCDirector&sharedDirector]&replaceScene:gameOverScene];
最后编译并运行整个游戏项目,这样你就可以听到带头大哥扔飞镖同时很嚣张地发出的DIU~DIU~的声音,还有很HIGH的背景音乐循环播放;另一方面,游戏赢或输了会有一个界面提示。
这个游戏至此,已经在模拟器上100%完成了。下一篇我们讲如何做交叉编译成linux版本(也就是Uphone真机运行的版本), 如何打包图片和音乐资源到程序二进制中防止被拷贝、以及如何用制作成Uphone安装包发布。
著作权声明:本文由原创,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!&|||||音乐喷泉下载
您的位置:&&&音乐喷泉
游戏大小:32MB
游戏语言:英文
游戏类别:其它游戏
更新时间: 14:00:19
游戏授权:免费
运行环境:XP/Win7/Vista/Win8
随着美妙的钢琴节奏,各种各样形状的物体从白线上喷发出来,你要做的就是移动圆圈,把喷出来的物体吃掉,从而得分。游戏成功的把音乐节奏与画面有机的结合起来,这一特性很吸引人:节奏越平缓,喷出的形状就越少,形状的运动也越平缓;节奏越急促,喷出的形状就越多,运动也更加迅速。整个游戏伴着音乐开始和结束,一个回合大概会持续5分钟左右。轻松美妙的音乐、随着节奏喷发的各种形状,使得这个游戏不仅耐玩,而且能使你在玩的同时放松身心。工作累了?暂停一下,玩玩这个小家伙吧!
软件无法下载或下载后无法使用,请点击报错,谢谢!
请描述您所遇到的错误,我们将尽快予以修正,谢谢!
*必填项,请输入内容
想必各位都玩过跳舞机,随着节拍进行游戏的感觉棒极了,这也是网游劲舞团和劲乐团能火极一时的原因,好听的音乐,漂亮的画面再加上易于上手难于精通的特性,音乐游戏想不火都难。而很多朋友都想玩音乐游戏电脑板,却苦于找不到...
本类下载排行
本类精品游戏推荐
类型:其它游戏
语言:英文
大小:82.6KB
介绍:整体游戏图象表现出精美的卡通效果,各种物品的设计和摆放都十分考究。画面刻画细腻,写实风格的背景图展现出神奇的异域美景,以及神秘的机器装置都会引起人们探究的兴趣。&
类型:其它游戏
语言:英文
大小:29.7MB
介绍:现在你就要开是你的西部冒险了.你将要与干渴、饥饿,强盗作斗争~当然当地的友善的印帝安土著人也会帮助你,您能变得富有只要发现金矿,或在酒吧赌博,您能喝一杯酒防止干渴。 &你必须
类型:其它游戏
语言:英文
大小:21.9MB
介绍:小熊史努伊是个捕鱼高手,捕到了好多鱼储存。它的猫邻居们却没有那么好的捕鱼技术,但是猫们的偷鱼技巧却是一流的,史努伊和它的巡逻狗要保护好鱼很困难啊,请你帮它一起保护这些鱼吧
类型:其它游戏
语言:英文
大小:24.6MB
介绍:起司老鼠大冒险玛丽类的游戏,画面颇有些凹凸感。
类型:其它游戏
语言:英文
大小:69.2MB
介绍:Michael Todd Games制作,Yazar Media Group LLC发行,《电子超快感(Electronic Super Joy)》的续作,一款节奏旋律都非常优秀的音乐类游戏。
类型:其它游戏
语言:简体中文
大小:1.84GB
介绍:中文名称:神秘岛III放逐英文名称:MystIII:Exile游戏类型:解谜游戏制作:CyanWorlds游戏发行:UbiSoftEntertainment发行时间:2003年语言:中文地区:欧美【游戏介绍】&&《神秘岛III》的魅力主
类型:其它游戏
语言:简体中文
大小:782MB
介绍:游戏名称:朱丽亚游戏类型:冒险解谜  游戏制作:CardboardBoxEntertainment  游戏发行:LaceMambaGlobal  游戏语言:中文游戏平台:PC&【游戏介绍】&&&游戏运行说明:&&&由于游}

我要回帖

更多关于 cocos2dx try catch 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信