直角瓦片地图坐标转换算法记录(OC)

瓦片地图

-(void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    CCNode* node = [self getChildByTag:TileMapNode];
    CCTMXTiledMap* tileMap = (CCTMXTiledMap*)node;

    // 将屏幕位置转换为瓦片坐标
    CGPoint touchLocation = [self locationFromTouch:[touches anyObject]];
    CGPoint tilePos = [self tilePosFromLocation:touchLocation tileMap:tileMap];
}

//点击的位置
-(CGPoint) locationFromTouch:(UITouch*)touch
{
    CGPoint touchLocation = [touch locationInView: [touch view]];
    return [[CCDirector sharedDirector] convertToGL:touchLocation];
}

//location:点击的位置  tileMap:地图
-(CGPoint) tilePosFromLocation:(CGPoint)location tileMap:(CCTMXTiledMap*)tileMap
{
    //点击的位置+地图的坐标(偏移量)
    CGPoint pos = ccpSub(location, tileMap.position);

    //缩放的大小(屏幕外,未滚动)
    float scaledWidth = tileMap.tileSize.width / CC_CONTENT_SCALE_FACTOR();
    float scaledHeight = tileMap.tileSize.height / CC_CONTENT_SCALE_FACTOR();

    //地图的坐标
    pos.x = (int)(pos.x / scaledWidth);
    pos.y = (int)((tileMap.mapSize.height * tileMap.tileSize.height - pos.y) / scaledHeight);

    return pos;
}
convertToGL考虑到当前场景的SCALE因子
时间: 2024-12-06 04:42:24

直角瓦片地图坐标转换算法记录(OC)的相关文章

Cocos2d-x使用瓦片地图

图所示的复杂地图可以使用瓦片地图技术,瓦片地图是用一些小图片(瓦片)拼接而成,这样可以大大地减少内存消耗.如图所示的瓦片地图,只需要如图所示的三个瓦片就可以了. 瓦片地图 地图中的瓦片 瓦片地图的分类瓦片地图可以有三种分类:直角地图.斜角地图和六边形地图.1.直角地图直角地图,如图所示是使用方形瓦片构建,看上去是垂直向下观察的鸟瞰图,构成瓦片地图的瓦片不一定是正方形,也可以是长方形瓦片. 2.斜角地图斜角地图,如图所示是使用菱形瓦片构建.斜角地图是将视角旋转到45度,斜角地图能够使我们的大脑错误

Leaflet 调用百度瓦片地图服务

在使用 leaflet 调用第三方瓦片地图服务的项目,主要谷歌地图.高德地图.百度地图和 OSM 地图,与其他三种地图对比,百度地图的瓦片组织方式是不同的.百度从中心点经纬度(0,0)度开始计算瓦片,而谷歌地图是从左上角经纬度(-180,90)度开始计算瓦片:如果直接使用百度瓦片地图服务会请求不到瓦片,因此需要转换一下.借助 leaflet-tileLayer-baidu 这个插件: //需要引入 proj4.js 和 proj4leaflet.js 插件,使用script标签引入的方式 L.C

Cocos2d-X研究之v3.x瓦片地图具体解释

在游戏开发过程中,我们会遇到超过屏幕大小的地图,比如即时战略游戏,使得玩家能够在地图中滚动游戏画面.这类游戏一般会有丰富的背景元素,假设直接使用背景图切换的方式,须要为每一个不同的场景准备一张背景图,并且每一个背景图都不小,这样会造成资源浪费. 瓦片地图就是为了解决这问题而产生的.一张大的世界地图或者背景图能够由几种地形来表示,每种地形相应一张小的的图片,我们称这些小的地形图片为瓦片.把这些瓦片拼接在一起,一个完整的地图就组合出来了,这就是瓦片地图的原理. TileMap方案 在Cocos2d-

(12)瓦片地图

在游戏开发过程中,我们会遇到超过屏幕大小的地图,例如即时战略游戏,使得玩家可以在地图中滚动游戏画面.这类游戏通常会有丰富的背景元素,如果直接使用背景图切换的方式,需要为每个不同的场景准备一张背景图,而且每个背景图都不小,这样会造成资源浪费. 瓦片地图就是为了解决这问题而产生的.一张大的世界地图或者背景图可以由几种地形来表示,每种地形对应一张小的的图片,我们称这些小的地形图片为瓦片.把这些瓦片拼接在一起,一个完整的地图就组合出来了,这就是瓦片地图的原理. TileMap方案 在Cocos2d-x中

Cocos2d-x之瓦片地图 Tiled

Cocos2d-x之瓦片地图 Tiled 首先使用 瓦片地图编辑器(Tiled) 制作一个瓦片地图,并将其放入工程的Resources目录下 功能实现: 将地图显示在窗体中 将精灵添加到地图定义的对象层中的一个对象上 移动精灵,使其可以和碰撞图层上的精灵发生碰撞 碰撞后碰撞图层上的精灵消失,label字体改变 代码部分: HelloWorldScene.h 1 #ifndef __HELLOWORLD_SCENE_H__ 2 #define __HELLOWORLD_SCENE_H__ 3 4

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 

无意中发现了谷歌、腾讯、高德地图纠偏算法

大家知道,天朝的地图都是加偏的,也就是GPS设备接收到的坐标和电子地图坐标是不一样的,有一定的偏移,如果直接把GPS坐标显示到电子地图上,有几百米的误差,必须把GPS坐标加上一定的偏移再显示到电子地图上,才和实际相符,理论上,每种地图偏移量不一样的,且都不是线性的,供应商提供在线的接口,把GPS坐标转换成地图坐标,但算法是保密的,我们可以自己创建纠偏库(参见百度谷歌等地图纠偏库),但部分地方不使用数据库,也不适合网上调用,最合适的办法就是通过算法直接计算,我在网上无意看到了用java写的谷歌地图

iOS开发笔记15:地图坐标转换那些事、block引用循环、UICollectionviewLayout及瀑布流、图层混合

1.地图坐标转换那些事 (1)投影坐标系与地理坐标系 地理坐标系使用三维球面来定义地球上的位置,单位即经纬度.但经纬度无法精确测量距离戒面积,也难以在平面地图戒计算机屏幕上显示数据.通过投影的方式可以将其转换成平面的投影坐标系,不同的投影方式可能会带来不同的变形及误差,类似于把一个橘子的橘子皮剥开摊平到桌面. GPS以及iOS系统定位获得的坐标是地理坐标系WGS1984,Web地图一般用的坐标细是投影坐标系WGS 1984 Web Mercator,国内出于相关法律法规要求,对国内所有GPS设备

瓦片地图

在游戏开发过程中,我们会遇到超过屏幕大小的地图,例如即时战略游戏,使得玩家可以在地图中滚动游戏画面.这类游戏通常会有丰富的背景元素,如果直接使用背景图切换的方式,需要为每个不同的场景准备一张背景图,而且每个背景图都不小,这样会造成资源浪费. 瓦片地图就是为了解决这问题而产生的.一张大的世界地图或者背景图可以由几种地形来表示,每种地形对应一张小的的图片,我们称这些小的地形图片为瓦片.把这些瓦片拼接在一起,一个完整的地图就组合出来了,这就是瓦片地图的原理. TileMap方案 在Cocos2d-x中