首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SKSpriteNode ScaleUpFrom?

SKSpriteNode ScaleUpFrom?
EN

Stack Overflow用户
提问于 2015-02-11 11:32:42
回答 1查看 41关注 0票数 1

问题

然而,放大2D图像,从图像中心点开始放大。我需要它从一个特定的协调中扩大?

代码语言:javascript
复制
[backgroundImage setScale:rifleZoom];

我现在放大图像的技术。

我需要从中央屏幕放大,而不是中心图像。

现在,我在屏幕中央放置步枪射击的方法是这样的:

代码语言:javascript
复制
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相同的观点,这不起作用或做得不对。

编辑

这一比例,并带来中心到屏幕的中心点,或完全混乱。这实在是太草率了,无法做出正确的决定。

代码语言:javascript
复制
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]];
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-11 14:11:12

您可以使用背景节点的锚点属性来更改图像缩放点。默认情况下,anchorPoint为(0.5,0.5)。这表示节点的中心。如果生成anchorPoint (0,0),则其移动到左下角。

anchorPoint :定义与节点位置相对应的sprite中的点。在单位坐标空间中指定此属性的值。默认值为(0.5),这意味着sprite以其位置为中心。

当您移动anchorPoint时,您必须再次调整背景位置,以抵消由于更改anchorPoint而引起的移动。

所以你可以用,

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28453291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档