2014-07-18 2 views
3

이렇게 머리카락을 잡아 당기고 있습니다. SpriteKit과 Swift를 사용하여 약간의 게임을하고 있는데, SKSpriteNode를 서브 클래 싱하고, 몇 가지 추가 속성을 추가하고 touchesBegan()을 오버라이드했습니다. 그렇게. 나는이 있지만이없는 물론 자신의 논리와 touchesBegan() 기능이 기본 SKScene 클래스 ("GameScene")에 추가 이러한 개체의 배열이 있습니다하위 클래스의 SKSpriteNode 터치 이벤트가 무시됩니다.

class Digit : SKSpriteNode { 
    var userEntered = 0 
    var index = 0 
    ... (game properties) 

    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
    println("Digit.touchesBegan()" 
    ... 
    (game logic) 
    } 
    override func touchesMoved(touches: NSSet, withEvent event: UIEvent) {} 
    override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {} 
    override func touchesCancelled(touches: NSSet, withEvent event: UIEvent) {} 

} 

그 순간에 코드를 작성하십시오.

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
    println("GameScene.touchesBegan()") 
    ... 
} 

는 지금은 도청 때 실행해야하는 자리 클래스와 관련 로직을 가지고 있고, 이상한 것은 앱이 시뮬레이터에서 완벽하게 잘 작동한다는 것입니다 - Digit.touchesBegan()가 호출 그러나 직접 실행하는 경우 전화 상으로는 모든 것이 작동합니다. 숫자 스프라이트는 무시되고 탭이 스프라이트를 우회하는 것처럼 기본 gameScene.touchesBegan()이 대신 호출됩니다. userInteractionEnabled이 true로 설정되어 있으므로 여기에 뭔가가 누락 된 것인지, 아니면 iOS 7.1 (내 실제 전화와 동일)에 대한 빌드 설정에 대상 환경이 있기 때문에 이것이 맞는지 확실하지 않습니다. 나는 아직도 이것의 일부를 배우고 있다는 것을 인정한다. 그래서 어떤 도움이 높게 평가된다.

UPDATE

내 모든 문제는 실제 장치에서, 내가 추가했던 노드가없는 아이들 (따라서 nodeAtPoint로 인식되고 어떤 이유로 있다는 사실에 따른 생각() 노드가 장면 트리의 일부가 아니기 때문에 touchesBegan()이 무시됩니다. 이것이 버그인지 아닌지 또는 신속한 AnyObject 구현과 관련이 있는지는 잘 모르겠다. 자식은 AnyObject를 반환하지만 부모는 .parent가 아니지만 오늘 다음을 배웠다.

self는 기본 SKScene 클래스 ("gameScene ")이고 hud.hud 노드는 자식 노드로 추가 된 노드입니다. 다음 코드를 추가 :

println("self.children") 
println(self.children) 

println("hud.hudNode.parent") 
println(hud.hudNode.parent) 

결과를 실제 장치에서 테스트 할 때이 아니라 특히 이후, 비논리적 보인다 디버거

self.children 
nil 
hud.hudNode.parent 
<SKScene> name:'gameScene' frame:{{0, 0}, {320, 568}} 

에 다음에. 시뮬레이터에서 모든 자식 노드가 예상대로 표시됩니다. 누구나이 같은 문제에 부딪 치고 있지만 왜 이런 일이 일어나고 있는지 궁금해하는 경우 ...

답변

0

SKSpriteNode 클래스에서 속성 만 정의해야합니다.

SKSpriteNode 클래스는 장면 클래스를 호출하고 터치 기능에 대한 작업을 만듭니다. 장면 클래스

import UIKit 
import SpriteKit 

class Digit: SKSpriteNode { 
    var isAlive:Bool = false { 
     didSet { 
      if isAlive { 
       self.hidden = false 
      }else { 
       self.hidden = true 
      } 
     } 
    } 
    var numLivingNeighbors = 0 
} 

:

let classDigit = Digit(imageNamed: "hard_upper") 
classDigit.hidden = false 
........ 
예로서

관련 문제