/ / Comment créer un corps physique en forme d'oeuf avec CGPathRef? - ios, sprite-kit, cgpath, skphysicsbody

Comment créer un corps physique de forme d'œuf avec CGPathRef? - ios, kit sprite, cgpath, skphysicsbody

chemin des œufs

Je dois créer un CGPathRef pour simuler la propriété physique dans Sprite Kit.

J'essaie de créer un chemin en forme d'oeuf par unmoitié du cercle plus moitié de l'ovale. le rapport de l'œuf est compris entre 0,4 (bas du demi-cercle) et 0,6 (haut de la moitié ovale); Cependant, je ne sais pas pourquoi rien ne se passe. Le code suivant est la création du chemin:

    self.egg = [SKSpriteNode spriteNodeWithImageNamed:IMAGE_NAME_EGG];
[self.egg setScale:0.2];
self.egg.position = CGPointMake(self.size.width/2,self.size.height - self.egg.size.height/2);
self.egg.name = IMAGE_NAME_EGG;
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddArc(path, NULL, 0, self.egg.size.height*0.4, self.egg.size.width/2, M_PI, M_PI_2, NO);
CGPathAddEllipseInRect(path, NULL, self.egg.frame);
self.egg.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromPath:path];
self.egg.physicsBody.dynamic = YES;
self.egg.physicsBody.categoryBitMask = eggCategory;
self.egg.physicsBody.contactTestBitMask = floorCategory;
self.egg.physicsBody.collisionBitMask = floorCategory;
//self.eggCanMove = NO;
self.egg.physicsBody.allowsRotation = YES;
[self addChild:self.egg];

Réponses:

1 pour la réponse № 1

Il y a une meilleure façon de faire cela. Faites une texture de votre oeuf avec p.e. Adobe Illustrator et utilisez cette méthode:

init(texture texture: SKTexture!,alphaThreshold alphaThreshold: CFloat,size size: CGSize) -> SKPhysicsBody
  1. le SKTexture est votre image d'oeuf. Le corps est défini par les pixels colorés.
  2. le alphaThresHold: La valeur alpha minimale pour les texels qui devraient faire partie du nouveau corps physique.
  3. le Size est clair je pense.

La texture est analysée et tous les pixels invisibles situés autour de l'œuf sont ignorés et seuls les pixels de couleur sont interprétés comme le corps du SKPhysicsNode. Vous ne devriez pas en utiliser trop car ils sont très coûteux à calculer pour le moteur physique.

Des variantes de cette méthode se trouvent dans la Référence de la classe SpriteKit.