2011-10-09 39 views
6

Tôi gặp vấn đề mà tôi không thể hiểu được; có lẽ vì tôi không có kiến ​​thức chính xác.Cuộn một Bản đồ lát gạch trong Cocos2D

Tôi có bản đồ TMX được tạo trong lát gạch. Bản đồ lớn hơn kích thước màn hình (các lát là 32x32pixels và có các ô 100x100). Điều tôi muốn làm là có thể di chuyển bản đồ bằng cách vuốt màn hình.

Tôi đã xem các hướng dẫn trực tuyến khác nhau và kiểm tra ví dụ paddle.m nhưng vẫn không thể làm cho nó hoạt động. Tất cả các hướng dẫn tôi đã đi qua tất cả các tập trung vào di chuyển một sprite kẹp trung tâm xung quanh bản đồ ... Một lần nữa, những gì tôi muốn làm là để có thể di chuyển bản đồ bằng cách swiping/trượt màn hình; giống như khi cuộn qua iPod hoặc di chuyển hình ảnh xung quanh.

Có ai giúp được không?

Đây là mã ccTouchMoved tôi

-(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); 
} 

Để minh họa cho vấn đề tôi nhìn thấy trên màn hình khi tôi vuốt màn hình bằng cách sử dụng mã trên: Dường như nếu tôi chạm vào trung tâm của màn hình, góc dưới cùng bên trái của bản đồ sẽ chuyển đến tọa độ được chạm vào đó và sẽ di chuyển với liên lạc của tôi cho đến khi chạm được nâng lên. Góc dưới cùng bên trái của Bản đồ sẽ luôn chuyển đến nơi tôi bắt đầu chạm vào. Ngoài ra trong khi bản đồ đang được di chuyển, nó nhấp nháy như điên và nếu di chuyển quá mức, biến mất hoàn toàn.

Cảm ơn một lần nữa Tất cả, được đánh giá cao. Trân trọng và tốt nhất, hiro

Trả lời

6

Tôi đã tìm ra giải pháp cho vấn đề. Có một người rất sáng trong cộng đồng Cocos2D, người đã viết một bộ điều khiển để không chỉ xoay quanh hữu cơ mà còn phóng to và thu nhỏ.

Link to Controller, example and preview movie

Bạn sẽ không cần phải viết phương pháp touchBegan, di chuyển và End của bạn; Bộ điều khiển này làm tất cả cho bạn.

init My

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]; 
+1

Đó là mã hiện là một phần của cocos2d-phần mở rộng: https://github.com/cocos2d/cocos2d-iphone-extensions – drewish

Các vấn đề liên quan