2015-02-11 3 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 Однако это не работает или не выполняется правильно.

EDIT

Это весы и приносит центр на экран Centrepoint, или путает полностью. С манжетой слишком немного, чтобы принять решение, что именно оно делает.

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 center до точки, на которой экран iPhone центрирован, а не в центре изображения. – user2415313

ответ

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

+0

, пока я его реализовал в любом случае. – user2415313

+0

Почему 'postionPrev = (0.5,0.5)'? не должен ли он быть центром экрана, преобразованным в фоновые координаты? – rakeshbs

Смежные вопросы