Перемещение CCLayer с помощью «ccTouchesMoved» работает, но требует некоторых настроек, я не могу понять - PullRequest
2 голосов
/ 08 марта 2011

мой код:

-(void) ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    //Add a new body/atlas sprite at the touched location
    for( UITouch *touch in touches ) {
        CGPoint touchLocation = [touch locationInView: [touch view]];   
        CGPoint prevLocation = [touch previousLocationInView: [touch view]];    

        touchLocation = [[CCDirector sharedDirector] convertToGL: touchLocation];
        prevLocation = [[CCDirector sharedDirector] convertToGL: prevLocation];

        CGPoint diff = ccpSub(touchLocation,prevLocation);

        [self setPosition: ccpAdd(self.position, diff)];
    }

}

Этот код позволяет мне перемещать слой пальцами. Это отлично работает. Но теперь я хочу позволить пользователю только перемещать слой в пределах предопределенного CGRect. Как это сделать?

Например:

CGRect rect = CGRectMake(0,0,600,320);

Теперь игроку разрешено только перемещать слой внутри этого прямоугольника. В этом примере он мог только переместить его (касанием iPod) влево и вправо. (до 600 пикселей).

Что мне нужно изменить, чтобы достичь этого?

Спасибо за любую помощь. Хорошего дня:)

Ответы [ 2 ]

3 голосов
/ 09 марта 2011

Сохраняйте переменную для проверки .. например ..

distmoved = distmoved + touchlocation.x - prevlocation.x;
if(distmoved<600)
//move code

обратите внимание, что distmoved является float ..

1 голос
/ 09 марта 2011

Вы должны сделать свой чек. Это не сложно в вашем случае:

[self setPosition: ccpAdd(self.position, diff)];
if (self.position.x < minX)
{
    //correct x position
}
if (...)
//    ...
//   ans so on
...