我正在研究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) 我正在尝试在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) swift ×2
arrays ×1
casting ×1
closures ×1
ios ×1
skeffectnode ×1
skspritenode ×1
sprite-kit ×1