[在更新函数(Swift)中使用spriteKit增加spriteNode的大小

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

我在动画,物理和类似的东西上遇到麻烦。

无论如何,我要为一个球创建脉冲效应,其中脉冲本身能够与屏幕上的元素发生碰撞,因此我创建了另一个想要连续缩放的spriteNode(球的子代) ,无需依赖触摸。

我读到,在这些情况下,最好不要使用SKActions。

我的问题是:如何通过更新功能缩放或增加spriteNode的大小?

例如,代码代表了我到目前为止为运动所做的工作。

import SpriteKit
import GameplayKit

class GameScene: SKScene {

 var entities = [GKEntity]()
 var graphs = [String: GKGraph]()

 var movingSquareLv1 = SKSpriteNode()
 var pulsingSphereLv2 = SKSpriteNode()

 var lv2SpherePulse = SKSpriteNode()


 var xVeloicty: CGFloat = 100


 override func sceneDidLoad() {

  movingSquareLv1 = self.childNode(withName: "movingSquare") as!SKSpriteNode
  movingSquareLv1.physicsBody = SKPhysicsBody(rectangleOf: movingSquareLv1.size)
  movingSquareLv1.physicsBody ? .affectedByGravity = false

  pulsingSphereLv2 = self.childNode(withName: "pulsingSphere") as!SKSpriteNode
  pulsingSphereLv2.physicsBody ? .affectedByGravity = false

  lv2SpherePulse = pulsingSphereLv2.childNode(withName: "lv2SpherePulse") as!SKSpriteNode
  lv2SpherePulse.physicsBody ? .affectedByGravity = false


 }


 func touchDown(atPoint pos: CGPoint) {

 }

 func touchMoved(toPoint pos: CGPoint) {

 }

 func touchUp(atPoint pos: CGPoint) {

 }

 override func touchesBegan(_ touches: Set < UITouch > , with event: UIEvent ? ) {

  for t in touches {
   self.touchDown(atPoint: t.location( in: self))
  }
 }

 override func touchesMoved(_ touches: Set < UITouch > , with event: UIEvent ? ) {
  for t in touches {
   self.touchMoved(toPoint: t.location( in: self))
  }
 }

 override func touchesEnded(_ touches: Set < UITouch > , with event: UIEvent ? ) {
  for t in touches {
   self.touchUp(atPoint: t.location( in: self))
  }
 }

 override func touchesCancelled(_ touches: Set < UITouch > , with event: UIEvent ? ) {
  for t in touches {
   self.touchUp(atPoint: t.location( in: self))
  }
 }


 override func update(_ currentTime: TimeInterval) {

  rectMovement()


 }

 func rectMovement() {

  if movingSquareLv1.frame.maxX >= self.size.width / 2 {

   xVeloicty = -100

  } else if movingSquareLv1.frame.minX <= -self.size.width / 2 {
   xVeloicty = 100
  }

  let rate: CGFloat = 0.5
  let relativeVelocity: CGVector = CGVector(dx: xVeloicty - movingSquareLv1.physicsBody!.velocity.dx, dy: 0)
  movingSquareLv1.physicsBody!.velocity = CGVector(dx: movingSquareLv1.physicsBody!.velocity.dx + relativeVelocity.dx * rate, dy: 0)

 }

}

这是由两个精灵组成的对象,我要处理的是最大的一个。

“

swift xcode sprite-kit collision skspritenode
1个回答
0
投票

我不知道为什么您所读的内容都说操作不合适,但是如果您想从update中显式更改节点的大小,则可以设置其缩放比例。

myNode.setScale(2.5)  // 2.5x as big as normal
myNode.setScale(0.5)  // half size

myNode.xScale = 1.5
myNode.yScale = myNode.xScale * 2  // Set x and y separately for non-uniform scaling

请参阅SKNode的“缩放和旋转”部分中的文档:https://developer.apple.com/documentation/spritekit/sknode

© www.soinside.com 2019 - 2024. All rights reserved.