2016-06-30 3 views
1

현재 게임을 실험 중입니다. Doodle Jump 나 Mario와 같은 게임에서 볼 수있는 것과 같이 떠 다니는 "플로어"또는 "플랫폼"을 만들고 싶습니다. 나는 현재 라인 이미지가있는 SKSpriteNodes를 텍스처로 가지고 있습니다. 처음에는 SKPhysicsBody를 직사각형으로 설정했지만 라인이나 "바닥"은 충돌 할 때 내 주 스프라이트의 움직임을 방해합니다. 나는 "층"이 그들에게 착륙 할 수있는 속성을 갖기를 원합니다. 또한, 바닥 아래에 있다면, 나는 그것을 통해 그것을 뛰어 넘을 수 있도록 허용하고 싶습니다.Swift : 내 게임에 층을 추가하는 방법?

func addLines(){ 

    var lineTexture = SKTexture (imageNamed: "redline.png"); 
    var lineMovement = SKAction.moveByX(-self.frame.size.width * 2, y: 0, duration: Double(self.frame.size.width/100)); 
    line = SKSpriteNode (texture: lineTexture); 


    line.position = CGPointMake (CGRectGetMidX (self.frame) + self.frame.size.width/3, CGFloat(random()) % (self.frame.size.height - 30)); 

    //line.physicsBody = SKPhysicsBody (rectangleOfSize: CGSizeMake (lineTexture.size().width, lineTexture.size().height)); 
    //line.physicsBody!.dynamic = false; 

    line.runAction (lineMovement); 
    self.addChild (line); 

} 

답변

-1

가능한 한 가지 방법은 게임에서 플레이어의 위치를 ​​감지하는 것입니다. 플레이어의 위치가 플로팅 플로어 아래에 있다면, "더미"플로어 만 존재합니다 (이미지 스프라이트와 같지만 물리 본문은 없습니다). 플레이어의 위치가 바닥 위에 있으면 바닥에는 즉시 물리학자가 있습니다.

세부 구현이 다를 수 있습니다. 예를 들어, bool을 저장하여 바닥에 물리 구조가 있는지 확인할 수 있습니다.

0

스프라이트의 상태에 따라 collissionBitMask을 동적으로 변경해야합니다. 이를 수행하는 가장 좋은 방법은 해당 플랫폼에 대해 contactBitMask 플래그를 특별하게 설정하는 것입니다.

스프라이트가 플랫폼과 접촉 할 때 플랫폼이 스프라이트 아래에 있는지 여부를 평가합니다. 플랫폼이 스프라이트 아래에 있으면 플랫폼에 collissionBitMask 플래그를 설정하고, 그렇지 않으면 플래그를 제거하십시오.

플랫폼에서 모두 수행 할 수 있어야합니다. 플랫폼은 스프라이트 위치에 따라 스프라이트로 콜리 전을 활성화/비활성화해야하지만 스프라이트에 콜리 전 비트 마스크가 없어야합니다. 왜냐하면 스프라이트에서 스프라이트를 활성화하면 수직 계단처럼 서로 옆에 2 개의 플랫폼을 가질 수 없기 때문입니다 .

관련 문제