Tag: 精灵套件

SpriteKit得分是随机的

我正在用SpriteKit创build一个游戏,试图在碰撞时提高分数。 由于某种奇怪的原因,每次得分增加时都是一个随机数,而不是1。 在didBeginContact方法中,我有一个子弹和外星人之间的碰撞。 每次碰撞时,我都希望得分将得分增加1.除了有自己的想法,并且会随机地增加1到6之间的数字。我已经经历了每一行代码并尝试添加进入游戏多次,但它不会增加1,因为我也想。 目前我的代码是这样的。 在我的头文件中,我为分数创build了一个属性: @property (nonatomic) int score; 然后在我的主要游戏场景中,我添加以下内容 -(void)setScore:(int)score { _score = score; _scoreLabel.text = [NSString stringWithFormat:@"%d", score]; } 在我的init方法中,我也将分数设置为从0开始 self.score = 0; 在我的新游戏方法中,我也确保将得分设置回0 self.score = 0; 然后我的碰撞检测看起来像这样。 我用self.score ++增加分数; if (firstBody.categoryBitMask == kAlienCategory && secondBody.categoryBitMask == kBulletCategory) { //Collision Between Bullet & Alien self.score++; if (firstBody.node) { [self alienExplosion:firstBody.node.position]; [firstBody.node removeFromParent]; […]

在SpriteKit中逐渐增加滚动背景的速度

我在SpriteKit中做了一个简单的游戏,我有一个滚动的背景。 简单地发生的是当游戏场景被加载时,一些背景图像彼此相邻放置,然后当图像滚动出屏幕时水平移动图像。 这里是我的游戏场景的didMoveToView方法的代码。 // self.gameSpeed is 1.0 and gradually increases during the game let backgroundTexture = SKTexture(imageNamed: "Background") var moveBackground = SKAction.moveByX(-self.frame.size.width, y: 0, duration: (20 / self.gameSpeed)) var replaceBackground = SKAction.moveByX(self.frame.size.width, y: 0, duration: 0) var moveBackgroundForever = SKAction.repeatActionForever(SKAction.sequence([moveBackground, replaceBackground])) for var i:CGFloat = 0; i < 2; i++ { var background = SKSpriteNode(texture: […]

SpriteKit /金属内存泄漏没有任何事情发生

我有一个内存泄漏,我似乎无法追查。 仪器看到它,并将其报告为jet_buffer_Metal,但我不知道这是什么具体指向我。 它经常发生。 我已经尝试了一切。 删除所有我的节点,删除physicsBody,但它似乎仍然在那里。 我没有任何更新或任何其他的游戏循环方法。 我可以在那里发布所有的代码,但实际上我只添加了两个节点,只能移动。 我没有触摸屏幕,内存泄漏仍然存在。 我的一个节点有一个CircleOfRadius的PhysicsBody,我听说之前可能有一些types的泄漏,但是如果我用这个physicsBody去除节点,泄漏仍然存在。 最后,我在debugging窗口中得到这个: <SKMetalLayer: 0x14ce28da0>: calling -display has no effect. 我有一个相关的预感,但不能find它来自哪里。 我正在使用当前为空的SKS文件。 节点现在添加在代码中。

SpriteKit&Swift:通过doBeginContact创build节点会弄乱定位

我不知道这是Xcode中的一个奇怪的错误还是有一些关于SpriteKit的坐标系我不明白。 前提是节点的位置总是相对于其父节点。 然而,无论何时我调用一个块来创build和定位一个物理主体的节点,该主体从SKPhysicsContactDelegate的“didBeginContact”开始,节点总是相对于场景(而不是它的父节点)定位。 请注意,调用此相同的块在任何地方触发,但“didBeginContact”时按预期工作。 另一件事是,如果我删除了所述节点的物理体,那么即使从“didBeginContact”调用该块,该块现在也能按预期工作。 我一直坚持这个问题两天,这将是太draggy给我的实际代码的其他细节。 所以我做了一个非常简单的项目来certificate这个exception。 只需在Xcode 6中用Spritekit Template创build一个新项目,并用下面的代码replaceGameViewController.swift和GameSwift.swift。 只需在iPad Air中运行,其他一切都应该是自我解释。 最后说明: 当您按下第一个button并与第二个button进行联系时,请查看屏幕的左下angular。 你会看到这些盒子被“错误地”定位在那里。 尝试删除“AddBox”框中的物理主体。 它现在将按预期工作。 请让我知道,如果你认为这是一个错误,或者在坐标系统或物理世界有东西,我不明白 GameViewController.swift: import SpriteKit class GameViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let scene = GameScene() scene.size = view.frame.size let skView = self.view as SKView scene.scaleMode = .AspectFill skView.presentScene(scene) } } GameScene.swift: import SpriteKit let kButtonSize = […]

