小编Oli*_*erD的帖子

SpriteKit:SKSpriteNodes在几秒钟后从SKEffectNode消失

我正在研究SpriteKit中的元球效果.我有一个带有着色器的SKEffectNode,它可以压缩缓冲区的颜色范围.这个effectnode有一百多个SKSpriteNode作为它的子节点.这种效果在几秒钟内效果很好,但突然间,在几帧的过程中,所有的spritenodes从屏幕上消失,并且nodecount从100-odd下降到2(我猜其余2个是效果节点)本身,以及形成容纳球的容器的边缘链?)

如果我将球spritenodes直接添加到场景的根节点,这不会发生.只有当他们成为效果节点的孩子时,他们才会在几秒钟之后被淘汰.

有趣的是,(如果帧速率非常低,这在模拟器中可见),SpriteNodes似乎以当前显示在屏幕上的垂直顺序被剔除,从屏幕顶部到底部.

如果视图的showsPhysics属性设置为true,我可以看到SKSpriteNode的物理实体仍在屏幕上,并且可以滚动.但他们的视觉表现已经消失,视图的节点数已经耗尽.根据文档showsNodeCount"显示在场景中可见的物理实体".因此,由于节点不再可见,节点计数已下降.

任何人都知道可能导致这种情况的原因,或者我可以使用哪些工具来调试它?

标准SpriteKit iOS Swift 2.2 Xcode 7模板,用以下代码替换GameScene文件:

import SpriteKit

class GameScene: SKScene {

    override func didMoveToView(view: SKView) {
        // create walls to contain balls
        let box = SKPhysicsBody(edgeLoopFromRect: CGRect(x: 0, y: 0, width: 800, height: 800))
        let boxNode = SKNode()
        boxNode.physicsBody = box
        addChild(boxNode)

        let radius: CGFloat = 5

        let texture = createMetaballTexture(radius)

        let centre = CGPoint(x: frame.size.width / 2, y: frame.size.height / 2)
        let rows = 12
        let columns = 10 …
Run Code Online (Sandbox Code Playgroud)

ios sprite-kit skspritenode skeffectnode swift

9
推荐指数
0
解决办法
367
查看次数

如何在Swift的闭包签名中强制转换参数类型?

我正在尝试在Swift(目前是Swift 2)中编写一个轻型观察者类。这个想法是在实体组件系统中使用它,作为组件之间彼此通信而不耦合的一种方式。

我遇到的问题是所有类型的数据都可以通信,a CGVector,an NSTimeInterval等等。这意味着,传递的方法可能有各种型签名(CGVector) -> Void() -> Void等等。

我希望能够将这些不同的签名存储在数组中,但仍然具有一定的类型安全性。我的想法是数组的类型应该是(Any) -> Void(Any?) -> Void,这样我至少可以确保它包含方法。但我有这样烦恼的传球方法:Cannot convert value of type '(CGVector) -> ()' to expected argument type '(Any) -> ()'

第一次尝试:

//: Playground - noun: a place where people can play

import Cocoa
import Foundation

enum EventName: String {
    case input, update
}

struct Binding{
    let listener: Component
    let action: (Any) -> ()
}

class EventManager {
    var events = …
Run Code Online (Sandbox Code Playgroud)

arrays closures casting type-signature swift

5
推荐指数
1
解决办法
1307
查看次数