2016-09-14 3 views
1

다른 클래스의 장면에 SKSpriteNode를 추가 할 수 있습니까?다른 클래스의 장면에 SKSpriteNode를 추가 할 수 있습니까?

은 * 다음은

그래서

나는 사용자 정의 클래스와 SKScene이 ..

class MainMenu: SKScene { 

    code... 

} 

와 사용자 정의 클래스와 다른 SKScene ..

class GameOver: SKScene { 

    code... 

} 

내가 다른 클래스가 예 라는 팝업 메뉴 ...

class PopupMenu: SKScene { 

    func addSprite() { 

    theSprite = SKSpriteNode.init(imageNamed: "theImage") 
    theSprite.position = CGPointMake(self.frame.width/2, self.frame.height/2) 
    theSprite.zPosition = 2 

    self.addChild(theSprite) 

} 

그래서 내가 뭘 하려는지 MainMenu 장면 및 GameOver 장면 모두 표시 메뉴 단추를 클릭하고 해당 장면에 해당 노드를 추가하려면 PopupMenu에서 함수를 호출 할 수있게 될 것입니다.

각 장면 클래스에서 팝업 코드를 작성하여이 작업을 수행 할 수 있지만 재사용 성 측면에서이 작업을 수행하는 가장 좋은 방법은 아닌 것 같습니다.

더 좋은 방법이 있나요?

답변

2

게임을 잘하려면 먼저 새로운 장면으로 넘어갈 때 이전 장면이 할당 취소되도록해야합니다. 난 당신이 사용자 정의 클래스에 대한 공통 메뉴 또는 공통 메뉴 버튼을 구성하고 당신이 원하는 어디서든 호출 할 수 있습니다 생각 :

class MenuButton : SKSpriteNode 
{ 
    var length: CGFloat! 

    override init(texture: SKTexture!, color: SKColor!, size: CGSize) { 
     self.length = 50 // default lenght 
     super.init(texture: texture, color: color, size: size) 
    } 

    convenience init(color: SKColor, length: CGFloat = 50) { 
     var size = CGSize(width: length, height: length); 
     self.init(texture:nil, color: color, size: size) 
     self.length = length 
    } 

    required init?(coder aDecoder: NSCoder) { 
     // Decoding length here would be nice... 
     super.init(coder: aDecoder) 
    } 
} 
+0

내 말은 당신이 사용자 정의 클래스 (새로운 파일) f를 만들 수 있다는 것입니다 또는 MenuButton이 SKSpriteNode 메서드를 상속하므로 다음에 사용자 정의 버튼을 간단히 호출 할 때 myBtn = MenuButton.init (...) –

+0

@AlessandroOrnano를 호출하면이 질문에 대한 대답이 확실하지 않습니다. 할당 취소를 보장하는 코드를 확인하고 하위 클래스를 만드는 방법에 대한 코드를 표시하는 방법에 대해 이야기하는 것입니다. – Knight0fDragon

+0

@ Knight0fDragon 나를 놀리는 거니? 이것은 사용자 정의를 만드는 자연스러운 방법이며, 여러 가지 방법이 있습니다. 이것이 그 중 하나입니다. 임무를 수행하기 위해 여기에 온 것은 아니지만 올바른 길을 찾기위한 조언과 방법을 보여줍니다. 당신의 대답은 누드 코드가 할 수있는 것처럼 쉽게 커스터마이징하는 것이 쉽지 않기 때문에 제가 좋아하지 않는 또 다른 방법입니다.하지만 작동 할 수 있습니다. –

4

SKReferenceNodes에, 당신은 SpriteKit 장면 빌더를 통해 팝업 메뉴를 만들 수 있습니다, 다음 저장 이건 sks 파일입니다. 그것을 사용할 때가되면, 팝업 메뉴의 파일을 끌어 와서 장면에 추가하십시오.

출처 : https://developer.apple.com/reference/spritekit/skreferencenode

당신이 (내가 그냥 멋진과 엄청난 시간을 절약하기 때문에 사용하는 것이 좋습니다)를 SKS 빌더를 사용하지 않을 계획이라면 당신이 할 수있는 또 다른 것은, 같은 메뉴를 당신의 팝업 하위 클래스입니다 그런 다음

class PopupMenu: SKSpriteNode { 

    required init?(coder: aDecoder:NScoder) { 
     super.init(coder:aDecoder)  
    }  

    override init(texture: SKTexture!, color: SKColor!, size: CGSize) { 
     super.init(texture: texture, color: color, size: size) { 
    } 

    convenience init() { 
     self.init(imageNamed: "theImage") 
     self.zPosition = 2  
    } 


} 

이 장면 코드에서 바로 통화하는 SKSpriteNode 아닌 장면

let popup = PopupMenu() 
popup.position = CGPointMake(self.frame.width/2, self.frame.height/2) 
self.addChild(popup) 
+0

그건 흥미 롭다. 나는 그런 짓을 한 적이 없다.하지만 내가 그렇게한다면 어떻게 될까?그냥 sks 파일이라면, 메뉴 코드가 어디서 나왔을까요? –

+1

... 다른 코드가있는 같은 위치에 SKS 빌더의 장면에 사용자 정의 클래스 필드를 설정합니다. – Knight0fDragon

+0

코드로 SpriteKit 게임에서만 작업했기 때문에 그 사실을 알지 못했습니다. 나는 SKS 빌더를 사용하지 않는다. 왜냐하면 Xcode 7에서 버그가 많기 때문이다. 노드를 지우고 저축하기는하지만 모든 것을 제거하기도한다. –