Tag: 精灵套件

Swift物理边缘识别问题

下面的代码可以识别场景的底部和顶部边缘 ,并且球像预期的那样反弹。 但是,场景的左右边缘始终被破坏。 球离开屏幕,然后如果施加足够的力量,最终返回。 就好像场景的边缘超出了iphone模拟器窗口的边缘。 有人可以帮忙吗? 谢谢。 import SpriteKit class GameScene: SKScene { override func didMoveToView(view: SKView){ self.physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame) backgroundColor = UIColor.cyanColor() var ball = SKSpriteNode(imageNamed: "ball") ball.position = CGPoint(x: self.size.width/2, y: self.size.height/2) self.addChild(ball) ball.physicsBody = SKPhysicsBody(circleOfRadius: ball.frame.size.height/2) let push = CGVectorMake(10, 10) ball.physicsBody.applyImpulse(push) } }

在Swift中逐渐改变背景颜色

我正在做一个游戏,我需要背景颜色慢慢改变。 当用户玩关卡时,背景颜色应该改变以显示进度。 我想起始颜色是浅蓝色,然后变成绿色,然后是黄色,然后是橙色或类似的东西。 有任何想法吗?

如何selectSpriteKit游戏的tvOS菜单中的button

我正在扩展我的iOS游戏tvOS。 大部分的游戏控件都是由touchesBegan , touchesMoved和touchesEnded处理的。 我所有的selectbutton都按以下方式处理: if button1.contains(location){ let gameplayScene = GamePlayScene(size: self.size) self.view?.presentScene(gameplayScene) } if button2.contains(location){ let settingsScene = SettingsScene(size: self.size) self.view?.presentScene(settingsScene) } if button3.contains(location){ let helpScene = HelpScene(size: self.size) self.view?.presentScene(helpScene) } 对于下面的图像: 如何使用AppleTV遥控器在tvOS中适当突出显示和select这些button中的每一个?

Sprite Kit会在后台还是在主线程中渲染? 它是如何工作的?

该文档显示了Sprite Kit的简化运行环境。 我正试图了解他们是如何实现它的。 SKView在SKScene上调用-update :。 这首先评估动作,然后模拟物理,并让子类调整场景。 在对场景进行修改之后, SKView最终将节点树渲染到屏幕上。 我不明白的是细节。 Sprite Kit是否通过使用不同的线程或GCD队列从场景渲染分离场景计算? 它是在后台执行所有的OpenGL渲染调用,还是在主线程中发生的一切? Sprite Kit在哪些点上在后台和主线程之间来回切换,以及如何同步处理场景和渲染场景呢? 当你的场景更新花费太长时间会发生什么?

SpriteKit:如何从SKSpriteNode中的一个点获取像素颜色?

