使用cocos2d平铺地图,我需要知道是否在等轴测图中完成了触摸。等距地图有钻石形状。
当我设置一个新位置时,我会使用最小值,最大值,但因为它是钻石形状...不能确定是否在地图内..
如果空间是正方形,这将是验证器,但由于这是钻石,它将无法工作。
-(CGPoint)validateInsideMap:(CGPoint)position{
int x,y;
x = MAX(_tileMap.mapSize.width * _tileMap.tileSize.width , position.x);
x = MIN(0, x);
y = MAX(_tileMap.mapSize.height * _tileMap.tileSize.height , position.y);
y = MIN(0, y);
return ccp(x, y);
}
任何建议?
答案 0 :(得分:0)
如果触摸在地图内部,以像素为单位计算有点复杂,所以我只需要将像素位置转换为平铺系统,然后只需验证平铺在地图范围内,否则返回最近的一个
这是用这个算法做的:
-(CGPoint) tilePosFromLocation:(CGPoint)location{
float mapHeight = _tileMap.mapSize.height;
float tileWidth = _tileMap.tileSize.width;
float tileHeight = _tileMap.tileSize.height;
CGPoint tilePosDiv = CGPointMake(location.x/tileWidth, location.y/tileHeight);
float invereseTileY = mapHeight - tilePosDiv.y;
float posX = (int)(invereseTileY + tilePosDiv.x - (_tileMap.mapSize.width*0.5));
float posY = (int)(invereseTileY - tilePosDiv.x + (_tileMap.mapSize.width*0.5));
posX=MAX(0, posX);
posX=MIN(_tileMap.mapSize.width - 1, posX);
posY=MAX(0, posY);
posY=MIN(_tileMap.mapSize.height - 1, posY);
return CGPointMake(posX, posY);
}
这样一来,地图边界内总会有一块瓷砖,所以如果触摸在外面就没问题了