gpt4 book ai didi

ios - 在捏合期间居中 SKSpriteNode

转载 作者:行者123 更新时间:2023-12-01 22:47:17 25 4
gpt4 key购买 nike

我已经在我的 SKScene 上实现了缩放/捏合,并在此线程中选择了答案:

Zooming an SKNode inconsistent

我现在正试图让英雄角色在捏合或缩放 Action 期间保持居中(平滑),因为如果我不这样做,heroNode 将很快从屏幕上消失。我有一个 centerHero 方法,我可以在需要时调用它,而且效果很好,但是当我在夹点处理程序结束时调用此方法时,效果非常非常生涩。这是捏处理程序:

- (void)handlePinch:(UIPinchGestureRecognizer *) recognizer
{
[map runAction:[SKAction scaleBy:recognizer.scale duration:0]];
recognizer.scale = 1;

// While zooming/pinching, make sure hero is centered:
[self centerHero];
}

这是中心英雄方法:
- (void)centerHero
{
CGFloat centerX = self.view.bounds.size.width/2;
CGFloat centerY = self.view.bounds.size.height/2;

CGFloat heroX = [self.heroNode parent].position.x;
CGFloat heroY = [self.heroNode parent].position.y;

CGPoint heroPoint = CGPointMake(heroX, heroY);
CGPoint newHeroPoint = [self convertPoint:heroPoint fromNode:map];

CGFloat newHeroX = newHeroPoint.x;
CGFloat newHeroY = newHeroPoint.y;

CGFloat xDiff = centerX - newHeroX;
CGFloat yDiff = centerY - newHeroY;

SKAction *moveBy = [SKAction moveByX:xDiff y:yDiff duration:5];
[map runAction:moveBy];
}

关于如何使这种“自动居中”顺利进行的任何建议?

最佳答案

看起来好像您正在缩放 map 节点,而不是场景本身。缩放节点时,它将缩放到该节点的 anchor ,而不是简单地放大到可见区域的中心。

如果您缩放场景本身,它应该正确缩放所有内容,例如:

[self runAction:[SKAction scaleBy:recognizer.scale duration:0]];

假设您从 SKScene 中运行此操作。你也可以试试:
[map.scene runAction:[SKAction scaleBy:recognizer.scale duration:0]];

...这也将指向 map 所属的父场景。

关于ios - 在捏合期间居中 SKSpriteNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19922792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com