Cocos2d iPhone Game сенсорный экран, чтобы заставить персонажа двигаться - PullRequest
0 голосов
/ 06 июня 2011

Я написал несколько игр с использованием cocos2d, но все они контролировались акселерометром и использовали только простые сенсорные события.Все, что мне нужно сделать, это зарегистрироваться, когда касание экрана, в любом месте.Мне не нужна информация о положении или скорости.В настоящее время персонаж перемещается по экрану, и пользователи должны иметь возможность касаться, чтобы персонаж двигался вверх по экрану.текущий код не работает как задумано.Персонаж не подвержен касанию, он просто продолжает двигаться вниз по экрану.Пожалуйста, порекомендуйте.Ниже приведен код, который я пытаюсь использовать сейчас.

В методе обновления игры:

if (IsTouched == TRUE) {
    SealPositionBasedOnTouchInt = SealPositionBasedOnTouchInt - (100*dt);
}

else {
    SealPositionBasedOnTouchInt = SealPositionBasedOnTouchInt + (100*dt);
}

SealSwimming.position = ccp(SealPositionBasedOnTouchInt, SealSwimming.position.y);

События касания:

- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{


    for( UITouch *touch in touches ) 
    {
    CGPoint location = [touch locationInView: [touch view]];
    location = [[CCDirector sharedDirector] convertToGL: location];
    IsTouched = TRUE;
}  
}

Вы заметите, что я получаю местоположение касания, это в настоящее время не используетсяза что угодно, но был в образце.

Ответы [ 4 ]

1 голос
/ 06 июня 2011

Убедитесь, что для слоя включены сенсорные события isTouchEnabled

0 голосов
/ 26 июня 2011

Я не проверял это.

in .h

CCSprite *sprite;


in .m

-(id)init
{
    if ((self=[super init))
    {
           CGSize s = [[CCDirector sharedDirector] winSize];

           sprite = [CCSprite spriteWithFile:@"imagename.png"];
           sprite.position = ccp(s.width/2, s.height/2);
           [self addChild:sprite];
    }
    return self;
}

    - (void) ccTouchesBegan: (NSSet *)touches withEvent: (UIEvent *)event
{

    UITouch *touch = [touches anyObject];

    CGPoint touchLocation = [touch locationInView: [touch view]];   
    touchLocation = [[CCDirector sharedDirector] convertToGL: touchLocation];

    [sprite setPosition:touchLocation];

    //OR YOU CAN RUN AN ANIMATION TO MAKE IT LOOK LIKE IT'S WALKING
    //[sprite runAction:[CCMoveTo actionWithDuration:5 position:touchLocation]];
}
0 голосов
/ 06 июня 2011

У Серхио есть ответ на вашу проблему с касаниями, которые не регистрируются. У меня недавно была похожая проблема. Если не имеет значения, где пользователь касается экрана, тогда можно использовать swallowsTouches: YES, но если у вас есть пара слоев, для которых нужно зарегистрировать касания, вам может потребоваться установить значение NO.

0 голосов
/ 06 июня 2011

Вы переопределили:

-(void) registerWithTouchDispatcher {
    [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];
}

в вашем слое / узле, который получает прикосновение?

Вы также можете попробовать позвонить с вашего кода addTargetedDelegate:self без переопределения registerWithTouchDispatcher, но я никогда не пробовал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...