cocos2dx游戏 地图
- #include "HelloWorld.h"
- USING_NS_CC;
- CCScene* MyHelloWorld::scene()
- {
- // 'scene' is an autorelease object
- CCScene *scene = CCScene::create();
- // 'layer' is an autorelease object
- MyHelloWorld *layer = MyHelloWorld::create();
- // add layer as a child to scene
- scene->addChild(layer);
- // return the scene
- return scene;
- }
- // on "init" you need to initialize your instance
- bool MyHelloWorld::init()
- {
- //////////////////////////////
- // 1. super init first
- if ( !CCLayer::init() )
- {
- return false;
- }
- initdefalut();
- initmap();
- return true;
- }
- void MyHelloWorld::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
- }
- void MyHelloWorld::initmap()
- {
- this->scheduleUpdate();
- map=CCTMXTiledMap::create("my.tmx");
- CCTMXObjectGroup* obj1= map->objectGroupNamed("object1");
- wall=map->layerNamed("wall");
- floor=map->layerNamed("floor");
- meta=map->layerNamed("meta");
- CCDictionary* dict=obj1->objectNamed("sprite");
- float x=dict->valueForKey("x")->floatValue();
- float y=dict->valueForKey("y")->floatValue();
- float width=dict->valueForKey("width")->floatValue();
- float height=dict->valueForKey("height")->floatValue();
- int i=dict->valueForKey("key")->intValue();
- sprite=CCSprite::create("Player.png");
- sprite->retain();
- sprite->setAnchorPoint(ccp(0,0));
- sprite->setPosition(ccp(x,y));
- this->addChild(map,10,1);
- map->addChild(sprite,0);
- CCLOG("%d",map->getChildren()->count());
- CCLOG("%d",floor->getZOrder());CCLOG("%d",wall->getZOrder());
- CCLOG("%d",meta->getZOrder());
- CCLOG("%d",sprite->getZOrder());
- CCLOG("%f.%f,%d",x,y,i);
- CCLOG("%f.%f,%d",width,height,i);
- }
- void MyHelloWorld::initdefalut()
- {
- 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(MyHelloWorld::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, 20);
- /////////////////////////////
- // 3. add your codes below...
- // add a label shows "Hello World"
- // create and initialize a label
- CCLabelTTF* pLabel = CCLabelTTF::create("Hello World", "", 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);
- }
- void MyHelloWorld::onEnter()
- {
- CCLayer::onEnter();
- CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,0,false);
- }
- bool MyHelloWorld::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
- {
- CCPoint pointtemp= pTouch->getLocation(); //返回的是相当屏的本地坐标
- CCPoint touchPoint= this->convertTouchToNodeSpace(pTouch); //返回的是相对layer
- CCLOG("pointtemp:%f,%f",pointtemp.x,pointtemp.y);
- CCLOG("touchPoint:%f,%f",touchPoint.x,touchPoint.y);
- //
- ////图块的惟一标识
- //
- //CCPoint mapTieldPoint=getTileCoordinate(point);
- //CCLOG("mapTieldPoint:%f,%f",mapTieldPoint.x,mapTieldPoint.y);
- //CCSize contentSize=map->getContentSize();
- //CCLOG("contentSize:%f,%f",contentSize.width,contentSize.height);
- //unsigned int tieldGid=floor->tileGIDAt(mapTieldPoint);
- //if(tieldGid!=0){
- // CCDictionary* dict=wall->propertiesForGID(tieldGid);
- // if(dict!=NULL){
- // /*int keyvalue=dict->valueForKey("key")->intValue();
- // CCLOG("keyvalue%d",keyvalue);
- // if(keyvalue==100){*/
- // return true;
- // //}
- // }
- //}
- CCPoint playerPoint = sprite->getPosition();
- CCLOG("playerPoint:%f,%f",playerPoint.x,playerPoint.y);
- CCPoint diff = ccpSub(touchPoint, playerPoint);
- if (abs(diff.x) > abs(diff.y))
- {
- if (diff.x > 0)
- {
- playerPoint.x += map->getTileSize().width;
- }
- else
- {
- playerPoint.x -= map->getTileSize().width;
- }
- }
- else
- {
- if (diff.y > 0 )
- {
- playerPoint.y += map->getTileSize().height;
- }
- else
- {
- playerPoint.y -= map->getTileSize().height;
- }
- }
- setPlayerPosition(playerPoint);
- setViewpointCenter(playerPoint);
- return true;
- }
- MyHelloWorld::~MyHelloWorld()
- {
- sprite->release();
- }
- void MyHelloWorld::update(float)
- {
- /*CCLOG("update");
- float x,y;
- sprite->getPosition(&x,&y);
- CCLOG("%f,%f",x,y);*/
- }
- /************************************************************************/
- /* 參数是精灵的位置 */
- /************************************************************************/
- void MyHelloWorld::setViewpointCenter(CCPoint& position) {
- CCSize winSize = CCDirector::sharedDirector()->getWinSize();
- int x = MAX(position.x, winSize.width / 2);
- int y = MAX(position.y, winSize.height / 2);
- x = MIN(x, map->getMapSize().width * map->getTileSize().width - winSize.width / 2);
- y = MIN(y, map->getMapSize().height *map->getTileSize().height- winSize.height/2);
- CCPoint actualPosition = ccp(x, y);
- CCPoint centerOfView = ccp(winSize.width/2, winSize.height/2);
- CCPoint viewPoint = ccpSub(centerOfView, actualPosition);
- CCLOG("viewPoint:%f,%f",viewPoint.x,viewPoint.y);
- this->setPosition(viewPoint);
- /*CCSize winSize = CCDirector::sharedDirector()->getWinSize();
- int x = MAX(position.x, winSize.width / 2);
- int y = MAX(position.y, winSize.height / 2);
- x = MIN(x, map->getTileSize().width * map->getMapSize().height - winSize.width / 2);
- y = MIN(y, map->getTileSize().height * map->getMapSize().height - winSize.height / 2);
- CCPoint acutalPoint = ccp(x, y);
- CCPoint centerOfView = ccp(winSize.width / 2, winSize.height / 2);
- CCPoint ViewOfPoint = ccpSub(centerOfView, acutalPoint);
- this->setPosition(ViewOfPoint);*/
- }
- CCPoint MyHelloWorld::getTileCoordinate(CCPoint& point){
- float width=map->getTileSize().width;
- float height=map->getTileSize().height;
- CCLOG("getContentSize:%f",map->getContentSize().height);
- CCPoint re=ccp((int)(point.x/width),(int)((map->getContentSize().height-point.y)/height));
- return re;
- }
- /************************************************************************/
- /* position 目标点 相对于layer的 */
- /************************************************************************/
- void MyHelloWorld::setPlayerPosition(cocos2d::CCPoint position)
- {
- CCPoint tileCoord2 = this->tileCoordForGid(position);
- CCPoint tileCoord = this->getTileCoordinate(position);
- CCLOG("tileCoord:%f,%f",tileCoord.x,tileCoord.y);
- CCLOG("tileCoord2:%f,%f",tileCoord2.x,tileCoord2.y);
- int theGid = meta->tileGIDAt(tileCoord);
- if (theGid)
- {
- CCLOG("gid:%d",theGid);
- CCDictionary* properties = map->propertiesForGID(theGid);
- if (properties)
- {
- CCSprite* tempSprite=meta->tileAt(tileCoord);
- CCLOG("%d,",tempSprite->getZOrder());
- CCLOG("%d,",sprite->getZOrder());
- //sprite->setZOrder(0);
- //const CCString* str = properties->valueForKey("key");
- //CCLOG("STR:%d",str->intValue());
- //if (str && str->compare("200") == 0)
- ////if (str !=NULL)
- //{
- // return;
- //}
- /*const CCString* tempstr = properties->valueForKey("Eat");
- if (tempstr && tempstr->compare("true") == 0)
- {
- _numCollected++;
- _hud->numCollectedChanged(_numCollected);
- _meta ->removeTileAt(tileCoord);
- _foodLayer->removeTileAt(tileCoord);
- }*/
- }
- }
- //else{sprite->setZOrder(11);}
- sprite->setPosition(position);
- }
- /************************************************************************/
- /返回的要转成int */
- /************************************************************************/
- CCPoint MyHelloWorld::tileCoordForGid(CCPoint position)
- {
- int x = position.x / map->getTileSize().width;
- CCLOG("tiled:%f",map->getMapSize().height * map->getTileSize().height);
- int y = ((map->getMapSize().height * map->getTileSize().height) - position.y) / map->getTileSize().height ;
- return ccp(x, y);
- }
cocos2dx游戏 地图的更多相关文章
- [转]eoe社区cocos2d-x游戏引擎知识大汇总
[eoeAndroid 社区]特意为大家汇总了cocos2d-x知识贴,分量十足,纯正干或.从基础教程到游戏应用的开发,我们不让知识流失,我们要做知识的搬运工还有加工 师.希望大家能够一起的学习,和大 ...
- Cocos2dx游戏开发系列笔记13:一个横版拳击游戏Demo完结篇
懒骨头(http://blog.csdn.net/iamlazybone QQ:124774397 ) 写下这些东西的同时 旁边放了两部电影 周星驰的<还魂夜> 甄子丹的<特殊身份& ...
- 【Cocos2d-x游戏引擎开发笔记(25)】XML解析
原创文章,转载请注明出处:http://blog.csdn.net/zhy_cheng/article/details/9128819 XML是一种非常重要的文件格式,由于C++对XML的支持非常完善 ...
- 15款Cocos2d-x游戏源码
(1)用cocos2d-x开发的中国象棋游戏源码 使用Cocos2d-X2.2.3开发的一款中国象棋游戏,游戏中可以实现.新局面.悔棋.游戏音乐.胜利后会显示游戏结果. 源码下载:http://www ...
- 【COCOS2DX-LUA 脚本开发之一】在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途!
[COCOS2DX-LUA 脚本开发之一]在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途! 分类: [Cocos2dx Lua 脚本开发 ] 2012-04-1 ...
- 转载:Cocos2D-x 游戏接入 Windows 设备所需做的六件事
原文地址:http://msopentech.com/zh-hans/blog/2014/05/09/cocos2d-x-%E6%B8%B8%E6%88%8F%E6%8E%A5%E5%85%A5-wi ...
- cocos2d-x游戏是怎么跑起来的
虽然cocos2d-x v3.0 alpha版已经出来了,也改进了不少,有兴趣的可以去尝尝鲜.因为后面可能还会配合cocoStudio写一下博客,而现在v1.0.0.0版本需要配合cocos2d-x ...
- cocos2d-x游戏开发实战原创视频讲座系列1之2048游戏开发
cocos2d-x游戏开发实战原创视频讲座系列1之2048游戏开发 的产生 视持续更新中.... 视频存放地址例如以下:http://ipd.pps.tv/user/1058663622 ...
- Cocos2d-x游戏中默认的AndroidManifest.xml的解析
直接上代码说明: <?xml version="1.0" encoding="utf-8"? > <!-- xmlns:android=&qu ...
随机推荐
- SQL常用语句|创建表,设置主键......
新建表 create table [表名]([自动编号字段] int IDENTITY (1,1) PRIMARY KEY ,[字段1] nVarChar(50) default \'默认值\' nu ...
- 解决虚拟机安装tomcat主机访问不到
在wmware中安装linux后安装好数据库,JDK及tomcat后启动服务,虚拟机中可以访问,但是主机却无法访问,但是同时主机和虚拟机之间可以ping的通.解决方法是关闭虚拟机中的防火墙服务.桌面- ...
- 【spring boot】集成了druid后,同样的mybatis模糊查询语句出错Caused by: com.alibaba.druid.sql.parser.ParserException: syntax error, error in :'name LIKE '%' ? '%'
druid版本是 <!-- https://mvnrepository.com/artifact/com.alibaba/druid 数据库连接池--> <dependency> ...
- hdu4099 Revenge of Fibonacci
题意:给定fibonacci数列,输入前缀,求出下标.题目中fibonacci数量达到100000,而题目输入的前缀顶多为40位数字,这说明我们只需要精确计算fibinacci数前40位即可.查询时使 ...
- tmux用法
列出所有的tmux session,一个session是多个窗口的集合 tmux list-session 创建tmux窗口, tmux new -s server server为tmux的sess ...
- C# HttpWebRequest 绝技 【转】
原文地址:http://www.sufeinet.com/thread-6-1-1.html 在线测试工具http://www.sufeinet.com/thread-3690-1-1.html c# ...
- Chromatix
1.Lens Rolloff Correction 透镜衰减矫正 The Lens Rolloff correction takes into account the fact that,with ...
- Nginx auto_index和auth_basic
Nginx auto_index和auth_basic 1.nginx auto_index nginx站点目录浏览功能,默认情况下为关闭 启用或禁用目录列表输出 开启这个功能的前提是站点目录下没有首 ...
- [Angular] ngPlural
The usecase is very simple: <div [ngPlural]="items.length"> <ng-template ngPlural ...
- Angular 学习笔记——$http
<!DOCTYPE HTML> <html ng-app="myApp"> <head> <meta http-equiv="C ...