我正在做一个迷宫游戏,我正在使用一个SKSpriteNode作为实际的2D迷宫。 我想检测用户触摸的SKSpriteNode上的点是黑色还是白色。 我已经做了一个UIImage这是与SKSpriteNode相同的图像,我使用UIImage上的方法来获取像素信息。 但是,UIImage与SKSpriteNode相比似乎偏移了一些。 当我在屏幕上移动手指时,它返回值,但这是不正确的。 我猜UIImage是不一样的大小和位置作为SKSpriteNode。 我怎样才能解决这个问题? 我使用以下来获取像素数据 extension UIImage { func getPixelColor(pos: CGPoint) -> UIColor { let pixelData = CGDataProviderCopyData(CGImageGetDataProvider(self.CGImage)) let data: UnsafePointer<UInt8> = CFDataGetBytePtr(pixelData) let pixelInfo: Int = ((Int(self.size.width) * Int(pos.y)) + Int(pos.x)) * 4 let r = CGFloat(data[pixelInfo]) / CGFloat(255.0) let g = CGFloat(data[pixelInfo+1]) / CGFloat(255.0) let b = CGFloat(data[pixelInfo+2]) / CGFloat(255.0) […]

什么是正确的方式,使用“init”或“didmove”?

语言:Swift 3.0 — IDE:Xcode 8.0 beta 2 —项目:iOS游戏(SpriteKit) 我为iOS创build了一个游戏,而且我知道苹果对于接受应用程序/游戏的规则非常严格。 所以我想知道哪个是设置游戏的正确方法。 我从谷歌学习创build一个新的SpriteKit项目,并执行以下设置: 在GameViewController.swift清除viewDidLoad()并添加所有这一切: override func viewDidLoad() { super.viewDidLoad() let skView = self.view as! SKView let scene = GameScene(size: skView.bounds.size) scene.scaleMode = .aspectFit skView.presentScene(scene) } 在GameScene.swift中删除所有内容,并保留下面的代码: import SpriteKit class GameScene: SKScene { required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } override init(size: CGSize) { super.init(size: size) // […]

如何绘制SKNode PhysicsBody进行debugging?

我创build了我的SKPhysicsBody大小的矩形,我把它设置为节点的大小,但碰撞检测不能在节点的好的部分工作。 如何在物理体周围绘制红框? 我尝试使用精确的碰撞检测,但它并没有帮助。 我已经检查了一些debugging库,但是它只画出了场景的直接后代,而我的节点深度很less。 作者显然不知道recursion是什么。 如果我的身体是矩形,如何在物理体周围绘制红框?

SpriteKit SKScene缺lesstouchesEnded

我注意到touchesEnd并不总是通过多点触摸传送到SKScene。 根据去除手指等的速度,我会永久地错过一些touchesEnded。 touchesCledlled是实现的,我添加了一个自定义的UIView并放在屏幕的左侧 – 没有问题。 我做了一个自定义SKView并捕获事件 – 再次没有问题。 很显然,SKScene并没有得到所有的触摸已经embeddedSKView,但为什么呢? (顺便说一下,我正在运行SKScene完全没有任何节点) 编辑: 一些进一步的调查显示,我可以让SKScene完全失去联系: 我把三个手指放在显示器上,然后一次将它们一个一个的去除,直到只有一个手指触摸。 我移动手指 – >只有SKView收到移动事件,SKScene不收。 它也没有收到touchesEnded。 经过一些实验后,我可以说这是在触碰电话中接触到多次触碰(例如,“同时按两个手指”)时发生的。 这两个接触就会纠缠在一起,所以只有其中一个发送事件。 这似乎是SKScene中的一个错误。 我正在testingiPhone 5

SKVideoNode作为SCNSphere的纹理

我试图使用SKVideoNode作为我的SCNView中SCNSphere的video纹理源 我正在回答这个问题: SKVideoNode(embedded在SKScene中)作为用于场景套件节点不起作用的纹理 和我的代码(粘贴在问题的最后),我得到一个video和audio播放。 问题是,映射只发生在球体的四分之一(全xy正四分之一)。 cameraNode在sphere(0,0,0)内,并且独立于sphereNode。 我将一个缩放应用于球体节点,只是为了扭转纹理的节点: sphereNode.scale = SCNVector3Make(-1, 1, 1) 但是评论说这个没有效果。 这是所有在设备上testing(iphone 6 +,使用iOS 9.1): let sphere = SCNSphere(radius: 1) . . . func setupView() { // setup the sphere sphere.segmentCount = 55 // sphere material sceneMaterial = SCNMaterial() // setup the sphereNode sphereNode = SCNNode(geometry: sphere) sphereNode.position = SCNVector3Make(0, 0, 0) sphereNode.scale […]

在SpriteKit中,touchesBegan和SKScene更新方法在同一个线程中运行吗?

在这里的Apple文档中, 高级场景处理描述了update方法以及如何渲染场景,但是没有提及何时处理input。 不清楚它是否与渲染循环处于同一个线程中,或者与渲染循环是否一致。 如果我有一个对象,我从SKScene update方法和touchesBegan方法update (在这种情况下的SKSpriteNode ),我必须担心同步两个访问到我的对象吗?