Проблема столкновения от текстуры Swift SKphysicsbody - PullRequest
0 голосов
/ 29 сентября 2019

Я пытаюсь создать столкновение для двумерного игрового дома, такого как стены, мебель и т. Д. Но когда я пытаюсь создать физическое тело из текстуры, я сталкиваюсь только с одной стеной.

Я пытался установить коллизии с редактором и в коде.

let colhouse = self.childNode(withName: "Umatilla")!
let texture = SKTexture(imageNamed: "warehouse-collisions")
colhouse.physicsBody = SKPhysicsBody(texture: texture, size: texture.size())

Я хочу, чтобы коллизии были на всей текстуре, фон прозрачен, поэтому некоторые тела не соприкасаются илиподключено: warehouse-collisions

1 Ответ

0 голосов
/ 30 сентября 2019

Попытка создать одно физическое тело из текстуры с не непрерывными телами невозможна с помощью функции SKPhysicsBody(texture: texture, size: texture.size()).

Чтобы обойти это, создайте узлы в редакторе, разместите их над зонами столкновения(только для справки).Это само по себе решит проблему, однако, если вы начнете создавать большую карту.Это вызывает проблему задержки с xcode.Чтобы обойти это, я взял в качестве позиции ширину и высоту.Затем создайте границы в коде следующим образом:

//okay so this is the first thing we have to run, setup the collisions
func setupCollisions(){
    //first we need the data
    let data = [
        SKPhysicsBody(rectangleOf: CGSize(width: 7.096, height: 180.423), center: CGPoint(x: 215.266, y: -5.504)),
        SKPhysicsBody(rectangleOf: CGSize(width: 429.879, height: 6.631), center: CGPoint(x: -3.222, y: -92.34)),
        SKPhysicsBody(rectangleOf: CGSize(width: 7.096, height: 173.735), center: CGPoint(x: -214.614, y: -2.161)),
        SKPhysicsBody(rectangleOf: CGSize(width: 43.492, height: 144.075), center: CGPoint(x: -189.318, y: -16.986)),
        SKPhysicsBody(rectangleOf: CGSize(width: 133.314, height: 45.883), center: CGPoint(x: -100.913, y: -66.08)),
        SKPhysicsBody(rectangleOf: CGSize(width: 58.041, height: 6.642), center: CGPoint(x: -182.044, y: 81.377)),
        SKPhysicsBody(rectangleOf: CGSize(width: 301.388, height: 6.662), center: CGPoint(x: 61.022, y: 81.386)),
        SKPhysicsBody(rectangleOf: CGSize(width: 89.409, height: 93.006), center: CGPoint(x: 93.072, y: -12.631))
    ]
    //now lets create a single physicsbody from all the data
    let physicsbody1 = SKPhysicsBody(bodies: data)


    physicsbody1.isDynamic = false
    self.physicsBody = physicsbody1
}

как только вы сделаете это таким образом, удалите узлы коллизий (стены, диваны, разное и т. Д.) Из редактора, как мы их сейчас создаем в коде.Просто убедитесь, что вы запустили пользовательскую функцию setupCollisions () как можно скорее или нужнее.

...