2014-01-27 2 views
2

У меня небольшая проблема. В этом уроке How To Make a Tile-Based Game with Cocos2D 2.X используется cocos2d V2.0, я хочу сделать это в cocos2d V3.0. Таким образом, это не сработает! Благодаря! (Я не говорю по-английски)«Как сделать игру на основе плитки с помощью Cocos2D 2.X» Сделать этот учебник с cocos2d V3

Я думаю, что проблема в этой строке - self.position = viewPoint;

@property (strong) CCTiledMap *tileMap; 
@property (strong) CCTiledMapLayer *background; 
@property (strong) CCSprite *player; 



- (id)init 
{ 
    // Apple recommend assigning self with supers return value 
    self = [super init]; 
    if (!self) return(nil); 

    // Enable touch handling on scene node 
    self.userInteractionEnabled = YES; 

    self.tileMap = [CCTiledMap tiledMapWithFile:@"TileMap.tmx"]; 
    self.background = [_tileMap layerNamed:@"Background"]; 
    [self addChild:_tileMap z:-1]; 

    CCTiledMapObjectGroup *objectGroup = [_tileMap objectGroupNamed:@"Objects"]; 
    NSAssert(objectGroup != nil, @"tile map has no objects object layer"); 

    NSDictionary *spawnPoint = [objectGroup objectNamed:@"SpawnPoint"]; 
    int x = [spawnPoint[@"x"] integerValue]; 
    int y = [spawnPoint[@"y"] integerValue]; 

    _player = [CCSprite spriteWithImageNamed:@"Player.png"]; 
    _player.position = ccp(x,y); 

    [self addChild:_player]; 
    [self setViewPointCenter:_player.position]; 

    // done 
    return self; 
} 


- (void)setViewPointCenter:(CGPoint) position { 

    CGSize winSize = [CCDirector sharedDirector].viewSize; 

    int x = MAX(position.x, winSize.width/2); 
    int y = MAX(position.y, winSize.height/2); 
    x = MIN(x, (_tileMap.mapSize.width * _tileMap.tileSize.width) - winSize.width/2); 
    y = MIN(y, (_tileMap.mapSize.height * _tileMap.tileSize.height) - winSize.height/2); 
    CGPoint actualPosition = ccp(x, y); 

    CGPoint centerOfView = ccp(winSize.width/2, winSize.height/2); 
    CGPoint viewPoint = ccpSub(centerOfView, actualPosition); 

    self.position = viewPoint; 
} 

-(void)touchBegan:(UITouch *)touch withEvent:(UIEvent *)event 
{ 
    CGPoint touchLocation = [touch locationInView:touch.view]; 
    touchLocation = [[CCDirector sharedDirector] convertToGL:touchLocation]; 
    touchLocation = [self convertToNodeSpace:touchLocation]; 

    CGPoint playerPos = _player.position; 
    CGPoint diff = ccpSub(touchLocation, playerPos); 

    if (abs(diff.x) > abs(diff.y)) { 
     if (diff.x > 0) { 
      playerPos.x += _tileMap.tileSize.width; 
     } else { 
      playerPos.x -= _tileMap.tileSize.width; 
     } 
    } else { 
     if (diff.y > 0) { 
      playerPos.y += _tileMap.tileSize.height; 
     } else { 
      playerPos.y -= _tileMap.tileSize.height; 
     } 
    } 

    CCLOG(@"playerPos %@",CGPointCreateDictionaryRepresentation(playerPos)); 

    // safety check on the bounds of the map 
    if (playerPos.x <= (_tileMap.mapSize.width * _tileMap.tileSize.width) && 
     playerPos.y <= (_tileMap.mapSize.height * _tileMap.tileSize.height) && 
     playerPos.y >= 0 && 
     playerPos.x >= 0) 
    { 
     [self setPlayerPosition:playerPos]; 
    } 

    [self setViewPointCenter:_player.position]; 
    NSLog(@"%@", NSStringFromCGPoint(touchLocation)); 
} 

-(void)setPlayerPosition:(CGPoint)position { 
    _player.position = position; 
} 
+2

Человек, то есть * -touchesBegan: withEvent: *. – EmptyStack

+0

Можете ли вы сделать это [учебник] (http://www.raywenderlich.com/29458/how-to-make-a-tile-based-game-with-cocos2d-2-x) в cocos2d V3? –

+0

Извините. Я не знаком с Cocos2D. Может быть, кто-то может помочь вам. Благодарю. – EmptyStack

ответ

2

Проблема заключается в том, что область взаимодействия пользователя по умолчанию, связанного с contentSize сцены (размер экрана).

При вызове метода setViewPointCenter вы перемещаете положение сцены из этой области, где не происходит обработки события касания.

Вы должны расширить эту область contentSize карты плитки, как, что:

[self setContentSize:[_tileMap contentSize]]; 
self.userInteractionEnabled = YES; 
+0

Большое вам спасибо! Работает! –