我有一个我根本想不通的问题;可能是因为我没有正确的知识。
我有Tiled制作的TMX地图。地图大于屏幕尺寸(平铺是32x32像素,有100x100平铺)。 我想做的是能够通过滑动屏幕来移动地图。
我在线查看了各种教程并检查了paddle.m示例,但仍无法使其工作。 我遇到的所有教程都专注于在地图周围移动一个夹紧的居中精灵...... 同样,我想要做的是能够通过滑动/滑动屏幕来移动地图;就像在滚动iPod或移动图片时一样。
有人可以帮忙吗?
这是我的ccTouchMoved代码
-(void) ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event
{
CGPoint touchPointMap = [touch locationInView: [touch view]];
touchPointMap = [[CCDirector sharedDirector] convertToGL: touchPointMap];
touchPointMap = [self convertToNodeSpace: touchPointMap];
CCLOG(@"Touch Point Map %lf, %lf", touchPointMap.x, touchPointMap.y);
self.position = CGPointMake(touchPointMap.x, touchPointMap.y);
}
为了说明当我使用上面的代码滑动屏幕时我在屏幕上看到的问题: 似乎如果我触摸屏幕的中心,地图的左下角将跳转到触摸的坐标,并随着我的触摸移动,直到我的触摸被抬起。 地图的左下角将始终移动到我开始触摸的位置。 此外,当地图被移动时,它会像疯了一样闪烁,如果过度移动,则完全消失。
再次感谢所有人,非常感谢。 最好的和亲切的问候, 纮
答案 0 :(得分:6)
我找到了问题的解决方案。 在Cocos2D社区中有一个非常聪明的人,他编写了一个控制器,不仅可以有机地平移,还可以放大和缩小。
Link to Controller, example and preview movie
您不需要编写touchBegan,Moved和End方法;这个控制器为你做了一切。
我的初学
self.theMap = [CCTMXTiledMap tiledMapWithTMXFile: @"city_map.tmx"];
self.bgLayer = [theMap layerNamed:@"bg"];
// boundingRect is the area you wish to pan around
CGRect boundingRect = CGRectMake(0, 0, 32*50, 16*50);
theMap.anchorPoint = ccp(0,0);
[self addChild: theMap z: -1];
// _controller is declared in the @interface as an object of CCPanZoomController
_controller = [[CCPanZoomController controllerWithNode:self] retain];
_controller.boundingRect = boundingRect;
_controller.zoomOutLimit = _controller.optimalZoomOutLimit;
_controller.zoomInLimit = 2.0f;
[_controller enableWithTouchPriority:0 swallowsTouches:YES];