平铺游戏对角线运动

时间:2011-08-01 00:27:36

标签: iphone objective-c cocos2d-iphone tiles

我正在制作瓷砖游戏。关注http://www.raywenderlich.com/1163/how-to-make-a-tile-based-game-with-cocos2d。使用整个屏幕作为保持在中间的角色的操纵杆。这个运动只有四个方向,但看起来像这样:

enter image description here

如果中心是角色拼贴,如果在那里触摸,请不要移动。如果触摸右侧等向右移动......

我想让它与8个方向一起工作。我尝试了一些事情,然后发现了这个:http://snipplr.com/view/39707/full-directional-movement-of-player-in-cocos2d-tilemap/

这扩展了原始代码以处理8个方向。我修改了它并从ccTouchMoved和ccTouchEnded调用它。

- (void)movePlayer:(CGPoint)to {
    CGSize winSize = [[CCDirector sharedDirector] winSize];
    CGPoint playerPos = _player.position;

    if (to.x < ((winSize.width/2)-((_tileMap.tileSize.width/2)*self.scale))) {
        playerPos.x -= _tileMap.tileSize.width;
    } else if (to.x > ((winSize.width/2)+((_tileMap.tileSize.width/2)*self.scale))) {
        playerPos.x += _tileMap.tileSize.width;
    }

    if (to.y < ((winSize.height/2)-((_tileMap.tileSize.height/2)*self.scale))) {
        playerPos.y += _tileMap.tileSize.height;
    } else  if (to.y > ((winSize.height/2)+((_tileMap.tileSize.height/2)*self.scale))) {
        playerPos.y -= _tileMap.tileSize.height;
    }

    if (CGPointEqualToPoint(self.player.position, playerPos) == NO) {
        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:self.player.position]; 
        }
    }
}

它看起来像这样:

enter image description here

这有一个问题;当你缩小时,通过在缩小的水平和垂直条内部点击直线行走变得越来越难......

第二位原作者将屏幕划分为三分之一以获得他的移动条。我想用角色瓦片来缩放我的角色,以便在角色附近保持运动准确。

所以我认为我需要将该区域划分为8个相等的部分以使其最佳工作?像这样:

enter image description here

任何人都可以解释如何检查这些边界内的触摸吗?或者如果我以正确的方式解决它?

谢谢!

1 个答案:

答案 0 :(得分:1)

有关如何制作操纵杆对象的精彩教程,请访问:71-squared How to make a Joypad

至于上面提到的8个方向之一的移动,你需要做的就是(当然阅读并实施教程之后!)是要弄清楚你画的那8行的角度,并检查是否新的计算出的角度落在任何一对中。

如果你想要一些关于如何检查8个方向的示例代码,你可以这样做“

- (void)chooseDirectionForAngle:(float)aAngle; {

  if(aAngle >= 2 || aAngle <= -2){
    // choose right direction.
  }
  else if(aAngle > 1 && aAngle < 2){
    // choose up direction
  }
  else if(aAngle >= -1 && aAngle <= 1){
    // choose left direction
  }
  else if(aAngle > -2 && aAngle < -1){
    // choose down direction
  }
}

显然,在我的例子中,这些数字是任意的。您只需要计算出上面提到的那8行的atan2(height, width)值,即使是NSLog(@"The angle is: %f", atan2(height, width));的xcode也可以这样做。您还必须有8个案例而不是4个案例,并且只需遵循上面的逻辑。希望有所帮助!