2013-12-09 10 views
6

So che per le UIViews tradizionali, posso impostare il flag "abilita interazione utente" su NO, e la vista non risponderà più ai tocchi, lasciando che le viste sottostanti ricevano dei tocchi.Kit sprite iOS7 come disabilitare i tocchi su uno sprite per renderlo "tap through"?

C'è qualche modo per implementare la stessa funzionalità "tap through" in Sprite Kit? Finora ho visto solo persone che usavano "Touches started", ottenendo il punto e chiedendo la scena per i nodi a quel punto.

Il problema con questo approccio è - se voglio aggiungere sovrapposizioni agli sprite (come mostri punti vita, ecc.) Risponderanno anche ai tocchi. Finora sto cercando di evitare questo problema creando classi personalizzate per diversi nodi, e quindi avendo un'istruzione if molto grande, controllando la classe di ogni nodo.

C'è un modo migliore per ottenere funzionalità "tap through" per il kit sprite?

+0

Puoi semplicemente impostare 'node.userInteractionEnabled = NO;'? – Evan

risposta

16

Se si imposta la proprietà userInteractionEnabled su YES su un SKSpriteNode sottoclassato, i delegati di tocco verranno richiamati all'interno della classe. Quindi, puoi gestire il tocco per lo sprite all'interno della sua classe.

Tuttavia, per impostazione predefinita, la proprietà userInteractionEnabled è impostata su NO. Quindi il tocco su uno sprite è, di default, un "tap through".

Così, per le sovrapposizioni che si desidera, creare classi personalizzate per gli sprite, attuare le touchesBegan: e altri delegati all'interno di quella classe e mentre inizializzazione, impostare la proprietà userInteractionEnabled-YES.

+0

Vorrei poterlo sovvertire più volte, questo mi ha reso la vita molto più semplice –

+0

@akashg - Lo stesso problema qui, e non sono sicuro di come questo lo abbia risolto. Ho una scena (userInteractionEnabled = NO) contenente uno sprite personalizzato con l'overlay occasionale (userInteractionEnabled = NO) che lo passa sopra. Lo sprite personalizzato ascolta i colpetti fino a quando non si sovrappone a un overlay e quindi non sente nulla. Come faccio a far passare i tocchi attraverso la sovrapposizione allo sprite sottostante? Grazie! – wanderlust

+0

@wanderlust - dipende dall'albero del nodo. Poiché la proprietà userInteractionEnabled degli overlay è impostata su NO, il tocco verrà intercettato dal parent genitore degli overlay, o così via finché il nodo non sarà interattivo. Ecco, immagino che il genitore sia la scena. Dovrai implementare alcune funzionalità nei delegati del tocco della scena che "consegnano" il tocco al nodo che si trova sul punto di contatto. – ZeMoon

6

Sprite Kit utilizza il valore zPosition solo per determinare il test di successo e l'ordine di disegno.

Quindi potresti mettere tutti i tuoi sprite più in alto di 0 se non vuoi colpirli. E quindi un test logico semplice è zPostion> 0

Problemi correlati