首先我們要根據所需的地圖制作兩張tilemap地圖,然后根據當前的position判斷是目前是哪一張地圖進行合理的顯示。
附主要代碼:
1 -(void) setViewPointCenter:(CGPoint)position 2 { 3 CGSize winSize = [[CCDirector sharedDirector] winSize]; 5 if (-1*self.position.x>((_tilemap.mapSize.width * _tilemap.tileSize.width)+_tilemap.position.x-winSize.width-1.0)) { 6 if ((-1*self.position.x>(_tilemap1.mapSize.width * _tilemap1.tileSize.width)+_tilemap1.position.x-winSize.width-1.0)) 7 { 8 _tilemap.position = ccp(_tilemap1.position.x+(_tilemap1.mapSize.width * _tilemap1.tileSize.width),0); 9 } 10 else { 11 CGPoint mapPosition = [self tilePosFromLocation:_spiderman.position tileMap:_tilemap1]; 12 int x = MAX(position.x, winSize.width / 2); 13 int y = MAX(position.y, winSize.height / 2); 14 x = MIN(x, (_tilemap1.mapSize.width * _tilemap1.tileSize.width)+_tilemap1.position.x 15 - winSize.width / 2); 16 y = MIN(y, (_tilemap1.mapSize.height * _tilemap1.tileSize.height) 17 - winSize.height/2); 18 CGPoint actualPosition = ccp(x, y); 19 20 CGPoint centerOfView = ccp(winSize.width/2, winSize.height/2); 21 CGPoint viewPoint = ccpSub(centerOfView, actualPosition); 22 self.position = viewPoint; 23 } 24 } 25 else { 26 CGPoint mapPosition = [self tilePosFromLocation:_spiderman.position tileMap:_tilemap]; 27 int x = MAX(position.x, winSize.width / 2); 28 int y = MAX(position.y, winSize.height / 2); 29 x = MIN(x, (_tilemap.mapSize.width * _tilemap.tileSize.width)+_tilemap.position.x 30 - winSize.width / 2); 31 y = MIN(y, (_tilemap.mapSize.height * _tilemap.tileSize.height) 32 - winSize.height/2); 33 CGPoint actualPosition = ccp(x, y); 35 CGPoint centerOfView = ccp(winSize.width/2, winSize.height/2); 36 CGPoint viewPoint = ccpSub(centerOfView, actualPosition); 37 self.position = viewPoint; 38 if((-1*self.position.x>(_tilemap.mapSize.width * _tilemap.tileSize.width)+_tilemap.position.x-winSize.width-1.0)) 39 { 40 _tilemap1.position = ccp(_tilemap.position.x+(_tilemap.mapSize.width * _tilemap.tileSize.width),0); 41 } 42 } 43 }
整個思想還是比較簡單,就是根據目前的地圖將第二章地圖放到目前地圖的后面緊跟,注意tilemap大小的計算:
_tilemap1.mapSize.width * _tilemap1.tileSize.width