Используя этот код (немного подправленный), я не могу получить постоянное значение Y. это постоянно меняется. X отлично работает, но Y действительно перекошен.
Я делаю плитки размером с экран. и когда я беру и перетащить, он отлично работает для х. поэтому, если я щелкну пробел на экране, скажем
Количество завершений x: 459.000000 y: 705.000000
и затем немного утащить, я получаю это
штрихи закончено x: 459.000000 y: 823.000000
Таким образом, значение x остается тем, что я хочу, но значение Y изменяется, не представляя правильного значения
Мой код для распечатки выглядит так
NSArray *touchArray = [touches allObjects];
UITouch * fingerOne = [touchArray objectAtIndex:0];
CGPoint newTouchLocation = [fingerOne locationInView:[fingerOne view]];
CGPoint mapLoc = [self convertToNodeSpace: newTouchLocation];
NSLog(@"Touches Ended x : %f y : %f", mapLoc.x, mapLoc.y);
и большинство приходит с этого сайта ...
http://firsttimecocos2d.blogspot.com/2011/07/how-to-scroll-and-zoom-inout-of-map.html
- (void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
//finds the difference in the original map and the scaled map
int differenceX = mapWidth - (mapWidth*mapScale);
int differenceY = mapHeight - (mapHeight*mapScale);
// This method is passed an NSSet of touches called (of course) "touches"
// "allObjects" returns an NSArray of all the objects in the set
NSArray *touchArray = [touches allObjects];
//Remove Multi Touch
if ([touchArray count] ==1){
UITouch * fingerOne = [touchArray objectAtIndex:0];
CGPoint newTouchLocation = [fingerOne locationInView:[fingerOne view]];
newTouchLocation = [[CCDirector sharedDirector] convertToGL:newTouchLocation];
CGPoint oldTouchLocation = [fingerOne previousLocationInView:fingerOne.view];
oldTouchLocation = [[CCDirector sharedDirector] convertToGL:oldTouchLocation];
//get the difference in the finger touches when the player was dragging
CGPoint difference = ccpSub(newTouchLocation, oldTouchLocation);
//adds this on to the layers current position, effectively moving it
CGPoint newPosition = ccpAdd(mapLayer.position, difference);
CGPoint bottomLeft = newPosition;
//check to see if the map edges of the map are showing in the screen, if so bringing them back on the view so no black space can be seen
if (bottomLeft.x - differenceX/2 > 0 - (mapWidth * (1-mapScale)) + (1-mapScale)*33) {
bottomLeft.x = differenceX/2- (mapWidth * (1-mapScale))+(1-mapScale)*33;
}
if (bottomLeft.y - differenceY/2 > 0 -(mapHeight * (1-mapScale))) {
bottomLeft.y = differenceY/2-(mapHeight * (1-mapScale));
}
if (bottomLeft.x + mapWidth*mapScale +differenceX/2 < 440+ (1-mapScale)*33) {
bottomLeft.x = -differenceX/2 - mapWidth*mapScale + 440 + (1-mapScale)*33;
}
if (bottomLeft.y + mapHeight*mapScale +differenceY/2 < 320) {
bottomLeft.y = -differenceY/2 - mapHeight*mapScale + 320;
}
mapLayer.position = bottomLeft;
}
}
Что-нибудь? Спасибо!