2017-01-29 15 views
1

Так что я использую spritenode с изображением, и я не устанавливаю его положение. Забавно, что у меня возникали проблемы с настройкой позиции, поэтому я не сделал этого, и по умолчанию он был установлен в центр страницы (по понятной причине), который оказался безупречным. Итак, теперь в моем методе touchhesbegan я хочу изменить указанное изображение, если исходное изображение было нажато, поэтому я проверяю, соответствует ли затронутое местоположение узлу (изображения). Тогда, если это правда, я заменяю его новым изображением, которое называется «nowaves».Позиция SpriteNode в сравнении с местоположением касания

for touch in touches 
    { 
     let location = touch.location(in: self) 
     if (location == audioPlaying.position) 
     { 
      audioPlaying = SKSpriteNode(imageNamed: "nowaves") 
     } 

     else 
     { 

Вы, ребята, думаете, что мне нужно его прочитать? Хорошо, когда я попросил, чтобы я не тестировал его. Это то, что я пробовал:

audioPlaying.size = CGSize(width: frame.size.width/13, height: frame.size.height/20) 
    addChild(audioPlaying) 

Если у кого есть какие-либо идеи, что проблема, я хотел бы некоторую обратную связь, спасибо: D

ответ

0

Чтобы добавить к @sweeper, я все свое первоначальное содержание изображения в методе scenedidLoad, а не что я создал новый метод, который я уже использовал для другой функциональности, чтобы начать игру и имел Исходное изображение там, а теперь и все работает хорошо.

0

По умолчанию position свойства возвращает координату центра из узел. Другими словами, если вы не коснулись точного центра спрайта, то if (location == audioPlaying.position) никогда не будет правдой. Тем не менее, вы должны знать, что прикосновение к точной точке центра узла практически невозможно.

Таким образом, мы используем другой метод. Нам просто нужно проверить, является ли затронутый узел узлом, который вы хотите.

let touchedNode = self.nodes(at: touch.location(in: self)).first 
if touchedNode == audioPlaying { 
    // I think setting the texture is more suitable here, instead of creating a new node. 
    audioPlaying.texture = SKTexture(imageNamed: "nowaves") 
} 
+0

Эй, подметальная машина! Так что это был мой мыслительный процесс, прежде чем я даже проверил свою первоначальную идею. Я знал, что это будет точный центр, и теоретически я знал, что если бы пользователь должен был LITERALLY касаться x: 0, y: 0 Так что это полезно. Я просто попробовал его с идеей текстуры и, похоже, не работал, поэтому вместо старого узла я заменил новый узел нового изображения, что тоже не сработало. Фоновая информация: объявление нового узла как var в классе, а затем инициализация исходного изображения в функции scenedidLoad override, которую я добавил в мой класс! –

+0

@ instacatering Что вы подразумеваете под этим не работает? – Sweeper

+0

Итак, когда я использую вашу идею изменения текстуры, она остается. Когда вместо изменения текстуры я полностью создаю новый узел, он добавляет узел (я могу рассказать по счету узла в нижнем правом углу), но, очевидно, старый узел все еще существует, и мне просто нужно узнать, как удалить, какой я думаю, что я могу найти через информацию разработчика о spritekitnodes –