cocos2d小游戏---忍者吃西瓜
来源:互联网 发布:golang 统计文章字数 编辑:程序博客网 时间:2024/04/28 18:30
声明:本代码是跟着别人的教程走的,贴出来以便自己复习用,其他没有什么大用。
#ifndef __HELLOWORLD_SCENE_H__#define __HELLOWORLD_SCENE_H__#include "cocos2d.h"class HelloWorld : public cocos2d::CCLayer{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(); // a selector callback void menuCloseCallback(CCObject* pSender);//地图变量cocos2d::CCTMXTiledMap *tileMap;//忍者变量cocos2d::CCSprite *nijia;//障碍物层cocos2d::CCTMXLayer *flagLayer;//前景层cocos2d::CCTMXLayer *forgroundLayer;//积分标签cocos2d::CCLabelTTF *scoreBord;int _score;//模拟小人移动void MapMoveForward(cocos2d::CCPoint ForwardPos); // implement the "static node()" method manually CREATE_FUNC(HelloWorld);//触摸开始bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);//触摸中void ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);//触摸结束void ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);//移动视图void MoveView(cocos2d::CCPoint touchPos);//坐标转换cocos2d::CCPoint cocosCoord2TiledMapCoord(cocos2d::CCPoint cocosPoint);//是不是障碍物bool IsObstacles(cocos2d::CCPoint curPoint);//是不是西瓜bool IsXiGua(cocos2d::CCPoint curPoint);};#endif // __HELLOWORLD_SCENE_H__
#include "HelloWorldScene.h"#include "SimpleAudioEngine.h"USING_NS_CC;#define WIN_WIDTH (CCDirector::sharedDirector()->getVisibleSize().width)#define WIN_HEIGHT (CCDirector::sharedDirector()->getVisibleSize().height)#define MAP_WIDTH (tileMap->getMapSize().width * tileMap->getTileSize().width)#define MAP_HEIGHT (tileMap->getMapSize().height * tileMap->getTileSize().height)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");#elseCCDirector::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 ( !CCLayer::init() ) { return false; }//创建资源tileMap = CCTMXTiledMap::create("MyTileMap.tmx");//加载图层CCTMXLayer * backLayer = tileMap->layerNamed("BackMap");CCAssert(backLayer,"can not find layer BackMap");//加载地图this->addChild(tileMap);//前景层forgroundLayer = tileMap->layerNamed("forground");//获取障碍物层flagLayer = tileMap->layerNamed("flag_layer");flagLayer->setVisible(false);//找到忍者位置CCTMXObjectGroup *og = tileMap->objectGroupNamed("player");CCDictionary * posInfoDict = og->objectNamed("nijiaBirthPoint");int x = posInfoDict->valueForKey("x")->intValue();int y = posInfoDict->valueForKey("y")->intValue();//创建忍者nijia = CCSprite::create("Player.png");nijia->setAnchorPoint(ccp(0.5,0.5));nijia->setPosition(ccp(x,y));tileMap->addChild(nijia);//触摸事件触发器CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);//创建积分标签scoreBord = CCLabelTTF::create("score:0", "Arial", 30);scoreBord->setPosition(ccp(WIN_WIDTH-60,30));this->addChild(scoreBord);_score = 0;//播放背景音乐CocosDenshion::SimpleAudioEngine::sharedEngine()->playBackgroundMusic("TileMap.wav",true); return true;}//析构函数HelloWorld::~HelloWorld(){}//模拟小人移动void HelloWorld::MapMoveForward(cocos2d::CCPoint ForwardPos){//移动地图CCPoint srcPos = tileMap->getPosition();CCPoint newMapPos = srcPos + ForwardPos;//防止坐标超出边界newMapPos.x = newMapPos.x>0 ? 0 : newMapPos.x;newMapPos.x = newMapPos.x<WIN_WIDTH - MAP_WIDTH ? WIN_WIDTH - MAP_WIDTH : newMapPos.x;newMapPos.y = newMapPos.y>0 ? 0 : newMapPos.y;newMapPos.y = newMapPos.y<WIN_HEIGHT - MAP_HEIGHT ? WIN_HEIGHT - MAP_HEIGHT : newMapPos.y;tileMap->setPosition(newMapPos);}//触摸开始bool HelloWorld::ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){return true;}//触摸中void HelloWorld::ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){}//触摸结束void HelloWorld::ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){//触摸坐标CCPoint touchPos = pTouch->getLocation();//移动视图MoveView(touchPos);}//移动视图void HelloWorld::MoveView(cocos2d::CCPoint touchPos){//检验忍者坐标CCPoint ninAbsPoint = nijia->convertToWorldSpace(ccp(0,0));//判断忍者移动方向if (abs(touchPos.x - ninAbsPoint.x) > abs(touchPos.y - ninAbsPoint.y))//横向移动{if (touchPos.x - ninAbsPoint.x > 0){//障碍物检测if (!IsObstacles(ccp(nijia->getPositionX() + tileMap->getTileSize().width, nijia->getPositionY()))){//检测西瓜if (IsXiGua(ccp(nijia->getPositionX() + tileMap->getTileSize().width, nijia->getPositionY()))){//清除图层forgroundLayer->removeTileAt(cocosCoord2TiledMapCoord(ccp(nijia->getPositionX() + tileMap->getTileSize().width, nijia->getPositionY())));flagLayer->removeTileAt(cocosCoord2TiledMapCoord(ccp(nijia->getPositionX() + tileMap->getTileSize().width, nijia->getPositionY())));//分值变化_score += 1;char scoreStr[20];sprintf(scoreStr, "score : %d", _score);scoreBord->setString(scoreStr);//播放吃西瓜音乐CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("pickup.wav");}//忍者向右移动nijia->setPosition(ccp(nijia->getPositionX() + tileMap->getTileSize().width, nijia->getPositionY()));if (ninAbsPoint.x >= WIN_WIDTH/2)//地图向左移动{MapMoveForward(ccp(- tileMap->getTileSize().width, 0));}//播放移动音乐CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("move.wav");}}else if(touchPos.x - ninAbsPoint.x < 0){//障碍物检测if (!IsObstacles(ccp(nijia->getPositionX() - tileMap->getTileSize().width, nijia->getPositionY()))){//检测西瓜if (IsXiGua(ccp(nijia->getPositionX() - tileMap->getTileSize().width, nijia->getPositionY()))){//清除图层forgroundLayer->removeTileAt(cocosCoord2TiledMapCoord(ccp(nijia->getPositionX() - tileMap->getTileSize().width, nijia->getPositionY())));flagLayer->removeTileAt(cocosCoord2TiledMapCoord(ccp(nijia->getPositionX() - tileMap->getTileSize().width, nijia->getPositionY())));//分值变化_score += 1;char scoreStr[20];sprintf(scoreStr, "score : %d", _score);scoreBord->setString(scoreStr);//播放吃西瓜音乐CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("pickup.wav");}//忍者移动nijia->setPosition(ccp(nijia->getPositionX() - tileMap->getTileSize().width, nijia->getPositionY()));if (ninAbsPoint.x <= WIN_WIDTH/2 )//地图向右移动{MapMoveForward(ccp(tileMap->getTileSize().width, 0));}//播放移动音乐CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("move.wav");}}}else//纵向移动{if (touchPos.y - ninAbsPoint.y > 0){//障碍物检测if (!IsObstacles(ccp(nijia->getPositionX(), nijia->getPositionY() + tileMap->getTileSize().width))){//检测西瓜if (IsXiGua(ccp(nijia->getPositionX(), nijia->getPositionY() + tileMap->getTileSize().width))){//清除图层forgroundLayer->removeTileAt(cocosCoord2TiledMapCoord(ccp(nijia->getPositionX(), nijia->getPositionY() + tileMap->getTileSize().width)));flagLayer->removeTileAt(cocosCoord2TiledMapCoord(ccp(nijia->getPositionX(), nijia->getPositionY() + tileMap->getTileSize().width)));//分值变化_score += 1;char scoreStr[20];sprintf(scoreStr, "score : %d", _score);scoreBord->setString(scoreStr);//播放吃西瓜音乐CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("pickup.wav");}//忍者移动nijia->setPosition(ccp(nijia->getPositionX(), nijia->getPositionY() + tileMap->getTileSize().width));if (ninAbsPoint.y >= WIN_HEIGHT/2)//地图向下移动{MapMoveForward(ccp(0, -tileMap->getTileSize().height));}}}else if(touchPos.y - ninAbsPoint.y < 0){//障碍物检测if (!IsObstacles(ccp(nijia->getPositionX(), nijia->getPositionY() - tileMap->getTileSize().width))){//检测西瓜if (IsXiGua(ccp(nijia->getPositionX(), nijia->getPositionY() - tileMap->getTileSize().width))){//清除图层forgroundLayer->removeTileAt(cocosCoord2TiledMapCoord(ccp(nijia->getPositionX(), nijia->getPositionY() - tileMap->getTileSize().width)));flagLayer->removeTileAt(cocosCoord2TiledMapCoord(ccp(nijia->getPositionX(), nijia->getPositionY() - tileMap->getTileSize().width)));//分值变化_score += 1;char scoreStr[20];sprintf(scoreStr, "score : %d", _score);scoreBord->setString(scoreStr);//播放吃西瓜音乐CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("pickup.wav");}//忍者移动nijia->setPosition(ccp(nijia->getPositionX(), nijia->getPositionY() - tileMap->getTileSize().width));if (ninAbsPoint.y <= WIN_HEIGHT/2)//地图向上移动{MapMoveForward(ccp(0, tileMap->getTileSize().height));}//播放移动音乐CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("move.wav");}}}}//坐标转换cocos2d::CCPoint HelloWorld::cocosCoord2TiledMapCoord(cocos2d::CCPoint cocosPoint){CCPoint tiledMapPoint;tiledMapPoint.x = (int)(cocosPoint.x / tileMap->getTileSize().width);tiledMapPoint.y = (int)((MAP_HEIGHT - cocosPoint.y) / tileMap->getTileSize().height);return tiledMapPoint;}//是不是障碍物bool HelloWorld::IsObstacles(cocos2d::CCPoint curPoint){bool isObstacles = false;//坐标转换CCPoint tileMapPoint = cocosCoord2TiledMapCoord(curPoint);//瓦片 I Dint tiledID = flagLayer->tileGIDAt(tileMapPoint);if (tiledID==0) return false;//获取瓦片所有属性CCDictionary *tileProperty = tileMap->propertiesForGID(tiledID);const CCString *collideStr = tileProperty->valueForKey("collide");//检测属性是否为trueif (collideStr->compare("true") == 0){isObstacles = true;}return isObstacles;}//是不是西瓜bool HelloWorld::IsXiGua(cocos2d::CCPoint curPoint){bool isXiGua = false;//坐标转换CCPoint tileMapPoint = cocosCoord2TiledMapCoord(curPoint);//瓦片 I Dint tiledID = flagLayer->tileGIDAt(tileMapPoint);if (tiledID==0) return false;//获取瓦片所有属性CCDictionary *tileProperty = tileMap->propertiesForGID(tiledID);const CCString *fruitStr = tileProperty->valueForKey("fruit");//检测属性是否为trueif (fruitStr->compare("xigua") == 0){isXiGua = true;}return isXiGua;}
0 0
- cocos2d小游戏---忍者吃西瓜
- 一个cocos2d小游戏
- [cocos2d demo]认字小游戏
- 西瓜
- 西瓜
- 第一次用cocos2d做小游戏
- 初学cocos2d-x记忆小游戏
- Android 打飞机小游戏 cocos2d
- cocos2d-x学习笔记2:小游戏
- cocos2d-x开发的第一个小游戏
- 基于cocos2d tileMap的一个小游戏
- 用cocos2d-x 编写连连看小游戏
- Cocos2d-x 瓦块地图小游戏 (一)Tiled
- Cocos2d-x格斗小游戏(九) 完结
- Cocos2d-X开发一个简单的小游戏
- 使用Cocos2d-X实现一个小游戏PhotoExhibition
- Cocos2d-X小游戏——别踩白块
- cocos2d-x小游戏——飞机大战
- XHTML基础
- IOS Block详解
- 黑马程序员——高新技术---Java基础-IO流_File类,递归思想
- 12345
- 简单实现标签切换效果
- cocos2d小游戏---忍者吃西瓜
- 暑假集训 第三周 STL I - Web Navigation网页导航
- JAVA-GUI练习实例,QQ登录界面
- [c]sdnuoj 1031 拓扑排序
- ZOJ 3885 The Exchange of Items
- 简说创业公司的技术选型,从BearyChat的开发说起
- Runtime Exception vs Exception
- 杭电 1896 Stones 队列 附题目翻译
- Struts2中result配置中常见的几种视图转发类型