2015-02-04 4 views
0

저는 게임을 가지고 있으며 playScene에서 SKLabeleNode를 생성하는 함수를 만들었습니다. 이제는 장면에 노드를 추가하기 위해이 함수를 호출 할 수 있습니다. 노드가 장면에 추가되므로 다음 단계는 방금 장면에 ​​추가 한 노드를 선택할 수 있어야합니다. /////////////////////////////////////////////////////////////////////////////////////////////// 이와 관련하여 문제가 있습니다 ////////////////////////////////touchBegan에서 노드를 선택할 수 없습니다

여기에서 앞서 만든 노드를 선택하고 함수에서 만든 SKLabelNode와 비교합니다. 함수에서 생성 한 노드가 처음 선택한 노드에 == 인 경우 처음에 선택한 노드를 제거해야합니다. 기능. 문제가 발생했습니다. 함수에서 생성 된 노드를 선택할 수 없습니다.

// 이건 내가 할 수있는 가장 작은 버전으로, GameScene 클래스 및 작업에 복사 할 수 있습니다. 및 SKSpriteNode (imageNamed : "B")

수입 SpriteKit 수입 재단 클래스 GameScene : SKScene {

var yellowColor = UIColor.yellowColor() 
var redColor = UIColor.redColor() 

let upperCaseA = SKSpriteNode(imageNamed: "A") 
let upperCaseB = SKSpriteNode(imageNamed: "B") 

var smallSizeLatter = CGSize() 
var largeSizeLatter = CGSize() 

var tempVarToHoldPlaceToMakeItRun = SKLabelNode(text: "A") 

var latterADefaults: NSUserDefaults = NSUserDefaults.standardUserDefaults() 
var latterBDefaults: NSUserDefaults = NSUserDefaults.standardUserDefaults() 

override func didMoveToView(view: (SKView!)) { 

    _ = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: ("fallTheText"), userInfo: nil, repeats: true) 

    self.backgroundColor = UIColor.whiteColor() 

    latterADefaults.setBool(true, forKey: "latterADefaultsKey") 
    latterBDefaults.setBool(true, forKey: "latterBDefaultsKey") 
    smallSizeLatter  = CGSize(width: 37, height: 37) 
    largeSizeLatter  = CGSize(width: 54, height: 54) 
    upperCaseA.size  = smallSizeLatter 
    upperCaseA.position = CGPoint(x: self.frame.width/8, y: self.frame.height * 0.75) 
    upperCaseB.size  = smallSizeLatter 
    upperCaseB.position = CGPoint(x: self.frame.width/8, y: self.frame.height * 0.65) 

    self.addChild(upperCaseA) 
    self.addChild(upperCaseB) 

} 
func fallTheText(){ 

    let theFallingText  = SKLabelNode(text: "A") 

    let theLowerCaseLatter: [String] = ["a", "b",] 
    let textIndex    = Int(arc4random_uniform(UInt32(2))) 
    let lowerCaseLatter    = theLowerCaseLatter[textIndex] 
    theFallingText.text  = lowerCaseLatter 

    theFallingText.name = lowerCaseLatter 

    print("the name is", theFallingText) 


    let colorListOfColors: [UIColor] = [yellowColor, redColor,] 
    let colorIndex     = Int(arc4random_uniform(UInt32(2))) 
    let colorOfColors    = colorListOfColors[colorIndex] 
    theFallingText.fontColor  = colorOfColors 


    theFallingText.fontName = "HoeflerText-BlackItalic" 
    theFallingText.fontSize = 40 


    func randomRange (lower: UInt32 , upper: UInt32) -> UInt32 { 
     return lower + arc4random_uniform(upper - lower + 1) 
    } 
    let minValue     = self.size.width/3 
    let maxValue     = self.size.width - 50 
    let uppers     = UInt32(maxValue) 
    let lowers     = UInt32(minValue) 
    let spawnPoint    = CGFloat(randomRange(lowers, upper: uppers)) 
    theFallingText.position = CGPoint(x: spawnPoint, y: self.size.height * 0.85) 


    let actionY     = SKAction.moveToY(-30, duration: 20) 
    theFallingText.runAction(SKAction.repeatActionForever(actionY)) 
    self.addChild(theFallingText) 
} 

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    for touch: AnyObject in touches{ 
     let positionOfTouch = touch.locationInNode(self) 
     let nodeAtLocation = self.nodeAtPoint(positionOfTouch) 
     if nodeAtLocation == upperCaseA { 
      if latterADefaults.boolForKey("latterADefaultsKey"){ 
       upperCaseA.size = largeSizeLatter 
       latterADefaults.setBool(false, forKey: "latterADefaultsKey") 
       upperCaseB.size = smallSizeLatter 
       latterBDefaults.setBool(true, forKey: "latterBDefaultsKey") 
      }else{ 
       upperCaseA.size = smallSizeLatter 
       upperCaseB.size = smallSizeLatter 
       latterADefaults.setBool(true, forKey: "latterADefaultsKey") 
      } 
     } 
: 수행해야합니다 // 유일한 것은 SKSpriteNode ("A"imageNamed를) MAKE입니다 나는 IT가 RUN하려면이 TEMP에 노드를 추가 한자는 어디에 문제 ////////

는 여기 /////////

 if nodeAtLocation == tempVarToHoldPlaceToMakeItRun{ 
      if tempVarToHoldPlaceToMakeItRun.text == "yellow"{ 
       print("danny", tempVarToHoldPlaceToMakeItRun.name) 
       if upperCaseA.size == largeSizeLatter{ 
        tempVarToHoldPlaceToMakeItRun.removeFromParent() 
        upperCaseA.size = smallSizeLatter 
       } 


      } 
     } 
     if nodeAtLocation == upperCaseB { 
      if latterBDefaults.boolForKey("latterBDefaultsKey"){ 
       upperCaseA.size = smallSizeLatter 
       latterADefaults.setBool(true, forKey: "latterADefaultsKey") 
       upperCaseB.size = largeSizeLatter 
       latterBDefaults.setBool(false, forKey: "latterBDefaultsKey") 
      }else{ 
       upperCaseB.size = smallSizeLatter 
       latterBDefaults.setBool(true, forKey: "latterBDefaultsKey") 
      } 
     } 
    } 
} 

}

