Как получить CCSprite для отслеживания пользователей с помощью ccTouchMoved - PullRequest
0 голосов
/ 21 марта 2011

Я хочу иметь возможность перемещать определенные изображения спрайтов одним касанием пользователя.Что-то вроде этого:

- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    for (UITouch *touch in touches)
    {
        CGPoint *location = [touch locationInView:[touch view]];
        location = [[CCDirector sharedDirector] convertToGL: location];
        if (CGRectContainsPoint(sprite.boundingBox, location)
        {
            sprite.location = ccp(location.x, location.y);
        }
    }
}

Конечно, это не работает для меня, так как не существует метода тиков для этого метода, чтобы непрерывно перемещать CCSprite.Я знаю о методе ccTouchMoved, но я не уверен, как его реализовать, любые примеры будут с благодарностью.

Ответы [ 3 ]

4 голосов
/ 21 марта 2011

Только CClayer способен распознавать касания, его автоматическое. Таким образом, вам нужно справиться с вещью за тик. И это должно быть ccTouchesMove .. Что-то вроде:

-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSLog(@"begin");
}

-(void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{    
    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInView: [touch view]];
    location = [[CCDirector sharedDirector] convertToGL:location];

    sprite.position = location;
}

-(void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSLog(@"Ended");
}

Конечно, в вашем init вы должны установить self.isTouchEnabled = YES;

2 голосов
/ 02 августа 2011

Вы можете перетаскивать изображения спрайтов с помощью следующего метода в вашей сцене:

-(void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event
{
    CGPoint location = [self convertTouchToNodeSpace: touch];
    sprite.position = location;
}
1 голос
/ 24 ноября 2011

Пожалуйста, измените ваш код согласно приведенному ниже коду, он работает для меня.

UITouch * touch = [touches anyObject];
CGPoint location = [touch locationInView:[touch view]];
location = [[CCDirector sharedDirector] convertToGL:location];
if (CGRectContainsPoint(sprite.boundingBox,location)){
    [sprite setPosition:location];

}
...