Hi,
I am asking you for a problem of contact between two objects.
I am currently using PNG images and the contact is on the outline of the image and not the image itself. I would like that the transparent part is not taken into account for the contacts between the objects, I do not find my error. here is my code:
my SKSpriteNode:
let EnnemisOrdinateur1Category:UInt32 = 0b0100 //4
let PouvoirPlayer1Category:UInt32 = 0b01000 //8
func ennemis1() {
let EnnemisOrdinateur11 = SKSpriteNode()
EnnemisOrdinateur11.name = "EnnemisOrdinateur1"
EnnemisOrdinateur11.size.width = WidthDelEnnemis //Largeur
EnnemisOrdinateur11.size.height = EnnemisOrdinateur11.frame.width //Hauteur
EnnemisOrdinateur11.position = positionDepartEnnemisOrdinateur
EnnemisOrdinateur11.physicsBody = SKPhysicsBody(rectangleOf: EnnemisOrdinateur11.size)
EnnemisOrdinateur11.physicsBody?.isDynamic = true
EnnemisOrdinateur11.physicsBody?.categoryBitMask = EnnemisOrdinateur1Category
EnnemisOrdinateur11.physicsBody?.contactTestBitMask = MurOUobjetCategory | PouvoirPlayer1Category
EnnemisOrdinateur11.physicsBody?.collisionBitMask = MurOUobjetCategory | PouvoirPlayer1Category
EnnemisOrdinateur11.physicsBody?.usesPreciseCollisionDetection = true
Vueprincipale.addChild(EnnemisOrdinateur11)
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches {
if (touchedNode.name?.contains(« EnnemisOrdinateur1 »))! {
let CategoryContactAttaque1 = EnnemisOrdinateur1Category
DeployerPouvoir(Texture1: TexturePouvoirBouleDeFeu, Child1: BouleDeFeu1, Parent: Vueprincipale, TimeInter: 0.1, NombreDImage: 4, NameImage: "BouleDeFeu", NameDuPouvoir1: "BouleDeFeu", Taille1:"1", PositionDoigt2:PositionDoigt1, PositionDeDepart1: player1.position, CategoryContactAttaque:CategoryContactAttaque1, CategoryDuChild:PouvoirPlayer1Category)
}
}
}
func DeployerPouvoir(Texture1:[SKTexture], Child1:SKSpriteNode, Parent:SKSpriteNode, TimeInter:Double, NombreDImage: Int, NameImage:String, NameDuPouvoir1:String, Taille1:String, PositionDoigt2:CGPoint, PositionDeDepart1:CGPoint, CategoryContactAttaque:UInt32, CategoryDuChild:UInt32) {
var texture1 = [SKTexture]()
var Child = Child1
var Taille:CGFloat = Parent.frame.height/10
if Taille1 == "1" {
}
func Texture() {
for i in 1...NombreDImage {
let textureName = "\(NameImage)\(i)"
texture1.append(SKTexture(imageNamed: textureName))
}
if (texture1.count>1) {
Child = SKSpriteNode(imageNamed: "\(NameImage)1")
Child.position = PositionDeDepart1
Child.size.width = Taille
Child.size.height = Taille
Child.zPosition = 99
}
}
Texture()
let ImageCase1 = Child
ImageCase1.name = "\(NameDuPouvoir1)"
ImageCase1.size.width = Taille
ImageCase1.size.height = Taille
ImageCase1.physicsBody = SKPhysicsBody(circleOfRadius: ImageCase1.size.width / 2)
ImageCase1.physicsBody?.categoryBitMask = CategoryDuChild
ImageCase1.physicsBody?.isDynamic = true
ImageCase1.physicsBody?.contactTestBitMask = CategoryContactAttaque
ImageCase1.physicsBody?.collisionBitMask = CategoryContactAttaque
ImageCase1.physicsBody?.usesPreciseCollisionDetection = true
Parent.addChild(ImageCase1)
let titi = SKAction.repeatForever((SKAction.animate(with: texture1, timePerFrame: TimeInterval(TimeInter))))
var actionArray = [SKAction]()
actionArray.append(SKAction.move(to: CGPoint(x: PositionDoigt2.x, y: PositionDoigt2.y), duration: 1))
ImageCase1.run(titi)
actionArray.append(SKAction.removeFromParent())
ImageCase1.run(SKAction.sequence(actionArray))
var angle:CGFloat = 0
angle = atan2(PositionDoigt2.x - PositionDeDepart1.x , PositionDoigt2.y - PositionDeDepart1.y)
ImageCase1.zRotation = -angle
}
contact:
func didBegin(_ contact: SKPhysicsContact) {
let bodyA = contact.bodyA.categoryBitMask
//let bodyB = contact.bodyB.categoryBitMask il nest pas utilise
let collision = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask
print("BodyA:\(contact.bodyA.categoryBitMask) //BodyB \(contact.bodyB.categoryBitMask) // Colision:\(collision)")
if collision == EnnemisOrdinateur1Category | PouvoirPlayer1Category {
if bodyA == 0b100 {
print(«contact1»)
}
}
}
thank you for your help !
Max