2014-03-31 2 views
2

Xcode의 spritekit으로 게임을 제작하고 있습니다. 그것의 플랫폼 게임과 지금은 평평한 지상 조각으로 잘 작동합니다. 충돌에 대한 png의 투명성을 무시할 수 있는지 궁금합니다. 말하자면, 내가 곡면과 투명도가있는 바닥 조각을 골짜기에 채워 넣으면 플레이어가 모든 것을 덮는 사각형 경계 상자 대신 곡선을 걷게 할 수 있습니까? 내가 발견 할 수있는 유일한 예는 Gamemaker GML 언어입니다. 이미지의 빈 공간이 스프라이트의 일부로 간주되지 않도록 "정밀한"충돌을 수행 할 수 있습니다. 필자는 필요하다면 코드를 제공 할 수 있지만 이것은 개념적 질문 이상의 것 같습니다. 미리 감사드립니다.스프라이트 키트 충돌 : 투명도 무시?

+0

+ (SKPhysicsBody *) bodyWithPolygonFromPath : (CGPathRef) path;를 사용할 수 있습니다. 그래서 네, 가능합니다, 프레임 워크 방법을보십시오. – Roecrew

답변

3

안녕하세요, Apple 문서에서 제공하는 쉬운 해결책이 있습니다.

SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"Spaceship"]; 
sprite.physicsBody = [SKPhysicsBody bodyWithTexture:sprite.texture size:sprite.texture.size]; 

이렇게하면 텍스처의 물리적 경로 주위에 물리학자가 생성됩니다.

Simulating Physics - SpriteKit Programming Guide

+1

bodyWithTexture : size :는 iOS 8.0 이상에서만 사용할 수 있습니다. https://developer.apple.com/library/prerelease/ios/documentation/SpriteKit/Reference/SKPhysicsBody_Ref/index.html#//apple_ref/occ/clm/SKPhysicsBody/bodyWithTexture:size : – Whirlwind

1

문제의 노드의 물리 구조를 인스턴스화하는 방법은 다음과 같습니다. 모든 충돌을 목적으로, 노드가 사각형이기 때문에

node.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:node.size]; 

은 아마 physicsBody를 만드는 가장 쉽고 가장 일반적인 방법이지만, 또한 위에서 식별 한 문제를 만듭니다.

다른 옵션을 보려면 the documentation for SKPhysicsBody을 (를) 살펴보십시오. PolygonFromPath 및 BodyWithBodies는 아마도 자신이 수행하는 작업에 가장 적합 할 것입니다.

+1

http://dazchong.com/spritekit/은 다각형 물리학을위한 CGPath를 만드는 데 도움이되는 훌륭한 도구입니다. – webbcode

0

SKPhysicsBody 오른쪽 이동, 그냥 SKPhysicsBody 여기의 색상과 기하학적 관점에서 단순화하여 성능을 개선하고하는 것이 별도의 (간체) 마스크 이미지를 가지고 의미가 않습니다 싶어 코드 :

let birdMask: UInt32 = 0x1 << 0 
let pipeMask: UInt32 = 0x1 << 1 
//... 

pipeImage = SKSpriteNode(imageNamed: "realImage") 
//... size and position 

let maskTexture = SKSpriteNode(imageNamed: mask) 
maskTexture.size = pipeImage!.size // size of texture w/ real imageNamed 

pipeImage!.physicsBody?.usesPreciseCollisionDetection = true 
pipeImage!.physicsBody = SKPhysicsBody(texture: maskTexture.texture!, size: size)   
pipeImage!.physicsBody?.affectedByGravity = false // disable falling down... 
pipeImage!.physicsBody?.allowsRotation = false 
pipeImage!.physicsBody?.isDynamic = true 
pipeImage!.physicsBody?.friction = 0 
pipeImage!.physicsBody?.categoryBitMask = pipeMask 
pipeImage!.physicsBody?.collisionBitMask = birdMask | pipeMask 
pipeImage!.physicsBody?.contactTestBitMask = birdMask | pipeMask 

more detailed example/guide.

관련 문제