Cocos2D-X系列之RPG橫版過關遊戲完整版實例-2

  以下爲幾個使player運動的函數的實現

/*

void HelloWorld::pmhcollision()                                                  //

{

    CCPoint playerpoint = player->getPosition();

    //獲得玩家的方位

    CCSize playersize = player->getContentSize();

    //獲得玩家圖片的尺寸

    CCTMXTiledMap* map = (CCTMXTiledMap*) getChildByTag(kTagTileMap);      //獲得地圖屬性

    int indexx,indexy;

    char mch[256];

    CCTMXLayer* layer = map->layerNamed("logic");

    //獲得tmx地圖的logic層的layer

    for(int playery = playerpoint.y - playersize.height;playery <= playerpoint.y;playery ++)

    {//轉換爲tile座標

       indexx = (playerpoint.x - playersize.width / 2) / map->getTileSize().width;//

       indexy = (playerpoint.y) / map->getTileSize().height;

       CCPoint playerindex = ccp(indexx,indexy);

       int tilegid = layer->tileGIDAt(playerindex); //獲取此方位的tilegidtiled定義的圖片編號)

       if(tilegid > 0)

       {

          CCMutableDictionary<string,CCString *> *tiledic = map->propertiesForGID(tilegid);

          //獲取tilegid上的properties的屬性

          CCString *mvalue = tiledic->objectForKey("collion");

           //string轉爲int

          int mv = mvalue->toInt();                                              //

          if(mv == 2)

          {

             xVel = 0;

             playerpoint.x = (indexx + 1) * map->getTileSize().width + playersize.width / 2;

             player->setPosition(playerpoint);//刷新player座標

          }

          return;

       }

       indexx = (playerpoint.x + playersize.width / 2 - 1) / map->getTileSize().width;//

       indexy = (playerpoint.y) / map->getTileSize().height;

       playerindex = ccp(indexx,indexy);                                          //

       tilegid = layer->tileGIDAt(playerindex);

       if(tilegid > 0)

       {

          CCMutableDictionary<string,CCString *> *tiledic = map->propertiesForGID(tilegid);

          CCString *mvalue = tiledic->objectForKey("collion");

          int mv = mvalue->toInt();                                               //

          if(mv == 2)

          {

             xVel= 0;

             playerpoint.x = (indexx) * map->getTileSize().width - playersize.width / 2;

             player->setPosition(playerpoint);

          }

          return;

       }

    }

}

void HelloWorld::pmvcollision()                                                    //

{

    CCPoint playerpoint = player->getPosition();

    CCSize playersize = player->getContentSize();

    CCTMXTiledMap* map = (CCTMXTiledMap*) getChildByTag(kTagTileMap);              //

    int indexx,indexy;

    CCTMXLayer* layer = map->layerNamed("logic");                                  //

    indexx = (playerpoint.x) / map->getTileSize().width;                           //

    indexy = map->getMapSize().height - (playerpoint.y) / map->getTileSize().height;

    CCPoint playerindex = ccp(indexx,indexy);

    int tilegid = layer->tileGIDAt(playerindex);                                   //

    if(tilegid > 0)

    {

       CCMutableDictionary<string,CCString *> *tiledic = map->propertiesForGID(tilegid);

       CCString *mvalue = tiledic->objectForKey("collion");                        //

       int mv = mvalue->toInt();

       if(mv == 1)                                                                 //

       {

           if(yVel < 0)

           {

 

               xVel = 0;

               yVel = 0;

               jump=true;

               playerpoint.y = (map->getMapSize().height - indexy) * map->getTileSize().height;

               player->setPosition(playerpoint);                                    //

           }

           return;

       }

    }

    if(yVel>0)

    {

        jump=false;

    }

 

    yVel -= 0.1;

   

}

*/

Cocos2dx完美支持tiled製作的tmx格式圖片,此格式爲tilemap圖片,方便了場景的製作,降低了工作量。

Player的準備工作已完成,接下來就開始讓player人物動起來

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章