Tag: 精灵套件

在iOS上的SpriteKit的坐标,框架和子节点的混淆?

我还在iOS上学习SpriteKit,并一直在做大量的阅读和大量的实验。 我很困惑的东西我已经find*关于坐标,框架和子节点。 考虑这段代码,其中我正在试图围绕我的飞船精灵绘制一个绿色的框来进行debugging: func addSpaceship() { let spaceship = SKSpriteNode.init(imageNamed: "rocketship.png") spaceship.name = "spaceship" // VERSION 1 spaceship.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame)) let debugFrame = SKShapeNode(rect: spaceship.frame) debugFrame.strokeColor = SKColor.greenColor() spaceship.addChild(debugFrame) // VERSION 2 // spaceship.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame)) spaceship.setScale(0.50) self.addChild(spaceship) } 如果我把上面标有“VERSION 1”的行添加到飞船精灵上,我会得到: 这显然是错误的。 但是,如果我注释掉上面标记为“版本1”的行,而是使用标记为“版本2”的行,就可以得到我想要的: 请注意,标记为版本1和版本2的行的实际代码是相同的:spaceship.position = CGPointMake(CGRectGetMidX(self.frame),CGRectGetMidY(self.frame)) 那么为什么当我设定太空船精灵的位置时呢? 按照我的思路,宇宙飞船精灵的位置与debugging帧的位置无关,因为debugging帧是宇宙飞船精灵的一个子,所以它的坐标应该是相对于宇宙飞船精灵的相对位置的。 感谢WM *这与我昨天所问的一个问题有些相关: 在iOS上的SpriteKit中,缩放纹理的sprite会产生不正确的帧? 但是a)我现在明白了一个,b)这是不同的,它应该有自己的问题。 更新: […]

iOS – 不同的图像基于设备或缩放相同的图像?

看起来,开发人员总是为不同的设备创build不同的图像资源,并根据设备加载它们。 但是,为最大分辨率设备(iPad)创build图像,然后缩放iPhone 6,5等图像是否有任何缺点? 我使用SpriteKit,所以我只是创build不同大小的SKSpriteNodes,并将相同的纹理应用到它们,并将其缩放以适合节点。 我知道性能可以考虑的东西(为较旧的设备加载大图像)。 但是,除此之外,还有别的吗? 这些图像会显得更像素化/模糊?

内存泄漏.showsPhysics

我最近花了5个小时试图debugging我的Spritekit应用程序中的内存泄漏。 应用程序启动后,我注意到我的内存使用情况的一个小爬。 我花了5个小时中的3个,通过参考材料挖掘,了解强VS VS弱(绝对推荐阅读中间体,如我自己) 有没有人遇到这个问题? 如果有,有什么解释? 这里是我的GameViewController的一个小片段: class GameViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() if let scene = MainMenu(fileNamed:"MainMenu") { // Configure the view. let skView = self.view as! SKView skView.showsFPS = true skView.showsNodeCount = true skView.multipleTouchEnabled = true skView.showsPhysics = true /* Sprite Kit applies additional optimizations to improve rendering performance */ […]

SpriteKit球失去了所有的能量打墙,恢复= 1

如果我在y方向上施加一个1的冲动,球就会来回跳动,而不会失去任何能量。 但是,如果最初的冲动是0.5或更低,球击中墙壁时会立即失去所有能量。 为什么发生这种情况? 我对SKPhysicsBody类的属性有了很好的理解。 试试这个代码,看看你的计算机上是否有相同的行为。 -(id)initWithSize:(CGSize)size { if (self = [super initWithSize:size]) { /* Setup your scene here */ self.physicsWorld.gravity = CGVectorMake(0.0f, 0.0f); SKPhysicsBody* borderBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame]; self.physicsBody = borderBody; self.physicsBody.friction = 0.0f; self.backgroundColor = [SKColor colorWithRed:0.7 green:0.7 blue:0.7 alpha:1.0]; SKShapeNode *ball = [SKShapeNode node]; CGMutablePathRef pathToDraw = CGPathCreateMutable(); [ball setStrokeColor:[UIColor blackColor]]; CGPathMoveToPoint(pathToDraw, NULL, […]

iOS9 Sprite Kit问题

一切都很顺利,直到我升级到xCode 7和iOS 9 …. 我目前的项目是一个2D平台的游戏,自升级以来,我就遇到了许多我们似乎正在面对的精灵套件错误/错误。 我的问题是,每当游戏在模拟器或设备上运行时,所有精灵都会随机出现在其位置的位置。 我一直在search堆栈没有运气的答案,到目前为止,我已经尝试过。 将所有图像移动到.xcassets如上所述 在“生成设置”下将iOS开发目标更改为iOS 9.0 更改代码中的所有图像以包含其扩展名,即“background.png” 我仍然有同样的问题,图像层本身显然是随机的,任何人都可以推荐一个修补程序或一些其他可能的解决scheme,我可能错过了? 谢谢。

如何在spritekit 中按下主页button时暂停并重新启动NSTimer.scheduledTimerWithTimeInterval?

我对swift和spritekit是新手,想知道如何检测homebutton是否被按下? 主要问题是我有NSTimer.scheduledTimerWithTimeInterval运行在didMoveToView生成多个字符,一切都很顺利,但是当我用homebutton暂停游戏并在几秒钟后重新启动游戏时,字符溢出了很多。 我认为NSTimer没有被暂停,因此,重新启动应用程序时涌入了大量的字符。 我想知道一个简单的解决scheme和示例,当按下homebutton时,我将如何暂停,并在应用程序重新启动时恢复? 我很想从你这里来! testEnemy = NSTimer.scheduledTimerWithTimeInterval(1.2, target: self, selector: "timerUpdate", userInfo: nil, repeats: true) ///这是用于在didMoveToView中生成字符的项目代码的一部分 NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("appEnterIntoBackGround:"), name:UIApplicationDidEnterBackgroundNotification, object: nil) NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("appBecomeActive:"), name:UIApplicationWillEnterForegroundNotification, object: nil) //start the timer and calls the timerUpdate method every 1.0 seconds myTimer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "timerUpdate", userInfo: nil, repeats: true) if(skview.level == 3) { […]

SpriteKit / Swift – 当两个节点已经联系时如何检查两个节点的联系

在我的游戏中,当游戏开始时,一些节点已经联系,但是我没有find如何检测这些联系。 我只能成功地检测节点移动时发生的联系,并在游戏中使用函数didBeginContact进行联系。 任何人有一个想法,请如何检测这些联系人? 这里是我的didBeginContact如果需要的话: func didBeginContact(contact: SKPhysicsContact) { var firstBody: SKPhysicsBody var secondBody: SKPhysicsBody if contact.bodyA.categoryBitMask == contact.bodyB.categoryBitMask { firstBody = contact.bodyA secondBody = contact.bodyB contactsList.append([firstBody.node!,secondBody.node!]) } }

当isUserInteractionEnabled为false时,SKSpriteNode不允许触摸通过

我试图通过使用SKSpriteNode在SpriteKit中创build一个覆盖。 但是,我想触摸通过覆盖,所以我设置isUserInteractionEnabled为false。 但是,当我这样做时, SKSpriteNode似乎仍然吸收了所有的触摸,并且不允许底层节点做任何事情。 这是我正在谈论的一个例子: class TouchableSprite: SKShapeNode { override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { print("Touch began") } } class GameScene: SKScene { override func sceneDidLoad() { // Creat touchable let touchable = TouchableSprite(circleOfRadius: 100) touchable.zPosition = -1 touchable.fillColor = SKColor.red touchable.isUserInteractionEnabled = true addChild(touchable) // Create overlay let overlayNode = SKSpriteNode(imageNamed: […]

SKAction顺时针方向跟随Circle CGPathRef

我的SKSpriteNode沿逆时针方向走这个path,我如何使它沿着顺时针方向的path? 提前致谢! CGPathRef circle = CGPathCreateWithEllipseInRect(CGRectMake(0,0,50,50), NULL); SKAction *followTrack = [SKAction followPath:circle asOffset:YES orientToPath:YES duration:5.0]; SKAction *forever = [SKAction repeatActionForever:followTrack]; [player2 runAction:forever];

在ios8中使用appdelegate暂停spritekit游戏

我在我的游戏中有一个暂停菜单,当我点击主页button时,我想要切换。 当我在我的游戏中时,它是有效的,但是当我点击主页button时,菜单出现了,但游戏不会暂停。 当我重新启动应用程序时,菜单仍然存在,但是游戏不会暂停。 看起来像spritekit会自动暂停并重新启动游戏,当你离开并进入应用程序。 当我在应用程序内,我完全控制它。 但是当我退出/进入应用程序时,它的行为如何。 有什么build议么? func applicationWillResignActive(application: UIApplication!) { // get the root viewcontroller // toggle my pausemenu method. pause menu sets skview.paused = true }