ios - 在捏合期间居中 SKSpriteNode

标签 ios sprite-kit

我已经在我的 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/

相关文章:

objective-c - 用手指触摸移动时防止 View 对象跳跃

iphone - 使用 NSSortDescriptor 时,您可以使用 NSPredicate 将获取的项目放在所有其他项目之前吗

ios7 - 在 SpriteKit 场景之间移动时如何释放内存

ios - 如何使用 swift 将每秒计数的分数添加到我的 iOS 游戏中?

ios - 触摸事件中 Sprite 的旋转

ios - 如何向我的 gameScene.swift 添加一个 ScrollView ,它将滚动浏览一系列 Sprite ?

objective-c - 为 Instagram 使用 gtm-oauth2 的 OAuth 失败

ios - MKMapView 调用 didSelectAnnotationView

ios - UIPopover 发布 iOS

swift - Swift中如何为不同的Spritenode设置不同的重力?