2015-09-14 4 views
0

Я создаю матрицу 2x2 и помещаю в нее узлы. Когда я выбираю узел внутри позиции матрицы, он меняет свой цвет на красный, используя действие colorize.touchsBegan with physhicsBody

Проблема в том, что если изображение узла слишком велико, он распознает прикосновение, даже если я коснусь другого квадрата матрицы.

Например:

[0-0][0-1] 
[1-0][y] 

Мой узел находится в квадрате Y (позиция: 1-1). Если изображение больше размера квадрата, он получит прикосновение, даже если я нажму на квадрат 1-0.

Я не могу получить прикосновение, используя положение матрицы узла, потому что изображение перекрывает его, чтобы оно никогда не касалось квадрата матрицы.

Есть в любом случае я мог бы получить контакт с помощью PhyshicsBody узла вместо

let location = touch.locationInNode(self) 
let node = nodeAtPoint(location) 

ответ

1

Если я правильно понял ваш вопрос.

Насколько я понимаю, вам необходимо, чтобы элемент краски соответствовал касанию.

Что я делаю, в этом примере я использую Сцена для справки, но вы можете делать с другими Sprite, ну, я нарезаю свой экран на 4 части, и я получил точку касания и проверил положение в Сцене.

class test:SKScene{ 
    override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { 
     if let touch = touches.first as? UITouch{ 
      let touchLocation = touch.locationInNode(self) 

      if touchLocation.x < self.size.width/2 && touchLocation.y < self.size.height/2 { 
       //paint red [1,0] 
      }else if touchLocation.x < self.size.width/2 && touchLocation.y > self.size.height/2 { 
       //paint red [0,0] 
      }else if touchLocation.x > self.size.width/2 && touchLocation.y > self.size.height/2 { 
       //paint red [0,1] 
      }else if touchLocation.x > self.size.width/2 && touchLocation.y < self.size.height/2 { 
       //paint red [1,1] 
      } 
     } 
    } 
} 

Надежда помогла вам ..

+0

Это помогает в пути, но им на самом деле делает матрицу 5x9. Так что это будет большая работа, чтобы сделать 45 других ifs. Я не понимаю, почему nodeAtLocation получает мой Sprite поверх моего PhyshicsBody. Не существует способа изменить это поведение? – Gusfat

+1

Хорошо, я понимаю, но вы можете сделать другим способом, вы можете создать 2 узла, узел для добавления изображения и узел для проверки касания. или вы можете сделать некоторую функцию для получения id в Array of Elements, например API 'func getTouchId (ids: [Int], sizeOfScene: CGRect, touchPosition: CGPoint) -> Int' .. Я думаю, помог вам – ViTUu

+0

Спасибо! Я думаю, что это должно помочь. Но прежде чем я попробую другой aproach – Gusfat

Смежные вопросы