日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CCTMXTiledMap的使用

發布時間:2024/9/27 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CCTMXTiledMap的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


1 CCTMXTiledMap的使用

TileMap.h

#ifndef __T23TileMap_H__

#define __T23TileMap_H__

?

#include "cocos2d.h"

USING_NS_CC;

?

class TileMap :public CCLayer

{

public:

??? CREATE_FUNC(TileMap);

??? bool init();

??? static CCScene * scene();

?

??? CCTMXTiledMap* _map;

??? CCPoint Point2Tile(CCPoint ptGL);

??? CCPoint Tile2PointLB(CCPoint ptTile);

?

??? bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);

};

?

#endif

TileMap.cpp

#include "TileMap.h"

?

CCScene * TileMap::scene()

{

??? CCScene * scene = CCScene::create();

??? TileMap * layer = TileMap::create();

??? scene->addChild(layer);

??? return scene;

}

?

bool TileMap::init()

{

??? CCScene * scene = CCScene::create();

??? //初始化TMXTiledMap,要用一個.tmx

??? CCTMXTiledMap * map = CCTMXTiledMap::create("Round1.tmx");

??? addChild(map);

?

??? //獲得CCTMXLayer的層:layer_0

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

??? //通過tileAt的方式獲得格子,每個格子是一個精靈

??? CCSprite* sprite = layer->tileAt(ccp(2,2));

??? //通過tileGIDAT的方式獲得gid的值

??? int gid = layer->tileGIDAt(ccp(2,2));

??? //讓被選中的精靈跳動一下

??? sprite->runAction(CCJumpBy::create(200, ccp(0, 0), 50, 1000));

?

??? //將地圖縮放

??? map->setScale(.5f);

??? layer->setTileGID(3,ccp(3,3));

?

??? _map = map;

?

??? setTouchEnabled(true);

??? //設置觸摸方式

??? setTouchMode(kCCTouchesOneByOne);

?

??? CCSprite* sprite1 = CCSprite::create("anchor3.png");

??? _map->addChild(sprite1);

??? sprite1->setZOrder(1000);

?

??? sprite1->setPosition(Tile2PointLB(ccp(3, 2)));

??? sprite1->setAnchorPoint(ccp(0,1));

?

??? sprite1->setPosition(Tile2PointLB(ccp(3, 2)));

??? sprite1->setAnchorPoint(ccp(0,1));

?

??? return true;

}

?

//將世界坐標轉換成格子坐標

CCPoint TileMap::Point2Tile(CCPoint ptGL)

{

??? //獲得每個格子的寬度

??? int dx = _map->getTileSize().width;

??? //設置每個格子的高度

??? int dy = _map->getTileSize().height;

?

??? //ptGL世界坐標轉換成為本地坐標

??? CCPoint ptMap = _map->convertToNodeSpace(ptGL);

??? //x軸方向的格子數

??? int x = ptMap.x / dx;

??? //這里如果是最左下角算的的值是0,如果y軸上有2個格子,實際的格子的y1

??? int y = ptMap.y / dy;

??? //y方向上的總格子數 - 1 - y

??? y = _map->getMapSize().height - 1 - y;

?

??? return ccp(x,y);

}

?

//將格子坐標轉換成為世界坐標

CCPoint TileMap::Tile2PointLB(CCPoint ptTile)

{

??? //這里的getMapSize().height不是像素值,而是y方向上的格子數

??? ptTile.y = _map->getMapSize().height - 1 - ptTile.y;

?

??? return ccp(ptTile.x * _map->getTileSize().width,

??????? ptTile.y * _map->getTileSize().height);

}

?

bool TileMap::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)

{

??? //獲得被選中的坐標值

??? CCPoint pt = pTouch->getLocation();

?

??? CCPoint ptTile = Point2Tile(pt);

??? _map->layerNamed("layer_0")->setTileGID(0, ptTile);

?

??? return true;

}

運行結果:

?

總結

以上是生活随笔為你收集整理的CCTMXTiledMap的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。