我试图在击中目标到屏幕中间后重置球,但是在声明声明之后我似乎再也无法设置它的位置了。
这就是我定义球的方式:
-(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
从不工作一样
答案 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];
}