SpriteKit: как создать базовые физические суставы - программирование
Подтвердить что ты не робот

SpriteKit: как создать базовые физические суставы

Я пытаюсь создать простые суставы между двумя SKPhysicsBodies. Но они действуют странно. Мне хорошо известно, что опорные точки должны быть на месте координат. Пожалуйста, ознакомьтесь с исходным кодом.

Например, так получается фиксированное соединение после прикрепления небольшого квадрата на прямоугольнике.

-(void)createFixedJointOnScene:(SKScene*)scene

{

//Adding Rectangle

    SKSpriteNode* backBone = [[SKSpriteNode alloc] initWithColor:[UIColor whiteColor] size:CGSizeMake(20, 200)];
backBone.position = CGPointMake(CGRectGetWidth(self.frame)/2.0, CGRectGetHeight(self.frame)/2.0);
backBone.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:backBone.size];
backBone.physicsBody.categoryBitMask = GFPhysicsCategoryRectangle;
backBone.physicsBody.collisionBitMask = GFPhysicsCategoryWorld;
[scene addChild:backBone];

//Adding Square
SKSpriteNode* head = [[SKSpriteNode alloc] initWithColor:[SKColor grayColor] size:CGSizeMake(40, 40)];
head.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:head.size];
head.position = CGPointMake(backBone.position.x, backBone.position.y-40);
head.physicsBody.categoryBitMask = GFPhysicsCategorySquare;
head.physicsBody.collisionBitMask = GFPhysicsCategoryWorld;
[scene addChild:head];

//Pinning Rectangle and Square
NSLog(@"Head position %@", NSStringFromCGPoint(head.position));
SKPhysicsJointFixed* pin =[SKPhysicsJointFixed jointWithBodyA:backBone.physicsBody bodyB:head.physicsBody anchor:head.position];
[self.physicsWorld addJoint:pin];

}

enter image description here

https://dl.dropboxusercontent.com/u/62559842/PhysicsTest.zip

Спасибо.

4b9b3361

Ответ 1

Спасибо Smick. После сравнения кода Smick с моим я узнал, что порядок этих двух строк вызывает проблему.

head.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:head.size];
head.position = CGPointMake(backBone.position.x, backBone.position.y-40);

Когда я установил положение спрайта до установки его физического тела, все начало работать правильно.

head.position = CGPointMake(backBone.position.x, backBone.position.y-40);
head.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:head.size];

Теперь я привязал код Smick к полному коду и прикрепил ссылку сюда. Наслаждайтесь.

https://dl.dropboxusercontent.com/u/62559842/PhysicsTest_Final_Working.zip