TiledMap格子地图

#ifndef __T10TiledMap_H__
#define __T10TiledMap_H__

#include "cocos2d.h"
USING_NS_CC;

class T10TiledMap : public Layer
{
public:
	T10TiledMap();
	~T10TiledMap();

	CREATE_FUNC(T10TiledMap);
	bool init();

	Vec2 GL2TiledMap(const Vec2& pos);
	Vec2 TiledMap2GL(const Vec2& posInMap);

	TMXTiledMap* _map;
};

#endif

<pre name="code" class="html">#include "T10TiledMap.h"


T10TiledMap::T10TiledMap()
{
}


T10TiledMap::~T10TiledMap()
{
}

bool T10TiledMap::init()
{
	Layer::init();

	//TMXTiledMap* tiledMap = TMXTiledMap::create("TileMaps/orthogonal-test2.tmx");
	TMXTiledMap* tiledMap = TMXTiledMap::create("TileMaps/my.tmx");
	_map = tiledMap;

	addChild(tiledMap);

	Size mapSize = tiledMap->getContentSize();
	Size winSize = Director::getInstance()->getWinSize();

//	tiledMap->setScale(winSize.width/mapSize.width, winSize.height/mapSize.height);

	// 获取图层,设置loacalZOrder来改变渲染顺序
	TMXLayer* layer = tiledMap->getLayer("Layer_0");
	layer->setLocalZOrder(1);

//	layer = tiledMap->getLayer("layer_1");
//	layer->setLocalZOrder(100);

	Sprite* sprite = Sprite::create("CloseNormal.png");
	tiledMap->addChild(sprite);
	sprite->setPosition(100, 100);
	sprite->setLocalZOrder(10);

	TMXObjectGroup* objGroup = _map->getObjectGroup("Objects");
	
	ValueVector& objects = objGroup->getObjects();
	for (auto it = objects.begin(); it != objects.end(); ++it)
	{
		Value& v = *it;
		ValueMap& vm = v.asValueMap();

		Value& name = vm["name"];
		Value& x = vm["x"];
		Value& y = vm["y"];

		CCLOG("name =%s, x=%d, y=%d", name.asString().c_str(), x.asInt(), y.asInt());
	}

	// 
//	Sprite*sprite = layer->getTileAt(格子坐标);

	auto ev = EventListenerTouchOneByOne::create();
	ev->onTouchBegan = [&](Touch* touch, Event*)
	{
		Vec2 pos = touch->getLocation();
		pos = _map->convertToNodeSpace(pos);

		Vec2 posInMap = GL2TiledMap(pos);

		TMXLayer* layer = _map->getLayer("Layer_0");

		// layer->setTileGID(0, posInMap);

		// layer->setTileGID(3, posInMap);
		Sprite* sprite = layer->getTileAt(posInMap);
		sprite->runAction(RepeatForever::create(JumpBy::create(.5f, Vec2(0, 0), 30, 1)));

		return true;
	};
	_eventDispatcher->addEventListenerWithSceneGraphPriority(ev, this);


	return true;
}

/* 格子的左下角转换成地图坐标 */
Vec2 T10TiledMap::TiledMap2GL(const Vec2& posInMap)
{
	Size tileSize = _map->getTileSize();
	Size contentSize = _map->getContentSize();

	int x = posInMap.x * tileSize.width;
	int y = posInMap.y * tileSize.height;
	y = y + tileSize.height;

	y = contentSize.height - 1 - y;

	return Vec2(x, y);
}

Vec2 T10TiledMap::GL2TiledMap(const Vec2& pos)
{
	Size tileSize = _map->getTileSize();
	Size mapSize = _map->getMapSize();

//	int x = pos.x / 格子宽度;
	int x = pos.x / tileSize.width;
//	int y = pos.y / 格子高度;
	int y = pos.y / tileSize.height;

//	y = 格子高度数量 - 1 - y;
	y = mapSize.height - 1 - y;

	return Vec2(x, y);
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的示例代码,用于在百度地图上创建一个格子方块区域: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>百度地图创建格子方块区域示例</title> <style type="text/css"> #map { height: 500px; width: 800px; } </style> </head> <body> <div id="map"></div> <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的密钥"></script> <script type="text/javascript"> // 初始化地图 var map = new BMap.Map("map"); map.centerAndZoom(new BMap.Point(116.404, 39.915), 12); // 创建一个矩形 var rectangle = new BMap.Rectangle(new BMap.Bounds(new BMap.Point(116.331335,39.897038), new BMap.Point(116.357843,39.912798)), {strokeWeight: 2, strokeColor: "#ff0000", fillColor: "#ffffff", fillOpacity: 0.5}); // 添加矩形到地图 map.addOverlay(rectangle); // 将矩形划分成多个子块 var bounds = rectangle.getBounds(); var sw = bounds.getSouthWest(); var ne = bounds.getNorthEast(); var lngSpan = ne.lng - sw.lng; var latSpan = ne.lat - sw.lat; var rows = 3; // 行数 var cols = 3; // 列数 var stepX = lngSpan / cols; var stepY = latSpan / rows; var markers = []; // 存放子块的数组 for (var i = 0; i < rows; i++) { for (var j = 0; j < cols; j++) { var marker = new BMap.Marker(new BMap.Point(sw.lng + j * stepX, sw.lat + i * stepY)); markers.push(marker); map.addOverlay(marker); } } </script> </body> </html> ``` 在这个示例中,我们首先创建了一个矩形,然后将它划分成 3 行 3 列的子块,并将子块添加到地图上。您可以根据需要调整行数、列数和子块大小。请注意,您需要将“您的密钥”替换为您在百度地图开发者平台上申请的密钥。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值