gpt4 book ai didi

ios - 尝试在 UIView 中为 SKNode 设置动画

转载 作者:行者123 更新时间:2023-11-28 08:13:40 24 4
gpt4 key购买 nike

我以编程方式在我的 UIView 中创建了一个 SKView。现在我想在所有方向上为一个新的 SKNodes 设置动画,从中间开始(这有效)取决于通过的 View 。一切正常,除了 SKNode 的结束位置很奇怪。它不是向所有方向射击,而是进入一个角落,远离视野边界。它不应该超出 View 的边界。我正在将 CGPoint 从 View 转换为我的场景。

这是我的代码:

func animateExplosion(sender: UIButton){

let star = SKSpriteNode(imageNamed: "ExplodingStar")
let starHeight = sender.frame.height / 3
star.size = CGSize(width: starHeight, height: starHeight)
var position = sender.frame.origin
position = self.sceneScene.convertPoint(fromView: position)
star.position = position
let minimumDuration = 1
let maximumDuration = 2
let randomDuration = TimeInterval(RandomInt(min: minimumDuration * 100, max: maximumDuration * 100) / 100)
let fireAtWill = SKAction.move(to: getRandomPosition(view: sender), duration: randomDuration)
let rotation = SKAction.rotate(byAngle: CGFloat(randomAngle()), duration: Double(randomDuration))
let fadeOut = SKAction.fadeOut(withDuration: randomDuration)
let scaleTo = SKAction.scale(to: starHeight * 2, duration: randomDuration)
let group = SKAction.group([fireAtWill, rotation]) //for testing no fade out or remove parent
let sequence = SKAction.sequence([group])

if randomAmountOfExplodingStars > 0{
randomAmountOfExplodingStars -= 1
sceneScene.addChild(star)
star.run(sequence)
animateExplosion(sender: sender)
}
}

bug 正确所在的 getRandomPosition:

func getRandomPosition(view: UIView) -> CGPoint{
let direction = RandomInt(min: 1, max: 4)
var randomX = Int()
var randomY = Int()

if direction == 1{
randomX = Int(view.frame.width / 2)
randomY = RandomInt(min: -Int(view.frame.height / 2), max: Int(view.frame.height / 2))
}
if direction == 2{
randomX = RandomInt(min: -Int(view.frame.width / 2), max: Int(view.frame.width / 2))
randomY = Int(view.frame.height / 2)
}
if direction == 3{
randomX = -Int(view.frame.width / 2)
randomY = RandomInt(min: -Int(view.frame.height / 2), max: Int(view.frame.height / 2))
}
if direction == 4{
randomX = RandomInt(min: -Int(view.frame.width / 2), max: Int(view.frame.width / 2))
randomY = -Int(view.frame.height / 2)
}
var randomPosition = CGPoint(x: randomX, y: randomY)
//randomPosition = self.sceneScene.convertPoint(fromView: randomPosition)
return randomPosition
}

我知道代码看起来很糟糕,但它应该可以解决问题,对吗?传递的 View 是 UIView 内部的 UIButton。 SKView 与 UIView 共享完全相同的约束。动画应该从中间开始,到传递 View 边界的某处结束。

最佳答案

是的,它终于开始工作了。太笨了,我以前没有注意到。发件人将始终是较小的 UIView 内的子级。返回函数很好,但是 SKNode 不应该移动到返回函数,而是移动

更新代码:

let randomPositionOfSender = getRandomPosition(view: sender)
let fireAtWill = SKAction.moveBy(x: randomPositionOfSender.x, y: randomPositionOfSender.y, duration: randomDuration)

关于ios - 尝试在 UIView 中为 SKNode 设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43054892/

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