cocos2dx tiledmap 碰撞检测

bool HelloWorld::init()
{
    //////////////////////////////
    // 1. super init first
    if ( !CCLayer::init() )
    {
        return false;
    }

    CCSize winSize = CCDirector::sharedDirector()->getVisibleSize();
    CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();

    map=CCTMXTiledMap::create("1.tmx");
    addChild(map);

    CCTMXObjectGroup* objgroup=map->objectGroupNamed("objLayer");
    CCDictionary* dic=objgroup->objectNamed("hero");
    float x=dic->valueForKey("x")->floatValue();
    float y=dic->valueForKey("y")->floatValue();
    float id=dic->valueForKey("id")->floatValue();
    const char* idstr=dic->valueForKey("id")->getCString();
    CCLOG("%f %f %f",x,y,id);
    CCLOG(idstr);

    hero=CCSprite::create("hero.png");
    hero->setPosition(ccp(x,y));
    addChild(hero);

    CCMoveBy *move=CCMoveBy::create(2,ccp(winSize.width/2,-winSize.height/2));
    hero->runAction(move);
    schedule(schedule_selector(HelloWorld::judeCollion));
    return true;
}

void HelloWorld::judeCollion(float dt)
{
    if(hero!=NULL)
    {
        CCTMXLayer* collionLayer=map->layerNamed("collionLayer");
        CCPoint tilePos=positionToTid(hero->getPosition());
        if(collionLayer->tileGIDAt(tilePos))
        {
            CCLOG("collion");
            collionLayer->removeTileAt(tilePos);
        }
    }

}
CCPoint HelloWorld::positionToTid(CCPoint position)
{
    int x = position.x /map->getTileSize().width;
    int y = (map->getMapSize().height*map->getTileSize().height
        - position.y) /map->getTileSize().height;
    return ccp(x, y);
}
时间: 2024-12-24 04:40:15

cocos2dx tiledmap 碰撞检测的相关文章

Cocos2d-x 精灵碰撞检测(方法一)

声明函数碰撞检测函数,两个精灵和重写update bool isCollision( CCPoint p1,CCPoint p2,int w1,int h1,int w2,int h2 ); CCSprite *sp2; CCSprite *sp1; virtual void update(float delta); //重写触摸事件 virtual void registerWithTouchDispatcher(); virtual bool ccTouchBegan(CCTouch *pT

Cocos2d-x 精灵碰撞检测(方法二)

将"Cocos2d-x 精灵碰撞检测(方法一)" update函数修改一下. 使用精灵boundingBox函数获取直接精灵边界框, 不用自己计算精灵矩形大小了,还比较精确,然后调用intersectsRect计算2个精灵矩形是否存在交集. 代码: void HelloWorld::update(float delta) { //返回精灵边界框 CCRect cr1 = sp1->boundingBox(); CCRect cr2 = sp2->boundingBox();

cocos2dx[3.4](25)——瓦片地图TiledMap

[唠叨] 还记得我们小时候玩的小霸王里面的游戏吗?大部分都是基于Tile地图的游戏,如坦克大战.冒险岛.魂斗罗.吞食天地等.而在手游中,基于瓦片地图的游戏也很常见.如:<保卫萝卜>. 瓦片地图有专门的地图编辑器:Tiled Map Editor . 先给大家看个酷炫的图吧. 此图来自:http://blog.csdn.net/aa4790139/article/details/8135831 [参考] http://cn.cocos2d-x.org/tutorial/lists?id=70 

Cocos2d-x Tiled地图编辑器(二)精灵走动起来、碰撞检测

图: 程序代码: 头文件声明函数及变量 void registerWithTouchDispatcher(void); bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent); void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent); void setViewpointCenter(CCPoint position) ; void setSpritePoint(CCPoint position) ;

cocos2d-x ios游戏开发初认识(八) 触摸事件与碰撞检测

玩过植物大战僵尸都知道,要在草坪里放一朵向日葵或者其它的植物只需触摸那个植物将其拖入到想要摆放的位置,这其实就是这节要写的触摸事件.还可以发现当我们的僵尸出来的时候,我们的小豌豆会发子弹攻击僵尸,当子弹与僵尸碰撞的时候子弹自动消失,这就这节要说的碰撞检测. 下面具体看代码的实现: 做ios开发有触摸事件cocos2d同样也有 一.先覆写touch事件 .h文件 using namespace cocos2d; class MainScene:public CCLayer { private: v

实例介绍Cocos2d-x物理引擎:碰撞检测

碰撞检测是使用物理引擎的一个重要目的,使用物理引擎可以进行精确的碰撞检测,而且执行的效率也很高.在Cocos2d-x 3.x中使用事件派发机制管理碰撞事件,EventListenerPhysicsContact是碰撞事件监听器.碰撞检测相关的API我们在前面一节介绍过了,下面通过一个实例介绍碰撞检测的实现.这个实例的运行后的场景如图所示,当场景启动后,玩家可以触摸点击屏幕,每次触摸时候,就会在触摸点生成一个新的精灵,精灵的运行是自由落体运动.当这些精灵之间发生接触时候,它们的颜色被设置为黄色,分

cocos2dx A* + tiledMap

本文转自:http://blog.csdn.net/w18767104183/article/category/1757765 前面一章讲了cocos2dx 中使用A星算法 这章中讲 A*结合tiledmap 先看下效果图 图有点丑,忍受下 绿色的块 表示人物的行走的路线(A*算法的结果) 红色部分 表示A*算法搜寻过的点(越少,速度越快) 黑色的部分(其实是无色块,因为背景是黑色的) 表示障碍物 这张图是用tiledmap做出来的, 看看里面的内容 可以看到 我把不能通过的地区的图块给删了 t

实例介绍Cocos2d-x中Box2D物理引擎:碰撞检测

在Box2D中碰撞事件通过实现b2ContactListener类函数实现,b2ContactListener是Box2D提供的抽象类,它的抽象函数:virtual void BeginContact(b2Contact* contact).两个物体开始接触时会响应,但只调用一次.virtual void EndContact(b2Contact* contact).分离时响应.但只调用一次.virtual void PreSolve(b2Contact* contact, const b2Ma

Cocos2d-x教程(33)-三维物体AABB碰撞检测算法

欢迎加入Cocos2d-x 交流群:193411763 转载时请注明原文出处 :http://blog.csdn.net/u012945598/article/details/38870705 ---------------------------------------------------------------------------------------------------------------------------------------------------------