Hi,推荐文件给你 "碰撞检测例子.zip" http://vdisk.weibo.com/s/J6Ld-
新建一个工程,之后再一个类HudLayer
HudLayer.h
#include "cocos2d.h" USING_NS_CC; class HudLayer:public CCLayer { public: CREATE_FUNC(HudLayer); bool init(); //调用的方法 void start(); };
HudLayer.cpp
bool HudLayer::init() { bool pRet = false; do { CC_BREAK_IF(!CCLayer::init()); //设置一个按钮 CCMenuItemImage* start = CCMenuItemImage::create("Icon-72.png", "Icon-72.png", this, menu_selector(HudLayer::start)); start->setPosition(ccp(100, 100)); CCMenu* pMenu = CCMenu::create(start,NULL); this->addChild(pMenu); pRet = true; } while (0); return pRet; }
void HudLayer::start() { //发送一条消息调用相应的方法 CCNotificationCenter::sharedNotificationCenter()->postNotification("change"); }
接下来,我们要对HelloWorldScene.h做如下修改
#include "HudLayer.h" USING_NS_CC; class HelloWorld : public cocos2d::CCLayerColor { public: // Method 'init' in cocos2d-x returns bool, instead of 'id' in cocos2d-iphone (an object pointer) virtual bool init(); // there's no 'id' in cpp, so we recommend to return the class instance pointer static cocos2d::CCScene* scene(); HelloWorld(); CCArray* _arr; HudLayer* hud; void change(); // preprocessor macro for "static create()" constructor ( node() deprecated ) CREATE_FUNC(HelloWorld); };
//注册一条消息,在HudLayer类中发送的消息 CCNotificationCenter::sharedNotificationCenter()->addObserver(this, callfuncO_selector(HelloWorld::change), "change", NULL); CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteFrameCache(); cache->addSpriteFramesWithFile("zzzz.plist"); CCSpriteBatchNode* node = CCSpriteBatchNode::create("zzzz.pvr.ccz"); this->addChild(node); _arr = CCArray::create(); _arr->retain(); CCSprite* player = CCSprite::createWithSpriteFrameName("Player.png"); player->setPosition(ccp(100, 100)); node->addChild(player); _arr->addObject(player); hud = HudLayer::create(); this->addChild(hud); return true; } void HelloWorld::change() { CCSprite* player1 = (CCSprite*)_arr->objectAtIndex(0); CCMoveBy* moBy = CCMoveBy::create(1, ccp(0, 100)); player1->runAction(moBy); }