我有一个项目,我正在尝试实现一个路径查找类,但我偶然发现了一个我似乎无法修复的问题。
发生错误的视频可在此处找到: https://www.dropbox.com/s/25ajb0mc5p4a3a9/Tilemap%20Error.mov
抛出的错误消息是:Assertion failure in -[CCTMXLayer tileGIDAt:withFlags:], /Users/Dave/Desktop/AI_DISS_new copy/AI_DISS/libs/cocos2d/CCTMXLayer.m:304
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'TMXLayer: invalid position'.
当地图和图层大小以平铺值返回时,该点返回为像素值,因此我尝试将包含像素值的变量除以平铺的宽度或高度,但似乎没有任何效果。
tileAt的GID:当使用像素值(可以理解)时,点返回太高,当转换为平铺值时,搜索很长时间,最终离开地图并不断搜索直到Xcode崩溃。
如果这不是最适合这个论坛的问题,我尽可能详细地解释道歉。我真的很感激任何帮助。
如果您需要更多详细信息,请询问。
使用该类的原始说明是在cocos2d论坛上进行了大修,线程似乎已被移动或删除,因此我无法引用它们但我确定tilemap(TMX Tilemap)和图层属性已正确传递。
从我的HelloWorldLayer类中,值为:
//Pathfinding related code
////////////////////////////
_tileMap = [CCTMXTiledMap tiledMapWithTMXFile:@"NewMap.tmx"];
_pathFinder = [[AStar alloc] initWithTileMap:_tileMap groundLayer:@"Collision"]; //collidable Tiles
[_pathFinder setCollideKey:@"Collidable"]; // defaults to COLLIDE
[_pathFinder setCollideValue:@"True"]; // defaults to 1
_pathFinder2 = [[AStar alloc] initWithTileMap:_tileMap groundLayer:@"Collision"]; //collidable Tiles
[_pathFinder2 setCollideKey:@"Collidable"]; // defaults to COLLIDE
[_pathFinder2 setCollideValue:@"True"]; // defaults to 1
/////////////////////////////
并将move方法称为:
/////////////// player path finding related code //////////////////
[_pathFinder moveSprite:_player from:s to:f atSpeed:0.003];
///////////// end player path finding related code //////////////
提前致谢。
GID代码如下所述:
if (tileGid)
{
// check the tile for the collide property.
NSDictionary *dict = [tileMap propertiesForGID:tileGid];
if (dict)
{
//check the tile for the collideKey and return Yes if a match
NSString *collide = [dict valueForKey:collideKey];
if (collide && [collide compare:collideValue] == NSOrderedSame)
return YES;
}
}