【问题标题】:Make a sprite go to a certain position depending on the sprite's current position?根据精灵的当前位置让精灵移动到某个位置?
【发布时间】:2014-10-09 19:44:38
【问题描述】:

我认为我的标题相当混乱,但我不确定如何命名。这是我当前的代码:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
SKAction *moveNodeRight = [SKAction moveByX:-209.0 y:0.0 duration:0.85];
 [_squirrelSprite runAction: moveNodeRight withKey:@"changeside"];
//_squirrelSprite.xScale = -1.0;

if(_squirrelSprite.xScale == -1.0)
{
    _squirrelSprite.xScale = 1.0;
} else {
    _squirrelSprite.xScale = -1.0;
}
}

当我点击屏幕时,精灵会移动到一个新位置(X:-209.0, Y:0.0)。新位置位于当前位置的左侧。当我第二次点击屏幕时,精灵只会移动到离屏幕更远的地方。

我想要什么:我对我目前所拥有的感到满意,但是当精灵处于新位置(X:-209.0,Y:0.0)时,我希望第二次点击将其返回到原来的位置.我认为它看起来像上面的代码,但到目前为止没有任何效果。下面是它可能是什么样子的一个想法。谢谢!

if(_squirrelSprite.position == the second position)
{
    _squirrelSprite.position = the first position;
} else {
    _squirrelSprite.xScale = the second position;
}

【问题讨论】:

    标签: ios if-statement ios7 sprite-kit sprite


    【解决方案1】:

    当用户点击屏幕时,这会将节点从一个位置移动到另一个位置。然后,当用户再次点击屏幕时,它会将节点移回原始位置。

    @interface MyScene()
    
    @property SKSpriteNode *squirrelSprite;
    @property BOOL atFirstPosition;
    @property CGPoint firstPosition;
    
    @end
    
    @implementation MyScene
    
    -(id)initWithSize:(CGSize)size
    {
        if (self = [super initWithSize:size])
        {
            _firstPosition = CGPointMake(300, self.frame.size.height/2);
            _squirrelSprite = [SKSpriteNode spriteNodeWithColor:[SKColor blueColor] size:CGSizeMake(32, 32)];
            _squirrelSprite.position = _firstPosition;
            _atFirstPosition = YES;
            [self addChild:_squirrelSprite];
        }
        return self;
    }
    
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
        if (_atFirstPosition)
        {
            SKAction *moveNodeLeft = [SKAction moveByX:-209.0 y:0.0 duration:0.85];
            [_squirrelSprite runAction: moveNodeLeft withKey:@"changeside"];
        } else {
            _squirrelSprite.position = _firstPosition;
        }
        _atFirstPosition = !_atFirstPosition;
        _squirrelSprite.xScale *= -1.0;
    }
    
    @end
    

    编辑: 这将使用 SKAction 将节点移回其原始位置

    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
        if (_atFirstPosition)
        {
            SKAction *moveNodeLeft = [SKAction moveByX:-209.0 y:0.0 duration:0.85];
            [_squirrelSprite runAction: moveNodeLeft withKey:@"moveleft"];
        } else {
            SKAction *moveNodeRight = [SKAction moveByX:209.0 y:0.0 duration:0.85];
            [_squirrelSprite runAction: moveNodeRight withKey:@"moveright"];
        }
        _atFirstPosition = !_atFirstPosition;
        _squirrelSprite.xScale *= -1.0;
    }
    

    【讨论】:

    • 谢谢,这看起来很棒!我要弄乱它,让它适合我当前的代码。
    • 您是否知道是否有一种方法可以为精灵添加一个持续时间,使其返回到原始位置,就像它最初移动时一样?除了完美,谢谢。 :)
    • 不客气。您可以使用另一个 SKAction 将节点移回其原始位置。我已经编辑了我的答案以包含执行此操作的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    相关资源
    最近更新 更多