我在SpriteKit中有一个函数,它在屏幕顶部产生一个精灵(它是一个正方形),然后重力将精灵拉到屏幕的底部。我试图让精灵无限期地平滑旋转,直到它到达屏幕底部时被移除。以下代码在sprite的类中:
func rotate() {
var action = SKAction.rotateByAngle(CGFloat(M_PI_2), duration: NSTimeInterval(1.5))
var repeatAction = SKAction.repeatActionForever(action)
self.runAction(repeatAction)
}
我遇到的问题是,当精灵转动时,精灵会沿着自身底部的方向移动,而不是朝向屏幕的底部(重力应该是方向)。为了进一步说明,物体旋转,但当它旋转到90度时,它会向侧面而不是向下行进。这对我来说没有意义。这是我用来在didMoveToView()
函数中添加重力的代码:
self.physicsWorld.gravity = CGVectorMake(0.0, -1.8)
这是用于生成精灵的代码(rs.rotate()
调用上面列出的rotate方法):
func spawnRedSquares() {
if !self.gameOver {
let rs = RedSquare()
var rsSpawnRange = randomNumberBetween(self.leftSideBar.position.x + rs.sprite.size.width / 2, secondNum: self.rightSideBar.position.x - rs.sprite.size.width / 2)
rs.position = CGPointMake(rsSpawnRange, CGRectGetMaxY(self.frame) + rs.sprite.size.height * 2)
rs.zPosition = 3
self.addChild(rs)
self.rsArray.append(rs)
rs.rotate()
let spawn = SKAction.runBlock(self.spawnRedSquares)
let delay = SKAction.waitForDuration(NSTimeInterval(timeBetweenRedSquares))
let spawnThenDelay = SKAction.sequence([delay, spawn])
self.runAction(spawnThenDelay)
}
}
如何让物体旋转,但仍然像正常重力一样坠落?
答案 0 :(得分:1)
看起来你正在将旋转动作添加到'self',我认为这是你的场景而不是你的精灵。这导致整个场景旋转,因此它的重力也在旋转。
将旋转动作添加到精灵中,这应解决问题。
示例:假设您的方形精灵被称为squareSprite
:
let action = SKAction.rotateByAngle(CGFloat(M_PI_2), duration: NSTimeInterval(2))
let repeatAction = SKAction.repeatActionForever(action)
squareSprite.runAction(repeatAction) //Add the repeatAction to your square sprite