Задать вопрос
@KokocHyTbIu
Программист 10 левела

Как реализовать управление в игре?

Помогите разобраться с управлением героя. Есть сцена, в неё помещен герой, кинул на сцену 3 кнопки(CCNode), для движения на лево, направо и прыжок. Управление работает, но когда герой проходит по "карте" дальше, то при отпускании и следующем нажатии на какую либо кнопку не происходит движение... Как бы фрэйм остаётся в начале карты, и тоуч как бы уже приходится не на кнопку, а спрайт кнопки стоят нормально, они двигаются вместе с героем. Работаю в xcode и spritekit. Код представляю ниже:

-(void)update:(CCTime)delta{
    float rad = _mainHero.rotation *(M_PI/180);
    if (clickedRight) {
        NSLog(@"нажата кнопка");
   _mainHero.position = ccpAdd(_mainHero.position, ccp(delta *80, 0));
    }else if (clickedLeft) {
        _mainHero.position = ccpAdd(_mainHero.position, ccp(-1*delta *80, 0));
    }
    if (clickedJump) {
        _mainHero.position = ccpAdd(_mainHero.position, ccp(sin(rad) * delta *150, cos(rad)*delta*150));
    }

}




  -(void)touchMoved:(CCTouch *)touch withEvent:(CCTouchEvent *)event{
    _follow = [CCActionFollow actionWithTarget:_mainHero worldBoundary:self.boundingBox];
    [_contentNode runAction:_follow];
    CGPoint touchLocation = [touch locationInNode:_contentNode];
    if (CGRectContainsPoint([_btnRight boundingBox], touchLocation))
    {
        CCLOG(@"пробежалась по кнопке НАПРАВО !!!!---->>>");

    }

    self.position = ccp(0, 0);

 if (CGRectContainsPoint([_btnRight boundingBox], touchLocation))
    {
        clickedRight = YES;
        CCLOG(@"нажато на кнопку НАПРАВО !!!!---->>>");

        clickedLeft = NO;
        clickedJump = NO;

   }
    if (CGRectContainsPoint([_btnLeft boundingBox], touchLocation))
    {
        clickedLeft = YES;
        clickedRight = NO;
        clickedJump = NO;
        CCLOG(@"нажато на кнопку НАЛЕВО !!!!---->>>");

    }
    if (CGRectContainsPoint([_btnJump boundingBox], touchLocation))
    {
        clickedJump = YES;
        clickedLeft = NO;
        clickedRight = NO;
        CCLOG(@"нажато на кнопку ПРЫЖОК !!!!---->>>");
    }



}
-(void)touchEnded:(CCTouch *)touch withEvent:(CCTouchEvent *)event{
     clickedJump = NO;
    clickedLeft = NO;
    clickedRight = NO;

    CCLOG(@"END---->>>");


}



- (void)touchBegan:(CCTouch *)touch withEvent:(CCTouchEvent *)event {
    [self launchPenguin];
    // ensure followed object is in visible are when starting

    _follow = [CCActionFollow actionWithTarget:_mainHero worldBoundary:self.boundingBox];
    [_contentNode runAction:_follow];

    CGPoint touchLocation = [touch locationInNode:_contentNode];
    }



-(id)init{
    if (self = [super init]) {


        self.multipleTouchEnabled = YES;

        clickedJump = NO;
        clickedLeft = NO;
        clickedRight = NO;

        self.position = ccp(0, 0);
        _follow = [CCActionFollow actionWithTarget:_mainHero worldBoundary:self.boundingBox];
        [_contentNode runAction:_follow];
           }
    return  self;
}


в изучении помогает мне портал: https://www.makeschool.com/tutorials/getting-start... там есть реализация наблюдения камеры за "героем". Но в моём случае когда герой уходит дальше стартовой "сцены" то кнопки остаются сзади, но иконки кнопок идут вместе, но они не работают. Помогите пожалуйста) на этой проблеме застопорилось всё. Хотел сделать чтобы кнопки двигались вместе с героем, то есть их position менялся так же как и у героя, но думаю это будет как то не правильно, и что есть какой то хороший правильный метод.
  • Вопрос задан
  • 346 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы