2013-12-20 27 views
0

我在背景精靈上添加一個精靈,然後縮放(捏)背景,並通過該精靈。如何在縮放後校準一個精靈touchLocation

縮放後,我想能夠在「縮放」的精靈上點擊右鍵,然後移動(平移)它。但是,要捕捉精靈,我必須點擊精靈之外。我想這是由於縮放和座標。

我真的需要一些幫助如何使它,使我總是隻需要點擊實際的精靈,如果它在原始狀態或放大或縮小。

我也將實現UIScrollView,所以我可以在背景中移動,但想先解決這個問題。

這裏是我用來測試這個代碼:

- (void)didMoveToView:(SKView *)view { 

_background = [SKSpriteNode spriteNodeWithImageNamed:@"background"]; 
_background.name = @"background"; 
[_background setAnchorPoint:CGPointZero]; 
// _background.anchorPoint = CGPointMake(0.0, 0.1); 
self.scaleMode = SKSceneScaleModeResizeFill; 
[self addChild:_background]; 

SKLabelNode *texT = [SKLabelNode labelNodeWithFontNamed:@"Ariel"]; 
texT.text = @"X"; 
texT.position = CGPointMake(160, 260); 
[_background addChild:texT]; 

_panGesture = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePan:)]; 
[self.view addGestureRecognizer:_panGesture]; 

_pinchGesture = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(handlePinch:)]; 
[self.view addGestureRecognizer:_pinchGesture]; 

/* Setup your scene here */ 

self.backgroundColor = [SKColor colorWithRed:0.15 green:0.15 blue:0.3 alpha:1.0]; 
SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"Spaceship"]; 
sprite.xScale = 0.2; 
sprite.yScale = 0.2; 
sprite.position = CGPointMake(160, 260); 
sprite.name = @"sprite"; 
[_background addChild:sprite]; 
} 

- (void)handlePan:(UIPanGestureRecognizer *)sender { 
NSLog(@"handlePan:"); 
if (![_currentNode.name isEqualToString:@"background"]) { 
    _touchLocation = [sender locationInView:sender.view]; 
    _touchLocation = [self convertPointFromView:_touchLocation]; 
    _currentNode.position = _touchLocation; 
} 
} 

- (void)handlePinch:(UIPinchGestureRecognizer *) sender { 
NSLog(@"handlePinch: %f",sender.scale); 
[self runAction:[SKAction scaleBy:sender.scale duration:0]]; 
sender.scale = 1; 
} 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
NSLog(@"touchesBegan"); 
//////DO THE FIRST TOUCH////// 
_actualTouch = [touches anyObject]; 
_touchLocation = [_actualTouch locationInNode:self]; 
_currentNode = [self nodeAtPoint:_touchLocation]; 
NSLog(@"TouchBegan:_touchLocation:%@", NSStringFromCGPoint(_touchLocation)); 
NSLog(@"_currentNode.name: %@", _currentNode.name); 
} 

@end 

回答

1

我有這個同樣的問題,我發現,解決辦法是調整,而不是規模。物理學似乎仍然按預期工作,現在觸摸事件也將如此。我遇到了這個解決方案here。您的didMoveToView中的scaleMode也需要更改,請參見下文。

self.scaleMode = SKSceneScaleModeAspectFill; 


- (void)handlePinch:(UIPinchGestureRecognizer *) sender { 
NSLog(@"handlePinch: %f",sender.scale); 
//[self runAction:[SKAction scaleBy:sender.scale duration:0]]; 
self.size = CGSizeMake(self.size.width/sender.scale,self.size.height/sender.scale); 
sender.scale = 1; 
} 

在我自己的實現中,我還設置了縮放級別的上限和下限。

+0

我終於到了,我需要解決這個問題,你的代碼工作:-)然而,你的代碼中有一個錯誤「CG​​PointMake」應該是「CGSizeMake」。 // PeterK – PeterK

+0

我還將多人遊戲改爲劃分以獲得正確的捏合與大小過程。 // PeterK – PeterK

+0

哦,對不起@PeterK。當時我沒有在我的Mac上,所以我必須記住,顯然這沒有成功,哈哈。我會編輯我的答案。 – mgiesa