gpt4 book ai didi

swift - 在 Swift/SpriteKit 中生成 Sprite 时出错

转载 作者:行者123 更新时间:2023-11-30 14:11:17 24 4
gpt4 key购买 nike

我的代码有问题。当我的障碍永远消失时,方 block 应该经过的“路径”有时会超出屏幕,并且不会位于我想要的位置。我希望路径在屏幕宽度的 1/4 之间。我认为错误出在宽度和 randomXPos 常量中。我怎样才能解决这个问题? (如果您想要进一步解释,我可以解释更多。)

func addObstacles2() {

let obstacle2A = SKSpriteNode(imageNamed: "Obstacle")
let obstacle2B = SKSpriteNode(imageNamed: "Obstacle")

let width = UInt32(self.frame.size.width / 5)
let randomXPos = CGFloat(arc4random_uniform(UInt32(width)))
let gapWidth = square.size.width * 2

let moveDown2A = SKAction.moveByX(0, y: -self.size.width, duration: 2.5)
let repeatAction2A = SKAction.repeatActionForever(moveDown2A)
let removeObstacle2A = SKAction.removeFromParent()
let moveAndRemove2A = SKAction.sequence([repeatAction2A, removeObstacle2A])

obstacle2A.size = CGSize(width: self.frame.size.width, height: 300)
obstacle2A.position = CGPointMake(CGRectGetMidX(self.frame) + obstacle2A.size.width / 2 + gapWidth / 2 + randomXPos, self.frame.size.height * 2)
obstacle2A.zPosition = 40
obstacle2A.runAction(moveAndRemove2A)
self.addChild(obstacle2A)


let moveDown2B = SKAction.moveByX(0, y: -self.size.width, duration: 2.5)
let repeatAction2B = SKAction.repeatActionForever(moveDown2B)
let removeObstacle2B = SKAction.removeFromParent()
let moveAndRemove2B = SKAction.sequence([repeatAction2B, removeObstacle2B])

obstacle2B.size = CGSize(width: self.frame.size.width, height: 300)
obstacle2B.position = CGPointMake(CGRectGetMidX(self.frame) - obstacle2B.size.width / 2 - gapWidth / 2 + randomXPos, self.frame.size.height * 2)
obstacle2B.zPosition = 40
obstacle2B.runAction(moveAndRemove2B)
self.addChild(obstacle2B)

}

(请注意:我有一个函数可以让障碍物永远生成。)

最佳答案

好吧,看起来您从 Object2B 的 x 位置减去的有点太多了。

首先要认识到的重要一点是,self.frame.size.width 不会返回用户在设备上看到的宽度。实际上,它会返回一点额外的内容,因为 Sprite Kit 默认配置为具有一组坐标系,以便开发人员可以在坐标中进行硬编码并在每个设备上看到相同的东西。 (这是场景默认的缩放模式 - SKSceneScaleModeResizeFill)。

因此,如果我们从数学上看一下您正在做的事情,我们会发现您是从 View 的中间开始的(我相信 x 坐标 512)。然后,减去该值的一半,将您置于 x 坐标 256(已经接近离开屏幕)。然后你减去更多,从而导致一些节点离开屏幕。

您的随机值没有问题。这是因为使用默认坐标系你看不到其中的一些。尝试对值进行硬编码

关于swift - 在 Swift/SpriteKit 中生成 Sprite 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31735022/

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