将UIKit坐标转换为SpriteKit坐标

我试图将正常的uikit坐标(左上angular,宽度和高度向右和向下)转换为Sprite Kit坐标(原点在节点中心,左下angular为负值,右上angular为正值)。 有谁知道如何做到这一点? 不幸的是,我不能解决这个问题,因为我使用QuartzCore来绘制一个SKNode。 没有转换,我得到真正的图纸。

声音资源无法加载Swift SKAction

我有一个应用程序,每次触摸屏幕播放声音文件。 出于某种原因,应用程序将每隔一段时间崩溃,并出现以下错误: reason: 'Resource tick.mp3 can not be loaded' 如果你需要它,下面是我每次点击屏幕时如何播放文件: runAction(SKAction.playSoundFileNamed("tick.mp3", waitForCompletion: false)) 这并不经常发生,也许每10次运行一次。 大多数情况下,一切都按预期工作。 我希望我知道我在做什么导致崩溃,但我不知道! 我只是把它看作与没有崩溃的时代没有什么不同。 然后突然之间我得到这个问题…

按下Homebutton会导致SpriteKit SKView中的EXC_BAD_ACCESS代码= 1

当您按主页button时,SpriteKit应该清除并暂停所有定时器。 但是,我们发现,如果您在显示活动的SKView时单击主页button,应用程序将崩溃。 即使该视图已被用户暂停,也会发生这种情况。 奇怪的是,如果你双击主页button,移动到多任务视图,一切工作正常。 跟进注意:模拟器在两种情况下都能正常工作,不会发生崩溃 其他人是否看到SpriteKit的这个问题? 你find了原因/解决scheme?

我可以添加一个SKSpriteNode边界,类似于UIView?

我感兴趣的是如果SKSpriteNode可以模仿UIView的行为,我可以指定边界和angular半径? self.view.layer.borderColor = [UIColor lightGrayColor].CGColor; self.view.layer.borderWidth = 2;; self.view.layer.cornerRadius = 2; self.view.layer.masksToBounds = YES;

用SKScene呈现ViewController时停止

编辑:好的,所以这甚至发生在一个空的SpriteKit场景! 这里有什么可能是错的? 为什么iOS需要2秒才能显示SpriteKit场景? 编辑2:我第一次点击标签栏来显示视图控制器与SKScene立即显示,但下一次我尝试导航回到这个视图控制器它将需要2秒钟显示! 我有一个标签栏控制器在我的应用程序与多个不同的viewControllers。 其中之一包含一个SpriteKit场景,有几个节点,其中5个,没有太重。 在模拟器中一切都很好,但是当在设备上testing时,我注意到在某些情况下,当使用SpriteKit场景切换到ViewController时,会有很大的停顿(大约2秒!)。 其他时间没有停止,立即显示视图。 现在,我知道在这里肯定会出现一些问题,因为iOS应该可以处理这个问题。 这是我的viewDidLoad函数里面的spriteKit场景viewController: override func viewDidLoad() { super.viewDidLoad() if let scene = MyScene(fileNamed:"MyScene") { // Configure the view. scene.switchView = switchView let parentNode = scene.childNodeWithName("WholeObject") as! SKSpriteNode let contentNode = scene.childNodeWithName("CenterNode") as! SKSpriteNode addPhotoToFrame(contentNode, photoName: "woman", maskName: "circleMask") let node1 = parentNode.childNodeWithName("node1") as! SKSpriteNode addPhotoToFrame(zealNode1, photoName: "motherCircleImage", maskName: […]

检查didBeginContact中碰撞的最有效的方法

使用SpriteKit的didBeginContact方法检查冲突的最佳方法是什么? 我目前正在按照类似的方式进行检查: if let thisMine = nodeA as? Mine { if nodeB is Player { thisMine.explode() } } else if let thisMine = nodeB as? Mine { if nodeA is Player { thisMine.explode() } } 我在didBeginContact方法中做了很多次,因为我有很多不同的可以相互交互的对象。 通过位掩码检查是否更有效? 另外,有没有办法减less需要基本上复制所有的代码,通过检查nodeA和nodeB作为相同的类?