精灵套件 - 设置位置不做任何事情

时间:2014-06-25 06:50:39

标签: ios objective-c sprite-kit

我试图在击中目标到屏幕中间后重置球,但是在声明声明之后我似乎再也无法设置它的位置了。

这就是我定义球的方式:

-(void)setUpBall {
    self.ball = [SKSpriteNode spriteNodeWithImageNamed:@"Ball"];
    self.ball.name = bName;
    self.ball.position = CGPointMake(self.frame.size.width/2, self.frame.size.height/2);

    self.ball.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:self.ball.frame.size.width/2];
    self.ball.physicsBody.restitution = 1.0;
    self.ball.physicsBody.angularDamping = 0.0;
    self.ball.physicsBody.linearDamping = 0.0;
    self.ball.physicsBody.friction = 0.0;
    self.ball.physicsBody.dynamic = true;
    self.ball.physicsBody.allowsRotation = false;
    self.ball.physicsBody.usesPreciseCollisionDetection = true;
    self.ball.physicsBody.categoryBitMask = bCategory;
    self.ball.physicsBody.collisionBitMask = pCategory | borderCategory;
    self.ball.physicsBody.contactTestBitMask = borderCategory;
    [self addChild:self.ball];

    [self.ball.physicsBody applyImpulse:CGVectorMake(15, 10)];
}

这是我将球重置到屏幕中间的代码

-(void)reset {
    NSLog(@"reset method ran");
    [self.ball setPosition: CGPointMake(self.size.width/2, self.size.height/2)];
}

似乎reset方法肯定已经运行,因为来自NSLog(@"reset method ran");的输出但是球始终继续移动,就像setPosition从不工作一样

3 个答案:

答案 0 :(得分:3)

如果调试碰撞或其他事情导致调用,则执行设置位置等操作可能无法在Sprite Kit中使用。如果需要重置它,可能需要向球添加BOOL属性以标记它,然后在更新所有精灵时调用重置。

我有一个小行星类型的游戏,当我试图用一个小型岩石替换一个大型小行星时,对着一个玩家的导弹进行碰撞检测 - 由于在碰撞检查期间设置了位置,它无效Sprite Kit更新循环的一部分。当我在更新循环的标准部分添加新岩石时,它工作正常。

答案 1 :(得分:0)

你能不能用以下方法替换你的重置方法:

-(void)reset {
    NSLog(@"reset method ran");
    self.ball.position = CGPointMake(self.size.width/2, self.size.height/2)];
}

我倾向于使用此而不是setPosition方法重新定位精灵。

答案 2 :(得分:0)

Yopu可以再次设置球。

-(void)reset 
{
    NSLog(@"reset method ran");
    [self.ball removeFromParent];
    [self setUpBall];
}