이 노드를 어떻게 비교하여 비교할 수 있습니까? 운이없는 SKLabelNode를 반환하는 함수를 변경했습니다. 반환 값이없는 함수를 사용하려고했습니다. NSTimer를 제거하고 함수를 행운과 함께 self.addChild (fallTheText)로 추가했습니다. 함수에서 생성 된 SKLabelNode가 모든 경우에 장면 아래로 흐르고 있습니다. 이제 비교하려고 할 때 첫 번째 노드를 건 드리면 반응하지만 노드가 함수에서 새 노드를 추가합니다. 함수에 의해 생성 된 하강 노드를 선택하려고하면 함수에서 더 많은 노드를 계속 추가하고 떨어지는 노드를 선택하지 않습니다.

목표는 무작위로 떨어지는 후자이며 고정 된 이미지 인 '만졌을 때 크기가 조정됩니다'를 비교 한 다음 타락한 텐트 편지를 제거합니다.

+1

아마도 충돌 감지를 추가 하시겠습니까? – rakeshbs

답변

0

노드를 함수에 추가하고 함수를 자식으로 추가하면 장면 아래로 텍스트가 스크롤되지만 부모 노드가 노드에 추가되지는 않습니다.

노드를 함수 외부로 이동하고 노드 이동을 처리하는 새로운 함수를 만들었습니다.

func timer1(){ 
    theFallingText.removeActionForKey("actionYKey") 
    let actionYY = SKAction.moveToY(self.size.height * 0.85, duration: 0.0) 
    theFallingText.runAction(SKAction.repeatAction(actionYY, count: 1)) 
    fallTheText()  
} 

은 내가 didMoveToView에서 fallTheText 함수를 호출했다.

0

설정하여 장면에 물리학 경계, 장면의 크기가 화면의 크기와 같은 경우

self.physicsBody = SKPhysicsBody(edgeLoopFromRect: 
     CGRectMake(0, 0, self.frame.width, self.frame.height)) 

확인 마십시오. 그렇지 않으면 경계가 화면 영역 밖으로 설정됩니다.

설정

labelNode.physicsBody = SKPhysicsBody(rectangleOfSize: labelNode.frame.size) 

선택적으로 충돌 할 수있는 라벨의 categoryBitMaskcollisionBitMask을 설정하여 라벨에 물리학 바디. 추가 정보 : https://developer.apple.com/library/ios/documentation/GraphicsAnimation/Conceptual/CodeExplainedAdventure/HandlingCollisions/HandlingCollisions.html

관련 문제