Установка положения SKSpriteNodes из пользовательского класса SKSpriteNode - PullRequest
1 голос
/ 16 января 2020

Я хочу установить положение skspritenode (hero) в моей игровой сцене, когда я назначаю ему свой класс (Character).

Когда ему дано CGPoints frame.midX и frame.midY он не знает, на какой кадр он ссылается, поэтому он обнаруживается где-то совершенно иначе.

Любая идея, как я могу исправить свой класс так, чтобы cPosition фактически установил позицию моего hero в моей игровой сцене?

Код класса

class Character: SKSpriteNode{

    var cSize: CGSize
    var cColor: UIColor
    let cName: String
    let cTexture: SKTexture
    let cPosition: CGPoint

    init(cTexture: SKTexture,cSize: CGSize,cColor: UIColor, cName: String,cPosition: CGPoint){

        self.cSize = cSize
        self.cColor = cColor
        self.cName = cName
        self.cTexture = cTexture
        self.cPosition = cPosition

        super.init(texture: cTexture, color: cColor, size: cSize)
    }

    func jump(xForce: CGFloat, yForce: CGFloat){
        physicsBody?.applyImpulse(CGVector(dx: xForce, dy: yForce))            
    }

Метод, в котором мой Character класс назначен моему hero:

     func addHero() {

            let hero = Character(cTexture: SKTexture(imageNamed: "testAvacado.png") ,cSize: CGSize(width: 68, height: 28), cColor: .blue, cName: "hero",
cPosition: CGPoint(x: frame.midX, y: frame.midY))

            hero.physicsBody = SKPhysicsBody(texture: hero.cTexture, size: hero.cSize)

            addChild(hero)
        }

1 Ответ

1 голос
/ 16 января 2020

Вы на самом деле не позиционируете свой спрайт, переменная cPosition в данный момент ничего не делает. Измените свой init метод следующим образом:

var cSize: CGSize
var cColor: UIColor
let cName: String
let cTexture: SKTexture
//let cPosition: CGPoint

init(cTexture: SKTexture,cSize: CGSize,cColor: UIColor, cName: String,cPosition: CGPoint) {

    self.cSize = cSize
    self.cColor = cColor
    self.cName = cName
    self.cTexture = cTexture
    //self.cPosition = cPosition

    super.init(texture: cTexture, color: cColor, size: cSize)

    self.position = cPosition
}
...