我期待创造一个独特的IOS应用程序的开放屏幕,我希望有一个球下降的背景,以创造视觉兴趣。我正在didMove()函数中创建球,它们工作得很好,但只有一些时间。我认为这个框架太大,不能显示,这使得随机的X和Y坐标有时出现在屏幕外。
self.physicsWorld.gravity = CGVector.init(dx: 0, dy: -9.8)
let sceneBody = SKPhysicsBody(edgeLoopFrom: self.frame)
sceneBody.friction = 0
self.physicsBody = sceneBody
let minXValue: CGFloat = 0
let maxXValue: CGFloat = self.frame.size.width
let minYValue: CGFloat = 0
let maxYValue: CGFloat = self.frame.size.height
let wait = SKAction.wait(forDuration: 0.4)
let run = SKAction.run {
let randomXNumber = (CGFloat(arc4random()).truncatingRemainder(dividingBy: maxXValue)) + minXValue
let randomYNumber = (CGFloat(arc4random()).truncatingRemainder(dividingBy: maxYValue)) + minYValue
print("Random Y Number: \(randomYNumber)")
print("Random X Number: \(randomXNumber)")
let ball = SKShapeNode(circleOfRadius: 20)
ball.fillColor = SKColor(colorLiteralRed: 212.0, green: 217.0, blue: 128.0, alpha: 1)
ball.position = CGPoint.init(x: randomXNumber, y: randomYNumber)
ball.physicsBody = SKPhysicsBody(circleOfRadius: 20)
ball.physicsBody?.affectedByGravity = true
self.addChild(ball)
}
self.run(SKAction.repeatForever(SKAction.sequence([wait, run])))这是我的随机球代码。
我还希望这些球在到达容器底部时从视图中移除,以便提高所有设备的性能,而不存在冗余节点。
我需要哪些函数或代码块来实现这个概念?
发布于 2016-07-01 15:30:44
设置场景大小
在GameViewController.swift中,找到函数viewDidLoad,并在skView.presentScene(场景)上方添加以下一行
scene.size = skView.bounds.size 从视图中删除球
要将球从场景中移除,您可以检测到场景周围的edgeLoop与球之间发生了冲突。那就打电话给removeFromParent。
首先,将类声明更改如下:
class GameScene: SKScene, SKPhysicsContactDelegate
然后添加
physicsWorld.contactDelegate = self in didMoveToView.
其次,在GameScene.swift中的类声明之上,创建物理类别:
enum PhysicsCategory:UInt32
{
case edge = 1
case ball = 2
}接下来,将这些类别分配到边缘和球。(在sceneBody下添加前两行并插入第三行,其中定义了其他球物理属性):
self.physicsBody?.categoryBitMask = PhysicsCategory.edge.rawValue
self.physicsBody?.contactTestBitMask = PhysicsCategory.ball.rawValue
ball.physicsBody?.categoryBitMask = PhysicsCategory.ball.rawValue最后,检查碰撞情况:
func didBeginContact(contact: SKPhysicsContact) {
let firstBody = contact.bodyA
let secondBody = contact.bodyB
if firstBody.categoryBitMask == PhysicsCategory.edge.rawValue && secondBody.categoryBitMask == PhysicsCategory.ball.rawValue || firstBody.categoryBitMask == PhysicsCategory.ball.rawValue && secondBody.categoryBitMask == PhysicsCategory.edge.rawValue
{
if firstBody.categoryBitMask == PhysicsCategory.ball.rawValue {
firstBody.node?.removeFromParent()
} else {
secondBody.node?.removeFromParent()
}
}https://stackoverflow.com/questions/38129175
复制相似问题