AnchroPoint x:0, y:0 не работает с уравнением

Я пытаюсь создать игру Breakout, в которой я устанавливаю кирпичи именно так, как я хочу, для каждого уровня, используя 1 SKSpriteNode. Все работает, так как они появляются, но далеко за пределами экрана в левом нижнем углу. Я использую следующую строку прямо в начале didMove (для просмотра: SKView):

scene?.anchorPoint = CGPoint(x: 0.0, y: 0.0)

И код, который я использую для создания кирпичей:

//MARK: Brick Layout Config
let widthOfTiles = 7
let heightOfTiles = 3

let widthPoints = 50
let heightPoints = 20

// Different tile arrangements (e.g. 7 tiles wide, 3 high, 7*3 = 21 total tiles)
var brickArray = [false,  true, false,  true, false,  true, false,
                  false,  true,  true,  true, false,  true, false,
                  false,  true, false,  true, false,  true, false] // Says 'HI' using tiles

override func didMove(to view: SKView) {

    //MARK: Brick
    for tile in 0..<brickArray.count {
        if brickArray[tile] == true {

            let brick = SKSpriteNode(imageNamed: "red_brick")

            brick.position = CGPoint(x: (tile % widthOfTiles) * (widthPoints) - (widthOfTiles / 2 * (widthPoints)),
                                     y: ((tile - (tile % widthOfTiles)) / widthOfTiles) * (heightPoints) - (heightOfTiles / 2 * (heightPoints)))
            brick.size = CGSize(width: widthPoints, height: heightPoints)
            brick.physicsBody = SKPhysicsBody(rectangleOf: brick.frame.size)
            brick.physicsBody?.friction = 0
            brick.physicsBody?.allowsRotation = false
            brick.physicsBody?.friction = 0
            brick.physicsBody?.isDynamic = false
            brick.physicsBody?.categoryBitMask = brickCategory
            self.addChild(brick)
        }
    }
}

Я не могу ни за что, чтобы это было в центре сцены. Может быть, кто-нибудь поможет мне разобраться в этом. Математика - мое слабое место, и хотя я думаю, что правильно понял уравнение для нереста, позиция далека от идеала.

Если я пропустил что-то, что вам нужно увидеть, пожалуйста, дайте мне знать.


person Community    schedule 23.04.2018    source источник
comment
Почему вам нужен якорь на 0,0? Значение по умолчанию 0,5,0,5 не работает для конкретной анимации? Если требуется 0,0, вам придется отрегулировать положение, чтобы оно располагалось там, где вы хотите. Есть вопросы, которые показывают, что это необходимо для корректировки   -  person agibson007    schedule 24.04.2018
comment
Я просто так привык к 0,0. И не могу уложиться в голове 0,5   -  person    schedule 24.04.2018
comment
Если это не относится к анимации, не меняйте точку привязки. В противном случае вы получите другое визуальное представление вашей позиции.   -  person agibson007    schedule 24.04.2018
comment
Понятно, спасибо, можете ли вы поставить это как ответ, чтобы я мог закрыть вопрос.   -  person    schedule 24.04.2018
comment
Кстати, я не использую никаких .sks, я программирую все только в коде. Так что по умолчанию для этого 0.0   -  person    schedule 24.04.2018
comment
Извините, но значение точки привязки по умолчанию равно 0,5. Вы можете говорить о происхождении   -  person agibson007    schedule 24.04.2018
comment
developer.apple.com/documentation/spritekit/skspritenode/   -  person agibson007    schedule 24.04.2018
comment
Итак, что я получил, так это то, что если я удалю весь код точки привязки, который я установил, то точка привязки станет 0,0. Я знаю, что значение по умолчанию для файлов .sks равно 0,5, но, поскольку я их не использую, я удалил и GameScene.sks, и ActionScebe.sks, а в GameViewController у меня это как let scene = GameScene(size: view.frame.size) и якорная точка, кажется, равна 0,0, если я не установлю для файла GameScene.swift значение scene?.anchorpoint = CGPoint(x: 0,5, y: 0,5)   -  person    schedule 24.04.2018
comment
Вы никогда не принимаете во внимание ширину и высоту сцены в своей математике, так зачем ей центрироваться?   -  person Knight0fDragon    schedule 25.04.2018
comment
Если вы возьмете размер экрана / 2 и вычтете периметр ваших плиток / 2, это приведет к центрированию вашего блока. Таким образом, scene.width / 2 - (widthPoints * widthOfTiles) / 2 является вашей начальной позицией, затем добавьте позицию смещения плитки к этому числу (или используйте другой SKNode для смещения для вас)   -  person Knight0fDragon    schedule 25.04.2018
comment
Спасибо, вы можете добавить это в качестве ответа?   -  person    schedule 25.04.2018


Ответы (1)


Если вам не нужна анимация, которая зависит от точки привязки, я бы не стал устанавливать ее и оставить значение по умолчанию, иначе она изменит визуальное представление положения слоя.

person agibson007    schedule 23.04.2018