在cocos2d中使tilemap地圖有無限循環的效果


首先我們要根據所需的地圖制作兩張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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM