gpt4 book ai didi

ios - 防止 Sprite 旋转改变重力

转载 作者:行者123 更新时间:2023-11-29 02:09:10 25 4
gpt4 key购买 nike

我在 SpriteKit 中有一个函数可以在屏幕顶部生成一个 Sprite (它是一个正方形),然后重力将 Sprite 拉到屏幕底部。我试图让 Sprite 平滑旋转无限长的时间,直到它到达屏幕底部时被移除。以下代码在 Sprite 类中:

func rotate() {
var action = SKAction.rotateByAngle(CGFloat(M_PI_2), duration: NSTimeInterval(1.5))
var repeatAction = SKAction.repeatActionForever(action)
self.runAction(repeatAction)
}

我遇到的问题是,当 Sprite 转动时, Sprite 会朝着其自身底部的方向移动,而不是朝向屏幕底部(重力应该是的方向)。为了进一步说明,物体会旋转,但当它旋转 90 度时,它会向侧面而不是向下移动。这对我来说没有意义。这是我用来在 didMoveToView() 函数中添加重力的代码:

self.physicsWorld.gravity = CGVectorMake(0.0, -1.8)

这是用于生成 Sprite 的代码(rs.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)
}
}

如何让物体旋转,但仍然像受正常重力影响一样掉落?

最佳答案

看起来你正在将旋转 Action 添加到“self”,我认为这是你的场景而不是你的 Sprite 。这导致整个场景旋转,因此它的重力也在旋转。

为您的 sprite 添加旋转 Action ,应该可以解决问题。

示例:假设您的方形 Sprite 名为 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

关于ios - 防止 Sprite 旋转改变重力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29465171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com