Si une forme est un rectangle, la position tactile est exactement droite. mais si une forme contient une zone transparente (comme un triangle ci-dessous), lorsque l'utilisateur tape sur la zone transparente (c'est l'espace vide sur l'écran), le toucher est également valide.Comment obtenir la position tactile exacte d'un SKShapeNode?
Quand il y a beaucoup de formes à l'écran, l'utilisateur peut appuyez sur la bonne position, mais obtenir la mauvaise forme. Par exemple, si un utilisateur souhaite choisir le triangle vert et appuyer sur le point rouge, la forme sélectionnée sera un triangle rose car la zPosition du triangle rose est supérieure au triangle vert et la position tactile est dans la zone transparente du triangle rose.
Voici les codes pour créer la forme quand BEGIN:
var touchShapeName:String!
var currShape: SKShapeNode!
var shapeArr = [SKShapeNode]()
formes creat:
for i in 1...count {
let shape = SKShapeNode()
shape.path = petalPath
shape.strokeColor = UIColor(red: 0.9, green: 0.7, blue: 0.1, alpha: 1.0)
shape.lineWidth = 0.1
shape.glowWidth = 0.1
shape.fillColor = UIColor(red: getRandomColor(245, 255), green: getRandomColor(190, 210), blue: getRandomColor(10, 15), alpha: 0.98)
shape.name = "\(i)"
shape.position = CGPoint(x: frame.midX + CGFloat(30 * i), y:frame.midY + 60)
addChild(shape)
shapArr.append(shape)
}
J'utilise les codes suivants pour obtenir la forme:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch = touches.first
let location = touch?.location(in: self)
touchShapeName = self.atPoint(location!).name
if currShape == nil{
for s in shapeArr{
if s.name == touchShapeName{
currShape = s
}
}
}
}
Maintenant, les formes peuvent être créées et déplacées lorsque vous tapez sur la zone de couleur. Le problème est que tapoter sur la forme avec une zone transparente supérieure peut obtenir la mauvaise forme comme je l'explique ci-dessus.
Est-ce que j'écris les bons codes? Y a-t-il une autre solution pour obtenir la position exacte?
Thx.
Oui, c'est le bon code pour obtenir l'emplacement exact. Bien que vous ne pouvez pas cliqué sur l'image réelle, je veux dire l'image verte, mais en fonction de l'écran, la partie cliquée vous donne le point exact. – Poles
D'accord avec @poles. De plus, si ce dont vous avez besoin, ce sont les coordonnées du toucher par rapport à la forme verte, voir la méthode convert (_: to:) en SKNode. –
@AliBeadle sait comment l'obtenir avec la méthode convert (_: to :)? J'ai essayé currShape = SKShapeNode() convertir (emplacement !, à: currShape) impression (currShape.name), mais il imprimé nul. – jdleung