Tiled之跑酷游戏地图设计(金币 + 地图滚动 )
来源:互联网 发布:淘宝卖家中心联系电话 编辑:程序博客网 时间:2024/06/08 19:44
<1>数据成员。
public:void mapScroll(CCPoint touchPoint); //地图滚动void update(float dt); //更新void itTiled(); //初始化地图bool isExistTiled(CCPoint position); //得到点击点所对应的砖块位置是否有砖块void testCrashHeroWithCoin(); //英雄和金币碰撞检测public:CC_SYNTHESIZE(CCTMXTiledMap*, _map, Map); //地图CC_SYNTHESIZE(CCTMXLayer*, _crashLayer, CrashLayer); //碰撞检测层CC_SYNTHESIZE(CCPoint, _viewPoint, ViewPoint); //地图视图坐标点CC_SYNTHESIZE(CCSprite*, _hero, Hero); //英雄主角CC_SYNTHESIZE(CCArray*, _coinArray, CoinArray); //金币数据存储<2>实现。
bool HelloWorld::init(){ ////////////////////////////// // 1. super init first if ( !CCLayer::init() ) { return false; } CCSize size = CCDirector::sharedDirector()->getWinSize();_map = CCTMXTiledMap::create("MyTiaoTest.tmx");addChild(_map); _crashLayer = getMap()->layerNamed("crashLayer"); _viewPoint = ccp(size.width/2, size.height/2);_hero = CCSprite::create("noodledie.png");_hero->setAnchorPoint(ccp(0.5f, 0));_hero->setPosition(ccp(20, 360));addChild(_hero);_hero->setScale(0.5f);_coinArray = CCArray::create();_coinArray->retain();itTiled();scheduleUpdate(); return true;}void HelloWorld::mapScroll(CCPoint touchPoint) //地图的滚动。{ CCSize winSize=CCDirector::sharedDirector()->getWinSize();int x=MAX(touchPoint.x, winSize.width/2);int y=MAX(touchPoint.y, winSize.height/2);x=MIN(x,(this->getMap()->getMapSize().width*this->getMap()->getTileSize().width)-winSize.width/2);y=MIN(y,(this->getMap()->getMapSize().height*this->getMap()->getTileSize().height)-winSize.height/2);CCPoint actualPosition=ccp(x,y);CCPoint centerOfView=ccp(winSize.width/2,winSize.height/2);CCPoint viewPoint=ccpSub(centerOfView,actualPosition); //v1 - v2 也就是第一个减去第二个this->setPosition(viewPoint);}void HelloWorld::update(float dt){_viewPoint = ccpAdd(_viewPoint, ccp(5, 0));getHero()->setPosition(ccpAdd(getHero()->getPosition(), ccp(5, 0)));mapScroll(_viewPoint);if(getHero()->getPositionY() > 0 && !isExistTiled(getHero()->getPosition())){getHero()->setPosition(ccpSub(getHero()->getPosition(), ccp(0, 5)));}else if(getHero()->getPositionY() == 0){getHero()->setPosition(ccpAdd(getHero()->getPosition(), ccp(0, 300)));}if(getHero()->getPositionX() >= getMap()->getContentSize().width - getHero()->getContentSize().width/2){unscheduleUpdate();}testCrashHeroWithCoin();}void HelloWorld::itTiled() //{CCTMXObjectGroup* group = getMap()->objectGroupNamed("coinLayer"); //对象层,比如金币什么的。CCArray* array = group->getObjects();CCObject* obj = NULL;CCARRAY_FOREACH(array, obj){CCDictionary* dic = dynamic_cast<CCDictionary*>(obj);float x = dic->valueForKey("x")->floatValue();float y = dic->valueForKey("y")->floatValue();CCSprite* sp = CCSprite::create("coin.png");sp->setPosition(ccpAdd(ccp(x, y), ccp(getMap()->getTileSize().width/2, getMap()->getTileSize().height/2)));addChild(sp);getCoinArray()->addObject(sp);}}bool HelloWorld::isExistTiled(CCPoint position) //一个普通的图层,里面可以用资源画上一些砖块{ int x = position.x / getMap()->getTileSize().width; int y = (getMap()->getContentSize().height - position.y) / getMap()->getTileSize().height; int flag = getCrashLayer()->tileGIDAt(CCPointMake(x, y));return flag != 0 ? true : false; } void HelloWorld::testCrashHeroWithCoin(){/*第一种方法/CCObject* obj = NULL;CCARRAY_FOREACH(getCoinArray(), obj){CCSprite* coin = dynamic_cast<CCSprite*>(obj);if(coin->boundingBox().intersectsRect(getHero()->boundingBox()))coin->removeFromParent();}//*///*/CCArray* coinDeleteArray = CCArray::create();CCObject* obj = NULL;CCARRAY_FOREACH(getCoinArray(), obj){CCSprite* coin = dynamic_cast<CCSprite*>(obj);if(coin->boundingBox().intersectsRect(getHero()->boundingBox()))coinDeleteArray->addObject(coin);}//*第二种方法/CCARRAY_FOREACH(coinDeleteArray, obj){CCSprite* coin = dynamic_cast<CCSprite*>(obj);getCoinArray()->removeObject(coin);coin->removeFromParent();}//*/}总结:金币在对象层coinLayer,而碰撞检测是在一个普通的图层crashLayer。
0 0
- Tiled之跑酷游戏地图设计(金币 + 地图滚动 )
- Tiled使用教程(游戏地图制作)
- libgdx 之 tiled地图
- cocos2d-x 游戏 之 Tiled Map Editor(地图编辑)
- mapwin和Tiled(游戏地图编辑器)使用指南
- Android游戏开发(二)精灵动画和Tiled地图
- 游戏地图编辑器Mappy,Tiled,TILE STUDIO
- Tiled Map(瓦片地图)
- 游戏背景之滚动地图背景(CCParallaxNode)的使用
- Tiled 地图编辑器之 tile坐标转换
- Tiled地图编辑器(二)功能点
- Cocos2dx-Tiled Map(瓦片地图)
- AndEngine Tiled地图编辑器
- cocoa2d tiled 地图编辑器
- tiled 地图编辑器 快捷键
- COCOS-Tiled地图坐标
- COCOS-Tiled地图编辑器
- COCOS-Tiled地图遮挡
- 我与C
- JS DOM 五角星的评分效果
- 【产品经理】沟通篇之如何与前端沟通
- ubuntu12.04用户登录后黑屏怎么办
- JS DOM 走马灯效果
- Tiled之跑酷游戏地图设计(金币 + 地图滚动 )
- 【产品经理】沟通篇之如何与前端沟通
- 黑马程序员——Java概述
- 【ACdream】Andrew Stankevich's Contest (22)
- 循环的时候坚持使用(signed) 的数据类型的变量作为循环变量
- 二叉排序树
- 10152 - ShellSort
- (美团网)两个字符串的最长公共子串
- 【axure手机原型】移动产品的设计思路谈