Wenn ich einen Impuls von 1 in der y-Richtung anwende, springt der Ball vor und zurück, ohne Energie zu verlieren. Wenn der Anfangsimpuls jedoch 0,5 oder niedriger ist, verliert der Ball sofort die gesamte Energie, wenn er auf die Wand trifft. Warum passiert dies? Ich habe ein ziemlich gutes Verständnis der Eigenschaften der SKPhysicsBody-Klasse. Probieren Sie diesen Code aus, um zu sehen, ob Sie das gleiche Verhalten auf Ihrem Computer haben.SpriteKit Ball verliert alle Energie schlagende Wand, Restitution = 1
-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
/* Setup your scene here */
self.physicsWorld.gravity = CGVectorMake(0.0f, 0.0f);
SKPhysicsBody* borderBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame];
self.physicsBody = borderBody;
self.physicsBody.friction = 0.0f;
self.backgroundColor = [SKColor colorWithRed:0.7 green:0.7 blue:0.7 alpha:1.0];
SKShapeNode *ball = [SKShapeNode node];
CGMutablePathRef pathToDraw = CGPathCreateMutable();
[ball setStrokeColor:[UIColor blackColor]];
CGPathMoveToPoint(pathToDraw, NULL, 0, 0);
CGPathAddEllipseInRect(pathToDraw, NULL, CGRectMake(-16, -16, 32, 32));
ball.path = pathToDraw;
ball.position = CGPointMake(size.width/2, size.height/2);
ball.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:ball.frame.size.width/2];
ball.physicsBody.friction = 0.0f;
ball.physicsBody.restitution = 1.0f;
ball.physicsBody.linearDamping = 0.0f;
ball.physicsBody.allowsRotation = NO;
[self addChild:ball];
[ball.physicsBody applyImpulse:CGVectorMake(0, 0.5)];
}
return self;
}
Ja. Ich bekomme das gleiche Verhalten. – ZeMoon