Как проверить, что в CGPath содержится не точка, а только x или y? - PullRequest
0 голосов
/ 13 июля 2011

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

Персонаж перемещается касанием. Поэтому я подумал, что могу просто проверить, содержатся ли в пути touchlocation.x или touchlocation.y, а затем установить изображение символов в месте, соответствующем значению touchlocation.x или touchlocation.y.

К сожалению, я обнаружил, что могу проверить только то, содержится ли CGPoint в пути, а не координаты x или y этой точки на этом пути.

Кто-нибудь из вас знает, как это сделать?

спасибо заранее

Мав

---- EDIT ----

Это код, как я создаю свой CGPath:

mazePath = CGPathCreateMutable();
CGPathMoveToPoint(mazePath,NULL, 148, 723);
CGPathAddLineToPoint(mazePath, NULL, 148, 404);
CGPathAddLineToPoint(mazePath, NULL, 129, 353);
CGPathAddLineToPoint(mazePath, NULL, 129, 174);
CGPathAddArcToPoint(mazePath, NULL, 129, 174, 148, 404, 10);
CGPathAddLineToPoint(mazePath, NULL, 148, 404);
CGPathAddLineToPoint(mazePath, NULL, 290, 640);
CGPathAddArcToPoint(mazePath, NULL, 290, 640, 326, 196, 10);
CGPathAddArcToPoint(mazePath, NULL, 326, 296, 359, 234, 10);
CGPathAddLineToPoint(mazePath, NULL, 395, 198);
CGPathAddLineToPoint(mazePath, NULL, 396, 147);
CGPathAddLineToPoint(mazePath, NULL, 683, 147);
CGPathAddLineToPoint(mazePath, NULL, 683, 232);
CGPathAddLineToPoint(mazePath, NULL, 480, 232);
CGPathAddLineToPoint(mazePath, NULL, 461, 332);
CGPathAddLineToPoint(mazePath, NULL, 235, 345);
CGPathAddLineToPoint(mazePath, NULL, 219, 248);
CGPathAddLineToPoint(mazePath, NULL, 235, 345);
CGPathAddLineToPoint(mazePath, NULL, 233, 607);
CGPathAddLineToPoint(mazePath, NULL, 324, 605);
CGPathAddLineToPoint(mazePath, NULL, 324, 464);
CGPathAddArcToPoint(mazePath, NULL, 324, 464, 364, 425, 10);
CGPathAddLineToPoint(mazePath, NULL, 537, 426);
CGPathAddArcToPoint(mazePath, NULL, 537, 426, 559, 396, 10);
CGPathAddLineToPoint(mazePath, NULL, 559, 396);
CGPathAddLineToPoint(mazePath, NULL, 567, 330);
CGPathAddLineToPoint(mazePath, NULL, 678, 330);
CGPathAddLineToPoint(mazePath, NULL, 678, 504);
CGPathAddLineToPoint(mazePath, NULL, 412, 510);
CGPathAddLineToPoint(mazePath, NULL, 412, 598);
CGPathAddLineToPoint(mazePath, NULL, 691, 598);
CGPathAddLineToPoint(mazePath, NULL, 690, 723);   

Ответы [ 2 ]

0 голосов
/ 13 июля 2011

У меня есть подход, я думаю, вы можете попробовать этот способ.используя метод CGPathContainsPoint, вы можете узнать, присутствует ли точка в пути, если условие не выполнено, это означает, что путь не содержит точку.Теперь в вашем случае вы можете написать условие, чтобы проверить, содержится ли точка в пути, а в другой части разработать логику, чтобы проверить, что x и y нашей точки равны currentPoint пути.

CGRect box= CGPathGetBoundingBox(myPath);


if([CGPathContainsPoint:myPoint]){
// we know that the point is present in the path
}
else{

if(mypoint.x>mypoint.x && myPoint.x<=CGRectGetMaxX(box.frame))
NSLog(@"x coordinate of the point is  on the path");
if(myPoint.y>myPoint.y && myPoint.y<=CGRectGetMaxY(box.frame))
NSLog(@"y coordinate of myPoint is on the path");

}

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

TNQ

0 голосов
/ 13 июля 2011

Посмотрите на эту ветку, она может помочь вам NSLog с данными CGPoint

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