gpt4 book ai didi

Swift - Sprite Kit 漂浮的气泡粘在角落

转载 作者:行者123 更新时间:2023-12-04 11:29:45 45 4
gpt4 key购买 nike

我正在尝试在我的 Watch 应用上创建一个 float 气泡 View 。气泡可以相互碰撞和弹开,也可以从屏幕的两侧弹开。但出于某种原因,气泡出现在视野范围之外并卡在框架的两侧而不是弹开。此代码在我的 iOS 应用程序上按预期工作,但在我的 Watch 应用程序中使用相同的代码时,却没有。
对我来说,这个确切的代码在我的 iOS 应用程序上完美运行但在 Watch 应用程序上没有多大意义。
我将以下代码传递给 SpriteView在我的 SwiftUI View 中

let ballCategory: UInt32 = 0xb0001
let edgeCategory: UInt32 = 0xb0010
var nodeCount = 0

override func sceneDidLoad() {
//set physicsWorld properties
physicsWorld.contactDelegate = self
physicsWorld.gravity = CGVector(dx: 0.0, dy: 0.0)

//set edges as PhysicsBody
let edge = SKPhysicsBody(edgeLoopFrom: self.frame)
edge.friction = 0
edge.categoryBitMask = edgeCategory
self.physicsBody = edge

makebubble()
makebubble()
makebubble()
makebubble()
}

func makebubble() {

let bubbleTexture = SKTexture(imageNamed: "bubble")
let bubble = SKSpriteNode(texture: bubbleTexture)
let bphysicsBody = SKPhysicsBody(circleOfRadius: bubbleTexture.size().height/2)

bphysicsBody.isDynamic = true
bphysicsBody.usesPreciseCollisionDetection = true
bphysicsBody.restitution = 0.5
bphysicsBody.friction = 0
bphysicsBody.angularDamping = 0
bphysicsBody.linearDamping = 0
bphysicsBody.categoryBitMask = ballCategory
bphysicsBody.collisionBitMask = ballCategory | edgeCategory
bphysicsBody.contactTestBitMask = ballCategory | edgeCategory
bubble.physicsBody = bphysicsBody
bubble.name = "bubble"

// Get a random possition within the width of the scene
let x = CGFloat(randomize(number: Int(size.width - 40)))
let y = CGFloat(randomize(number: Int(size.height - 40)))

// position the bubble
bubble.position.x = x
bubble.position.y = y

// Add the bubble
addMyChild(node: bubble)
}

func addMyChild(node:SKSpriteNode){
self.addChild(node)
node.physicsBody!.applyImpulse(CGVector(dx: 10.0, dy: -2.0))
nodeCount += 1
}

// function that returns a random int from 0 to n-1
func randomize(number: Int) -> Int{
return Int(arc4random()) % number
}
bubbles watch bubbles

最佳答案

这与 watchOS 无关,而与 Apple Watch 的小屏幕尺寸有关。尝试使用宽度为 150 和高度为 150 的框架修饰符在 iOS 上运行您的代码,您就会明白我的意思;气泡可能会粘在一边。
您的气泡看起来像是粘在边缘,因为它们会随着时间的推移变慢(由于恢复是 0.5 而不是 1),并且从统计上看,气泡的最终运动更可能靠近屏幕边缘(因为它们最终会移动到边缘,从它反弹,从而减速并最终停止)。
您可以为此做以下 3 件事:

  • 如前所述,将恢复增加到 1(这是可选的,因为它本身不会解决“坚持边缘”的问题,但它有助于改善减速问题)
  • 检测气泡何时停止(您可以通过 checking the x and y velocity 中的 the update(_:) function of your SKScene 来做到这一点)并施加一个力,使它们沿随机方向略微移动。如果您心情好,您甚至可以制作一个计时器来制造随机的、几乎不会引起注意的力量,就像微小的空气运动一样(有可能,它甚至会使动画更加逼真)
  • 创建一个带有略微非线性/圆形边界和角落的外部边界框,使气泡以不同的方式从墙壁反弹
  • 关于Swift - Sprite Kit 漂浮的气泡粘在角落,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67832327/

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