2015-02-11 29 views
1

問題SKSpriteNode ScaleUpFrom?

但是,放大2D圖像,從圖像中心點放大。我需要它從一個特定的座標擴大?

[backgroundImage setScale:rifleZoom]; 

我目前的技術來擴大形象。

我需要從屏幕中心擴展,而不是居中圖像

現在我的方式放置在屏幕上@中心步槍射擊是這樣:

CGPoint positionNow = CGPointMake(backgroundImage.position.x, backgroundImage.position.y); 
CGPoint positionPrev = CGPointMake(0.5, 0.5); 

float xdiff = positionNow.x - positionPrev.x; 
float ydiff = positionNow.y - positionPrev.y; 

CGPoint newPositionOne = CGPointMake(0.5- xdiff, 0.5 - ydiff); 
newPositionOne = CGPointMake(newPositionOne.x/rifleZoom, newPositionOne.y/rifleZoom); 

現在這不完美的作品不管怎樣,圖像縮放多少。我似乎無法實現它將圖像從與圖像中心相對的屏幕中心向上縮放。

縮放來之前我已經試過

我試圖改變圖像的位置。與newPositionOne相同的點,但是,這不起作用或沒有正確完成。

編輯

這種規模和帶來的中心屏幕中心點,或完全攪亂。這是一個有點太離譜,做出決定到底是做什麼。

CGPoint positionNow = CGPointMake(backgroundImage.position.x, backgroundImage.position.y); 
CGPoint positionPrev = CGPointMake(0.5, 0.5); 

float xdiff = positionNow.x - positionPrev.x; 
float ydiff = positionNow.y - positionPrev.y; 

CGPoint newPositionOne = CGPointMake(0.5- xdiff, 0.5 - ydiff); 
newPositionOne = CGPointMake(newPositionOne.x/rifleZoom, newPositionOne.y/rifleZoom); 


double xPosition = newPositionOne.x/backgroundImage.size.width; 
double yPosition = newPositionOne.y/backgroundImage.size.height; 

CGPoint prevAnchorPoint = backgroundImage.anchorPoint; 
backgroundImage.anchorPoint = CGPointMake(xPosition,yPosition); 

double positionX = backgroundImage.position.x + (backgroundImage.anchorPoint.x - prevAnchorPoint.x) * backgroundImage.size.width; 
double positionY = backgroundImage.position.y + (backgroundImage.anchorPoint.y - prevAnchorPoint.y) * backgroundImage.size.height; 

backgroundImage.position = CGPointMake(positionX,positionY); 


[backgroundImage runAction:[SKAction repeatAction:[SKAction scaleTo:rifleZoom duration:1.0] count:1]]; 
+0

我也嘗試過,現在的定位點,但有錨點必須保持中央的形象,因爲這是節點如何加入。但是在縮放時,我需要將焦點集中在zomming的中心點上,iPhone屏幕居中,而不是圖像的中心。 – user2415313 2015-02-11 14:25:02

回答

1

您可以使用背景節點的錨點屬性來更改圖像縮放的點。默認情況下,anchorPoint爲(0.5,0.5)。這表示節點的中心。如果您創建了anchorPoint(0,0),那麼它將移動到左下角。

anchorPoint:定義精靈中對應於 節點位置的點。您可以在單位 座標空間中指定該屬性的值。默認值是(0.5,0.5),這意味着 精靈集中在其位置上。

當你轉移anchorPoint,必須再次調整背景位置的運動抵消因改變anchorPoint

所以,你可以使用,

CGPoint xPosition = convertedPoint.x/background.size.width 
CGPoint yPosition = convertedPoint.y/background.size.height 

CGPoint prevAnchorPoint = background.anchorPoint 
background.anchorPoint = CGPointMake(xPosition,yPosition) 

CGFloat positionX = background.position.x + (background.anchorPoint.x - prevAnchorPoint.x) * background.size.width 
CGFloat positionY = background.position.y + (background.anchorPoint.y - prevAnchorPoint.y) * background.size.height 

background.position = CGPointMake(positionX,positionY) 
+0

我已經更新了我的答案,但是您提供的代碼看起來會將圖像的中心放到我當前定位點的中心位置,但是縮放。我需要對其進行縮放,即從屏幕中心展開,只要我已經實施了正確的「縮放」效果 – user2415313 2015-02-11 14:50:38

+0

。 – user2415313 2015-02-11 14:52:10

+0

爲什麼'postionPrev =(0.5,0.5)'?不應該把屏幕中心轉換成背景座標嗎? – rakeshbs 2015-02-11 15:00:25