2013-10-14 2 views
1

Я хочу, чтобы шарик-спрайт прыгал с земли каждый раз на ту же высоту. Но при каждом прыжке максимальное положение высоты мяча увеличивается.SpriteKit: неожиданный физический вопрос

-(id)initWithSize:(CGSize)size {  
    if (self = [super initWithSize:size]) { 

     SKNode *ground = [SKNode node]; 
     ground.physicsBody = [SKPhysicsBody bodyWithEdgeFromPoint:CGPointZero toPoint:CGPointMake(CGRectGetMaxX(self.frame), 0)]; 
     [self addChild:ground]; 

     SKShapeNode *ball = [[SKShapeNode alloc] init]; 
     CGMutablePathRef myPath = CGPathCreateMutable(); 
     CGPathAddArc(myPath, NULL, 0, 0, 30, 0, M_PI*2, YES); 
     ball.path = myPath; 
     ball.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMaxY(self.frame)-100); 
     ball.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:ball.frame.size.width/2]; 
     ball.physicsBody.linearDamping = 0.0; 
     ball.physicsBody.restitution = 1.0; 
     [self addChild:ball]; 

    } 
    return self; 

}

Любые предложения?

ответ

1

Посмотрите на установку как реституции, так и трения на обоих телах, а не только на шар. Если он растет и не сокращается, вероятно, с физическими органами может возникнуть ошибка. SKShapeNode, как известно, ненадежен в моем тестировании - вместо этого я бы использовал SKSpriteNode, чтобы поддерживать ваше здравомыслие.

+0

Какое отношение имеет узел к физике? Т.е. основному физическому телу не влияет связанное с ним представление. – LearnCocos2D

+0

Я думал то же самое, а затем начал использовать круговые узлы формы, такие как OP, и столкнулся с странными проблемами с физическими телами, которые были исправлены с помощью узлов спрайтов. Возможно, не проблема здесь, но в любом случае, я верю, что узлы в форме приведут вас к неприятностям в какой-то момент их текущего состояния. Вы не согласны? – Matt

+0

Я нахожу это очень маловероятным. Почему взгляд должен иметь какое-то значение для тела, тела одного и того же? И почему тело будет отличаться в зависимости от взгляда? Единственное, что может случиться, - это использовать свойства представления, такие как self.frame, для инициализации физического тела, как в этом примере (т. Е. Радиус зависит от ball.frame.size). – LearnCocos2D