作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在屏幕中央有一个 Sprite ,它可以向左或向右旋转,这是通过触摸屏幕的左侧或右侧部分来确定的。
我想做的是让 sprite 不断向前移动,但始终朝着它所面对的方向。我知道如何使用 SKActions 等进行基本运动...但不知道如何计算运动以在 Sprite 旋转到的方向上连续进行?
数学从来都不是我的强项,所以非常感谢一些示例代码来帮助我。
var player = SKSpriteNode()
override func didMove(to view: SKView) {
player = SKSpriteNode(imageNamed: "4B.png")
player.setScale(0.3)
player.zPosition = 100
self.addChild(player)
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if let touch = touches.first {
let position = touch.location(in: self)
if position.x < 0 {
let rotate = SKAction.repeatForever(SKAction.rotate(byAngle: CGFloat(M_PI), duration: 2))
player.run(rotate, withKey: "rotating")
} else {
let rotate = SKAction.repeatForever(SKAction.rotate(byAngle: CGFloat(-M_PI), duration: 2))
player.run(rotate, withKey: "rotating")
}
}
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
player.removeAction(forKey: "rotating")
}
override func update(_ currentTime: TimeInterval) {
// Called before each frame is rendered
}
最佳答案
您将需要使用 sin 和 cos。 SKAction 可能不是您最好的选择,所以我现在只在更新方法中执行此操作,直到您找到更好的位置:
sprite.position = CGPoint(x:sprite.position.x + cos(sprite.zRotation) * 10,y:sprite.position.y + sin(sprite.zRotation) * 10)
其中 10 是您希望 Sprite 移动的幅度(也就是移动 10 个像素)
这假设角度 0 表示 Sprite 向右看,角度 90 (PI/2) 向上看,角度 180 (PI) 向左看,角度 270 (3PI/2) 向下看。
关于sprite-kit - (Xcode Swift SpriteKit) 如何将 Sprite 朝它面对的方向移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41447663/
我是一名优秀的程序员,十分优秀!