如何围绕对象外部的点旋转节点(即不围绕对象的中心点旋转)
Posted
技术标签:
【中文标题】如何围绕对象外部的点旋转节点(即不围绕对象的中心点旋转)【英文标题】:How to rotate a node around a point outside of the object (i.e don't rotate around the center point of the object) 【发布时间】:2020-02-18 23:21:36 【问题描述】:我现在拥有的东西,我的游戏在 Xcode 上的模拟器上加载正常,但是当我点击屏幕时,“基本顶部”没有旋转。基本顶部是组成正方形的四个三角形之一。
我想要什么为了让那个正方形旋转,我必须让所有四个三角形都旋转。现在,即使我点击屏幕,基本顶部也不会旋转。一旦我得到基本的顶部旋转,我可以复制其他三角形的代码,以制作一个旋转的正方形。我需要这四个三角形都围绕某个点旋转。
代码
class GameScene: SKScene
var brickSwitch: SKSpriteNode!
var basicTop = SKSpriteNode(imageNamed: "Top Side");
var basicBottom: SKSpriteNode!
var basicLeft: SKSpriteNode!
var basicRight: SKSpriteNode!
override func didMove(to view: SKView)
layoutScene()
func turnBasicTop()
basicTop.isUserInteractionEnabled = true
basicTop.run(SKAction.rotate(byAngle: .pi/2, duration: 0.25))
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)
turnBasicTop()
func spawnBasicTop()
let basicTop = SKSpriteNode(imageNamed: "basic top")
basicTop.size = CGSize(width: 400, height: 400)
basicTop.position = CGPoint(x: 230, y: 200)
basicTop.zPosition = 1
basicTop.physicsBody = SKPhysicsBody(rectangleOf: basicTop.size)
basicTop.physicsBody?.categoryBitMask = PhysicsCategories.basicTopCategory
basicTop.physicsBody?.isDynamic = false
basicTop.physicsBody?.allowsRotation = true
addChild(basicTop)
【问题讨论】:
【参考方案1】:spawnBasicTop()
中定义的basicTop
指的是方法中定义的局部变量,因为与具有更大范围的另一个变量同名的局部变量优先引用。因此,当您尝试在turnBasicTop()
方法中对basicTop
运行动画时,该操作将在完全独立的SKSpriteNode
实例上运行。我想您没有看到任何事情发生,因为场景的 basicTop
属性引用的节点不在视图中;其isHidden
属性为真;或不能分配给图像"Top Side"
,因为它不存在,因此大小为零。添加
self.basicTop = basicTop
spawnBasicTop()
方法可以解决问题,不过我建议您更多地了解 Swift 以及如何声明、捕获变量等。
【讨论】:
以上是关于如何围绕对象外部的点旋转节点(即不围绕对象的中心点旋转)的主要内容,如果未能解决你的问题,请参考以下文章