SKScene.size.width SKSpriteNode.size.width有什么区别? [关闭]

问题描述 投票:-1回答:1

我是swift 5]的新手。我在self.size.width中打印了GameScene,结果为677.0我从另一个类打印出了self.size.width-可以说Ground,结果为4002.0

我很困惑,请帮助。

非常感谢。

GameScene.swift:

导入SpriteKit

class GameScene: SKScene {
    let cam = SKCameraNode()
    let bee = SKSpriteNode()
    let ground = Ground()

    override func didMove(to view: SKView) {
      self.anchorPoint = .zero
      //self.backgroundColor = UIColor(red: 0.4, green: 0.6, blue: 0.95, alpha: 1.0)
      self.camera = cam
      self.addingTheFlyingBee()
      self.addBackground()

      let bee2 = Bee()
      bee2.position = CGPoint(x: 325, y: 325)
      self.addChild(bee2)

      let bee3 = Bee()
      bee3.position = CGPoint(x: 200, y: 325)
      self.addChild(bee3)

      ground.position = CGPoint(x: -self.size.width * 2, y: 0)
      ground.size = CGSize(width: self.size.width * 6, height: 0)
      ground.createChildren()
      self.addChild(ground)
  }

    override func didSimulatePhysics() {
        self.camera!.position = bee.position
  }

    func addBackground() {
      let bg = SKSpriteNode(imageNamed: "background-menu")
      bg.position = CGPoint(x: 220, y: 220)
      bg.zPosition = -1
      self.addChild(bg)

  }

    func addingTheFlyingBee() {
        bee.position = CGPoint(x: 250, y: 250)
        bee.size = CGSize(width: 38, height: 34)
        self.addChild(bee)

        let beeAtlas = SKTextureAtlas(named: "Enemies")
        let beeFrames : [SKTexture] = [
            beeAtlas.textureNamed("bee"),
            beeAtlas.textureNamed("bee-fly")
        ]
        let flyAction = SKAction.animate(with: beeFrames, timePerFrame: 0.14)
        let beeAction = SKAction.repeatForever(flyAction)
        bee.run(beeAction)

        let pathLeft = SKAction.moveBy(x: -200, y: -10, duration: 2)
        let pathRight = SKAction.moveBy(x: 200, y: 10, duration: 2)
        let flipTextureNegative = SKAction.scaleX(to: -1, duration: 0)
        let flipTexturePositive = SKAction.scaleX(to: 1, duration: 0)
        let flightOfTheBee = SKAction.sequence([ pathLeft, flipTextureNegative, pathRight, flipTexturePositive])
        let neverEndingFlight = SKAction.repeatForever(flightOfTheBee)
        bee.run(neverEndingFlight)

    }

Ground.swift:

import Foundation
import SpriteKit

class Ground: SKSpriteNode, GameSprite {
  var textureAtlas: SKTextureAtlas = SKTextureAtlas(named: "Environment")
  var initialSize = CGSize.zero

  func createChildren() {
    self.anchorPoint = CGPoint(x: 0, y: 1)
    let texture = textureAtlas.textureNamed("ground")
    var tileCount: CGFloat = 0
    let tileSize = CGSize(width: 35, height: 300)

    while tileCount * tileSize.width < self.size.width {
      let tileNode = SKSpriteNode(texture: texture)
      tileNode.size = tileSize
      tileNode.position.x = tileCount * tileSize.width
      tileNode.anchorPoint = CGPoint(x: 0, y: 1)
      self.addChild(tileNode)
      tileCount += 1
    }

  }

  func onTap() {}
}

我是Swift 5的新手。我在GameScene中打印出了self.size.width,结果是677.0我从另一个类中打印出了self.size.width-假设Ground,结果是4002.0我是困惑,...

ios swift game-development
1个回答
-1
投票

self代表classes。如果在self处写入gameScene.swift,则将取gameScene's width。如果在self处写入Ground.swift,则将取Ground's width

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.