맨 위에 튀지 않지만 양쪽과 바운더리에서 튀는 것을 허용하는 복잡한 SKPhysicsBody를 만들려고합니다. 현재 두 개의 노드를 만들고 있습니다. 스프라이트의 이미지와 상상의 물리학 바디가없는 이미지.스프라이트 키트 - SKPhysicsBody를 측면에만 반품으로 만듭니다.
내 두 번째 노드는 첫 번째 노드와 일치하지만 첫 번째 노드와 크기가 같습니다. 앞면과 뒷면에 PhysicsBody가 있고 그만큼 손해가 있습니다. 내 주인공이 아래쪽과 앞쪽으로 튀어 오를 수있게 해줍니다. 스크린 샷 NDA 미만으로
가//This is the top part.
- (void)nodePhysicsBodySetup:(SKSpriteNode *)node
{
CGPoint topStart = CGPointMake(0, node.size.height);
CGPoint topEnd = CGPointMake(node.size.width, node.size.height);
SKPhysicsBody *topEdge = [SKPhysicsBody bodyWithEdgeFromPoint:topStart toPoint:topEnd];
node.physicsBody = topEdge;
//[SKPhysicsBody bodyWithBodies:@[topEdge, frontEdge, bottomEdge]]
//node.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:node.frame.size];
node.physicsBody.dynamic = NO;
node.physicsBody.restitution = 0.0;
node.physicsBody.affectedByGravity = NO;
node.physicsBody.categoryBitMask = groundCategory;
node.physicsBody.collisionBitMask = mainHeroCategory;
node.physicsBody.contactTestBitMask = mainHeroCategory;
}
//This is the bottom physicsbody that matches up with the image of the main node.
- (void)bottomNodePhysicsBodySetup:(SKSpriteNode *)node
{
CGPoint topStart = CGPointMake(0, node.size.height);
CGPoint frontEnd = CGPointMake(0,0);
CGPoint bottomEnd = CGPointMake(node.size.width,0);
SKPhysicsBody *frontEdge = [SKPhysicsBody bodyWithEdgeFromPoint:topStart toPoint:frontEnd];
SKPhysicsBody *bottomEdge = [SKPhysicsBody bodyWithEdgeFromPoint:frontEnd toPoint:bottomEnd];
bottomNode.physicsBody = [SKPhysicsBody bodyWithBodies:@[frontEdge, bottomEdge]];
bottomNode.physicsBody.dynamic = NO;
bottomNode.physicsBody.affectedByGravity = NO;
bottomNode.physicsBody.restitution = 0.5;
bottomNode.physicsBody.categoryBitMask = otherCategory;
bottomNode.physicsBody.collisionBitMask = mainHeroCategory;
bottomNode.physicsBody.contactTestBitMask = mainHeroCategory;
}
사진 : 여기
는 내 현재 설정을위한 코드입니다현재, 녹색 PhysicsBody이 노드에 연결되고, 빨간색 PhysicsBody가 부착 제 1 노드와 동일한 위치를 갖는 투명한 제 2 노드로 전송한다.
이것은 실제로 작동하지 않습니다. 내 주인공 (mainHeroCategory)은 노드 코너에서 때로는 튕겨 나옵니다. 반점이있는 PhysicsBody와 만나지 않은 노드입니다. 이 작업을 수행하는 더 좋은 방법은 무엇입니까?
물리 구조체의 어느 부분에 충돌했는지 감지하는 데 문제가 있습니다. 어떤 방법을 권하고 있습니까? 이것은 좋은 방법 인 것 같습니다. – Siriss
SKPhysicsContactDelegate를 구현하면 didBeginContact 메소드가 SKPhysicsContact 객체를 제공합니다. 해당 객체 https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKPhysicsContact/index.html#//apple_ref/doc/c_ref/SKPhysicsContact는 연락처가 발생한 위치에 대한 정보를 제공합니다. –