cocos2d-x引擎版本是2.2.0
这篇博客其实不是给给人看的,只是给我自己看的,以便自己熟悉里面的代码
总共四个文件:
#ifndef __HELLOWORLD_SCENE_H__#define __HELLOWORLD_SCENE_H__#include "cocos2d.h"class HelloWorld : public cocos2d::cclayercolor{public: ~ HelloWorld(); // Here's a difference. Method 'init' in cocos2d-x returns bool,instead of returning 'ID' in cocos2d-iphone virtual bool init(); // there's no 'ID' in cpp,so we recommend returning the class instance pointer static cocos2d::CCScene* scene(); //小孩对象 cocos2d::CCSprite *player; //怪物对象 cocos2d::CCSprite *target; //怪物集合 cocos2d::CCArray *_targets; //飞镖集合 cocos2d::CCArray *_proJs; //击中次数 int _Shottimes; // a selector callback voID menuCloseCallback(CCObject* pSender); //按钮的响应 voID responseFunc(CCObject* obj); // implement the "static node()" method manually CREATE_FUNC(HelloWorld); voID mydefine(CCNode *who); voID CreateTarget(); voID gameLogic(float dt); voID cctouchesEnded(cocos2d::CCSet *ptouches,cocos2d::CCEvent *pEvent); voID update(float delta);};#endif // __HELLOWORLD_SCENE_H__
#include "HelloWorldScene.h"#include "SimpleAudioEngine.h"#include "GameOverLayer.h"USING_NS_CC;CCScene* HelloWorld::scene(){ // 'scene' is an autorelease object CCScene *scene = CCScene::create(); // 'layer' is an autorelease object HelloWorld *layer = HelloWorld::create(); // add layer as a child to scene scene->addChild(layer); // return the scene return scene;}voID HelloWorld::menuCloseCallback(CCObject* pSender){#if (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT) || (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) CcmessageBox("You pressed the close button. windows Store Apps do not implement a close button.","Alert");#else CCDirector::sharedDirector()->end();#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) exit(0);#endif#endif}// on "init" you need to initialize your instancebool HelloWorld::init(){ ////////////////////////////// // 1. super init first if ( !cclayercolor::initWithcolor(ccc4(0,255,255)) ) { return false; } // CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();// CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();// // /////////////////////////////// // 2. add a menu item with "X" image,which is clicked to quit the program// // you may modify it.// // // add a "close" icon to exit the progress. it's an autorelease object// CcmenuItemImage *pCloseItem = CcmenuItemImage::create(// "Closenormal.png",// "CloseSelected.png",// this,// menu_selector(HelloWorld::menuCloseCallback));// // pCloseItem->setposition(ccp(origin.x + visibleSize.wIDth - pCloseItem->getContentSize().wIDth/2,// origin.y + pCloseItem->getContentSize().height/2));// // // create menu,it's an autorelease object// Ccmenu* pMenu = Ccmenu::create(pCloseItem,NulL);// pMenu->setposition(CCPointZero);// this->addChild(pMenu,1);// // /////////////////////////////// // 3. add your codes below...// // // add a label shows "Hello World"// // create and initialize a label// // cclabelTTF* pLabel = cclabelTTF::create("Hello World","Arial",24);// // // position the label on the center of the screen// pLabel->setposition(ccp(origin.x + visibleSize.wIDth/2,// origin.y + visibleSize.height - pLabel->getContentSize().height));// // // add the label as a child to this layer// this->addChild(pLabel,1);// // // add "HelloWorld" splash screen"// CCSprite* pSprite = CCSprite::create("HelloWorld.png");// // // position the sprite on the center of the screen// pSprite->setposition(ccp(visibleSize.wIDth/2 + origin.x,visibleSize.height/2 + origin.y));// // // add the sprite as a child to this layer// this->addChild(pSprite,0); //屏幕大小 CCSize screenSize = CCDirector::sharedDirector()->getVisibleSize(); //添加小孩 player = CCSprite::create("Player.png"); player->setposition(ccp(0+20,screenSize.height/2)); this->addChild(player);// //菜单的使用// CcmenuItemImage* item = CcmenuItemImage::create("button2.png",// "button2.png",// this,// menu_selector(HelloWorld::responseFunc));// item->setposition(ccp(30,30));// Ccmenu *menu = Ccmenu::create(item,NulL);// this->addChild(menu);// // target = CCSprite::create("Target.png");// target->setposition(ccp(screenSize.wIDth -2,40));// this->addChild(target); //定时生成怪物 this->schedule(schedule_selector(HelloWorld::gameLogic),1); //检测碰撞 this->schedule(schedule_selector(HelloWorld::update)); //允许触屏 this->settouchEnabled(true); _targets = new cocos2d::CCArray; _proJs = new cocos2d::CCArray; //播放背景音乐 CocosDenshion::SimpleAudioEngine::sharedEngine()->playBackgroundMusic("background-music-aac.wav",true); //成员初始化 _Shottimes = 0; return true;}//屏幕触摸---发射飞镖voID HelloWorld::cctouchesEnded(CCSet *ptouches,CCEvent *pEvent){ //获得屏幕大小 CCSize screenSize = CCDirector::sharedDirector()->getVisibleSize(); //获得触摸点 CCtouch * touch = (CCtouch *)ptouches->anyObject(); CCPoint LocinVIEw = touch->getLocationInVIEw(); CCPoint loc = CCDirector::sharedDirector()->convertToGL(LocinVIEw); if (loc.x <= 20) { return; } //加载飞镖 CCSprite *proj = CCSprite::create("Projectile.png"); proj->setposition(ccp(20,screenSize.height/2.0)); this->addChild(proj); //播放飞镖音乐 CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("pew-pew-lei.wav"); //加入到飞镖数组 _proJs->addobject(proj); proj->setTag(2); double dx = loc.x -20; double dy = loc.y -screenSize.height / 2.0; double d = sqrt(dx * dx + dy * dy); //发射长度 double D = sqrt(screenSize.wIDth * screenSize.wIDth + screenSize.height * screenSize.height); double ratio = D / d; double endx = ratio * dx +20; double endy = ratio * dy + screenSize.height / 2.0; CCMoveto *move = CCMoveto::create(D / 320,ccp(endx,endy)); CCCallFuncN * moveFinish = CCCallFuncN::create(this,callfuncN_selector(HelloWorld::mydefine)); CCSequence *actions = CCSequence::create(move,moveFinish,NulL); proj->runAction(actions);}//定时器回调函数voID HelloWorld::gameLogic(float dt){ CreateTarget();}//创建会运行的怪物voID HelloWorld::CreateTarget(){ //获取屏幕宽度 CCSize screenSize = CCDirector::sharedDirector()->getVisibleSize(); int y = rand() % (int)(screenSize.height); //怪物精灵 CCSprite *target = CCSprite::create("Target.png"); target->setposition(ccp(screenSize.wIDth -2,y)); this->addChild(target); //加入到怪物数组 _targets->addobject(target); target->setTag(1); CCMoveto *move = CCMoveto::create(3,ccp(0,y)); CCCallFuncN *disapear = CCCallFuncN::create(this,disapear,NulL); target->runAction(actions);}//按钮响应voID HelloWorld::responseFunc(CCObject* obj){ //cclOG("button is pressed"); CCMoveto *move = CCMoveto::create(3,40)); CCCallFuncN *disapear = CCCallFuncN::create(this,NulL); target->runAction(actions);}//让怪物和飞镖消失voID HelloWorld::mydefine(CCNode *who){ who->removeFromParentAndCleanup(true); //销毁精灵 int tag = who->getTag(); if (tag == 1)//怪物消失 { _targets->removeObject(who); //切换到游戏结束场景 CCScene *gameOverScene = GameOverLayer::scene(); GameOverLayer *layer = (GameOverLayer*)gameOverScene->getChildByTag(100); layer->_lable->setString("Sorry,You Failed~!"); CCDirector::sharedDirector()->replaceScene(gameOverScene); } else if (tag == 2)//飞镖消失 { _proJs->removeObject(who); }}//析构函数HelloWorld::~HelloWorld(){ if (_proJs != NulL) { _proJs->release(); } if (_targets != NulL) { _targets->release(); }}//不停地检测碰撞事件voID HelloWorld::update(float delta){ //准备删除的临时集合 CCArray *toDelTarget = new CCArray; CCArray *toDelProj = new CCArray; CCObject *itarget,*iproj; //遍历所有怪物 CCARRAY_FOREACH(_targets,itarget) { CCSprite * target = (CCSprite*)itarget; CCRect targetZone = CCRectMake(target->getpositionX(),target->getpositionY(),target->getContentSize().wIDth,target->getContentSize().height); //遍历所有飞镖 CCARRAY_FOREACH(_proJs,iproj) { CCSprite * proj = (CCSprite*)iproj; CCRect projZone = CCRectMake(proj->getpositionX(),proj->getpositionY(),proj->getContentSize().wIDth,proj->getContentSize().height); //检查重合 if (projZone.intersectsRect(targetZone)) { toDelTarget->addobject(target); toDelProj->addobject(proj); //检测游戏结束 if (++_Shottimes == 5) { //切换到游戏结束场景 CCScene *gameOverScene = GameOverLayer::scene(); GameOverLayer *layer = (GameOverLayer*)gameOverScene->getChildByTag(100); layer->_lable->setString("Congratulations,You Succeed~!"); CCDirector::sharedDirector()->replaceScene(gameOverScene); } } } } //删除碰撞精灵 CCARRAY_FOREACH(toDelProj,iproj) { _proJs->removeObject(iproj); CCSprite * proj = (CCSprite*)iproj; proj->removeFromParentAndCleanup(true); } CCARRAY_FOREACH(toDelTarget,itarget) { _targets->removeObject(itarget); CCSprite * target = (CCSprite*)itarget; target->removeFromParentAndCleanup(true); }}
#pragma once#include "cocos2d.h"class GameOverLayer : public cocos2d::cclayercolor{public: GameOverLayer(voID); ~GameOverLayer(voID);public: bool init(); CREATE_FUNC(GameOverLayer); static cocos2d::CCScene* scene(); voID ReturnToGame(cocos2d::CCNode *node);public: cocos2d::cclabelTTF * _lable;};
#include "GameOverLayer.h"#include "HelloWorldScene.h"USING_NS_CC;GameOverLayer::GameOverLayer(voID){}GameOverLayer::~GameOverLayer(voID){ if (_lable) { _lable->release(); }}bool GameOverLayer::init(){ if (cclayercolor::initWithcolor(ccc4(0,255))) { _lable = cclabelTTF::create("word","Artial",40); CCSize size = CCDirector::sharedDirector()->getVisibleSize(); _lable->setposition(ccp(size.wIDth/2,size.height/2)); this->addChild(_lable); _lable->retain(); //再次切换到游戏 CCDelayTime *delay = CCDelayTime::create(5); CCCallFuncN * returnToGame = CCCallFuncN::create(this,callfuncN_selector(GameOverLayer::ReturnToGame)); this->runAction(CCSequence::create(delay,returnToGame,NulL)); return true; } return false;}//切换回游戏voID GameOverLayer::ReturnToGame(CCNode *node){ CCDirector::sharedDirector()->replaceScene(HelloWorld::scene());}//创建场景cocos2d::CCScene* GameOverLayer::scene(){ CCScene * scene = CCScene::create(); GameOverLayer *layer = GameOverLayer::create(); layer->setTag(100); scene->addChild(layer); return scene;}总结
以上是内存溢出为你收集整理的cocos2d-x学习之飞镖打妖怪全部内容,希望文章能够帮你解决cocos2d-x学习之飞镖打妖怪所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)