赞
踩
首先,项目工程来自于9秒社团,项目下载地址是:http://www.9miao.com/news/6/65041
要说明的一点是,以上地址下来之后需要修改一个入口,而且引擎最好用coco2dx 2.2这样一来,在修改了这个入口之后,代码无需再任何修改就可以直接运行了。如下:
- bool AppDelegate::applicationDidFinishLaunching() {
- // initialize director
- CCDirector* pDirector = CCDirector::sharedDirector();
- CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();
-
- pDirector->setOpenGLView(pEGLView);
-
- // turn on display FPS
- //pDirector->setDisplayStats(true);
-
- // set FPS. the default value is 1.0/60 if you don't call this
- pDirector->setAnimationInterval(1.0 / 60);
-
- // create a scene. it's an autorelease object
- //CCScene *pScene = HelloWorld::scene();
- CCScene *pScene = TollgateSceneOne::scene();
-
- // run
- pDirector->runWithScene(pScene);
-
- return true;
- }

从TollgateSceneOne.cpp开始讲起,一开始创建了一个场景scene对象,接着在init函数里做了一下几个操作:
CCNotificationCenter::sharedNotificationCenter()->addObserver(this,callfuncO_selector(TollgateSceneOne::dead),"dead",NULL);
我也是第一次接触这个,简单的来说,就是不同层之间的互相通信的问题吧,具体可以看这里:http://www.cnblogs.com/imoon/archive/2013/01/15/2860877.html,这里使用到了也可以参考下。
- void CCNotificationCenter::addObserver(CCObject *target,
- SEL_CallFuncO selector,
- const char *name,
- CCObject *obj)
- {
- if (this->observerExisted(target, name))
- return;
-
- CCNotificationObserver *observer = new CCNotificationObserver(target, selector, name, obj);
- if (!observer)
- return;
-
- observer->autorelease();
- m_observers->addObject(observer);
- }
讲要创建的对象以及回调,数据等放进 CCArray *m_observers对象中。在
- void CCNotificationCenter::postNotification(const char *name, CCObject *object)
- {
- CCArray* ObserversCopy = CCArray::createWithCapacity(m_observers->count());
- ObserversCopy->addObjectsFromArray(m_observers);
- CCObject* obj = NULL;
- CCARRAY_FOREACH(ObserversCopy, obj)
- {
- CCNotificationObserver* observer = (CCNotificationObserver*) obj;
- if (!observer)
- continue;
-
- if (!strcmp(name,observer->getName()) && (observer->getObject() == object || observer->getObject() == NULL || object == NULL))
- {
- if (0 != observer->getHandler())
- {
- CCScriptEngineProtocol* engine = CCScriptEngineManager::sharedManager()->getScriptEngine();
- engine->executeNotificationEvent(this, name);
- }
- else
- {
- observer->performSelector(object);
- }
- }
- }
- }

从数组对象中遍历找到对应的对象,然后执行对应的回调。成员函数registerScriptObserver一直没被调用,setHandler也一直没被调用?所以一直显示这里么。
添加地图到场景中
CCTMXTiledMap* map=CCTMXTiledMap::create("level1.tmx");
CCTMXLayer* groundLayer=map->layerNamed("sky");
this->addChild(map);
addPlayer实现的是m_mary->bindSprite(sprite);英雄绑定到地图中,并且用SimpleMoveController对象绑定在地图上的行走
for(int i=1;i<=5;i++)
{
CCSprite* sp1=CCSprite::createWithSpriteFrame(CCSpriteFrame::create("core.png",CCRectMake(0,0,30,27)));
m_money=Money::create();
m_money->bindSprite(sp1);
m_money->bindPlayer(m_mary);
CCTMXObjectGroup* objGroup1=map->objectGroupNamed("object");
CCDictionary* moneyPointDic=objGroup1->objectNamed(CCString::createWithFormat("MoneyPoint%d",i)->getCString());
float moneyX=moneyPointDic->valueForKey("x")->floatValue();
float moneyY=moneyPointDic->valueForKey("y")->floatValue();
m_money->setPosition(ccp(moneyX,moneyY));
map->addChild(m_money);
}
绑定金币在对应的地图中的位置,并且在money中每一帧检查是否与英雄碰撞,在update函数中进行了碰撞,如果碰撞了,改变分数,隐藏金币。
createRunBtn();createCore();两个函数分别初始化按钮的位置,创建旋转的金币。
最后效果图:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。