Tag: 精灵套件

我的应用程序崩溃,因为我的精灵套件游戏中未完成的声音

无法理解为什么我的应用程序崩溃总是在播放声音的时候出现背景。 如果这里没有声音的应用程序不会崩溃。 我有一个发挥声音的SKAction 。 我预先加载这个歌曲与static let在Actions类,并调用static func返回SKAction的声音。 所以我有完成水平的声音。 当它播放,我打回家button,他们回到应用程序。 有应用程序崩溃消息“线程1:EXC_BAD_ACCESS(代码= 1,地址= 0xff8e9abc)”。 有没有人知道这里发生了什么? 这是我的结构称为Actions : public struct Actions { static let completionSound = SKAction.playSoundFileNamed("CompletionSound.mp3", waitForCompletion: false) static func playCompletionSound() -> SKAction { return completionSound } } 在我的class级叫做Grid ,我有条件,不pipe级别是否完成: class Grid { var delegate: GridDelegate? private var completed: Bool = false … … private func completeLevel() […]

从另一个SKScene中呈现SKScene

在我的主UIViewController里面,我定义了两个SKScenes。 我首先只想呈现gameScene ,然后通过gameScene的一个动作触发(点击暂停button),然后呈现uiScene 。 问题是skView ,包含这两个场景的视图,在UIViewController之外无法识别。 代码如下。 任何帮助,将不胜感激。 class GameViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let skView = view as SKView let gameScene = GameScene(size: view.bounds.size) gameScene.scaleMode = .ResizeFill skView.presentScene(gameScene) let uiScene = UIScene(size: view.bounds.size) uiScene.scaleMode = .ResizeFill uiScene.backgroundColor = UIColor.clearColor() //skView.presentScene(uiScene) // I want to present this line from within gameScene. } […]

Swift SpriteKit:在GameScene中访问UIViewController的最佳实践

我想看看从GameScene访问UIViewController方法的最佳做法是什么。 现在我一直在使用NSNotificationCenter,但是我不想使用这个,因为我想要实现的特定function。 此外,如果没有任何其他方式通过GameScene获得对UIViewController的访问,那么我真正想知道的是一种能够在没有UIViewController的情况下在GameScene中呈现UIAlertController的方法。 我只是创build一个全局variables的UIViewController,但我听说这是不好的做法。 谢谢!

Spritekit:第一个纹理绘制缓慢(预加载)

我有关于Apple Spritekit Framework的性能问题 。 我使用SKTextureAtlas的方法preloadTextureAtlases:withCompletionHandler:确保我的所有纹理都在游戏真正开始之前加载。 然而,当这个地图集的第一个纹理(不pipe它是什么)作为一个孩子添加到场景中时,我得到了一个小滞后,就像纹理没有加载一样。 它只发生在第一次 。 我真的很难debugging这个,find原因,但我找不到它。 看着仪器和时间分析器我得到了这个 这似乎很奇怪,因为我的纹理地图集包含所有分配的纹理(并且仍然分配)。 为什么它调用一个加载方法? 也许这和OpenGL的纹理绑定有关。 我相信这与我的对象被分配的框架相对应(见右边的秒杀)。 这里没有别的东西被分配或运动。 我真的坚持这一点,任何帮助将深表谢意。 谢谢你的时间。

由于内存压力,大纹理图谱会导致终止

我正在iOS Swift中devise一个游戏。 我有一个大约100 1920×1080 PNG的纹理 – 地图集。 当我调用这些函数时,由于内存压力,它会崩溃应用程序。 当我禁用function,我的应用程序运行得很好。 我可以通过编辑我的代码来防止这种崩溃,或者我的纹理 – 图集太大了吗? 码: var waterWave: SKSpriteNode! var waterWalkingFrames : [SKTexture]! func addWater() { let waterAnimatedAtlas = SKTextureAtlas(named: "water.atlas") var waterFrames = [SKTexture]() let numImages = waterAnimatedAtlas.textureNames.count for var i=0; i<numImages; i++ { let waterTextureName = "water_000\(i)" waterFrames.append(waterAnimatedAtlas.textureNamed(waterTextureName)) } self.waterWalkingFrames = waterFrames let firstFrame = waterWalkingFrames[0] […]

GameplayKit>场景编辑器导航图>如何使用它进行寻路?

不久前,苹果向Xcode的场景编辑器引入了GameplayKit元素,这非常棒。 但是,我似乎有导航图元素的问题: 我试图实现的是从场景编辑器中绘制GKGraph,在代码中检索它,并将其用作寻路的基础。 所以我先画一个GKGraph: 然后我像这样在GameScene.swift中检索它: graph = self.graphs.values.first 其中graphics是Apple预定义的arrays,用于存储场景编辑器中的GKGraph。 到现在为止还挺好。 然后我希望玩家在屏幕上find水龙头位置的path。 为此,我使用以下callback方法使用UITapGestureRecognizer : var moving = false func moveToLocation(recognizer: UITapGestureRecognizer) { var tapLocation = recognizer.location(in: recognizer.view!) tapLocation = self.convertPoint(fromView: tapLocation) guard (!moving) else { return } moving = true let startNode = GKGraphNode2D(point: vector_float2(Float(player.visualComponent.node.position.x), Float(player.visualComponent.node.position.y))) let endNode = GKGraphNode2D(point: vector_float2(Float(tapLocation.x), Float(tapLocation.y))) NSLog(graph.nodes.debugDescription) graph.connectToLowestCostNode(node: startNode, bidirectional: […]

Swift,spritekit:在应用程序购买代码运行,什么都没有发生?

好吧,我在Swift工作,我只需要帮助。 我已经遵循了4个不同的教程,关于如何使用Swift在Sprite工具包中的应用程序购买实现,逐字复制代码,并没有什么是为我工作。 以下是我采取的步骤: 走进iTunes连接,并创build一个应用程序购买下我的应用程序的logging。 我在应用程序购买的产品ID是"GameOverSaveSavior" 在Xcode中,我将应用程序的应用程序购买function设置为ON ,确保将我的团队设置为我的帐户,并确保我的信息下的Bundle标识符已设置为ITunes Connect中我的应用程序的包标识符 在编写任何代码之前,我在我的GameScene.swift文件中import StoreKit 至于代码,这是我所做的: (1)在Gamescene.swift中,在didMoveToView函数的最后,我有: // Set IAPS if(SKPaymentQueue.canMakePayments()) { println("IAP is enabled, loading") var productID:NSSet = NSSet(objects: "GameOverSaveSavior") var request: SKProductsRequest = SKProductsRequest(productIdentifiers: productID as Set<NSObject>) request.delegate = self request.start() } else { println("please enable IAPS") } 当应用程序运行时输出"IAP is enabled, loading" 。 (2)在GameScene.swift中,在类内但在didMoveToView之外,我有所有的function和variables,其他人用于应用程序购买: var list = [SKProduct]() […]

SKPhysics身体变化中心

我目前正在做一个有圆柱形物体的游戏,我用下面的方法制作了一个SKPhysicsBody: self.oval.node.physicsBody = SKPhysicsBody(texture: self.oval.node.texture, size: self.oval.node.size) 这种方法在节点周围创build了一个很好的形状,但是重心却是离开的……它在椭圆的顶端平衡。 无论如何要改变这一点,所以它在理论上最重的部分应该平衡? 谢谢!

警告添加事件监听器回合基于IOS的游戏

这里是gamekithelper.m中的代码 – (void)authenticateLocalPlayer { //1 GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer]; //add a weak local player __weak GKLocalPlayer *blockLocalPlayer = localPlayer; if (localPlayer.isAuthenticated) { [[NSNotificationCenter defaultCenter] postNotificationName:LocalPlayerIsAuthenticated object:nil]; return; } //2 localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error) { //3 [self setLastError:error]; if(viewController != nil) { //4 [self setAuthenticationViewController:viewController]; *******problem code************ // add event handler [blockLocalPlayer registerListener:self]; […]

斯威夫特:如何使我的angular色在我的游戏中只能在他击中地面时跳跃?

我正在开发一个游戏,angular色从陆地跳到陆地。 我把所有的东西都做下来,除了我剩下的问题,就是如果你继续敲击屏幕,他可以永远跳跃。 我想要它,所以他必须在他能再次跳跃之前打倒地面。 import SpriteKit import GameplayKit class GameScene: SKScene, SKPhysicsContactDelegate { struct PhysicsCatagory { static let Knight : UInt32 = 0x1 << 1 static let land : UInt32 = 0x1 << 2 } var Knight = SKSpriteNode() var land = SKSpriteNode(imageNamed: "CJLand4") 这是我现在的代码,让他跳跃: Knight.physicsBody?.velocity = CGVector(dx: 0, dy: 0) Knight.physicsBody?.applyImpulse(CGVector(dx: 0, dy: 325)) 我有这touchesBegan […]