Tag: 精灵套件

“点按恢复”暂停文本SpriteKit

我知道SpriteKit已经处理暂停游戏,当应用程序进入不活动状态,但我想要做的是添加一个SKLabelNode“点击恢复”,当应用程序重新进入活动状态。 现在它正确地调用我的function,并暂停游戏,但文本不显示。 AppDelegate.swift func applicationWillResignActive(application: UIApplication) { // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. […]

SKNode位置不工作,总是默认为0,0

我已经开发了相当不错的SpriteKit游戏,添加了一些代码来添加一个新的SKSpriteNode到场景中(和我在代码中做了几十个其他地方一样,但是由于某种原因,这次只是忽略了位置我已经设置了节点,我已经尝试了显式.position = CGPointMake(x,y)并尝试[node setPosition:CGPointMake(x,y)] 既没有工作,节点也没有添加到场景中,但总是在0,0,无论我做了什么,都检查了x和y,以确保它们是有效的,并在场景的范围内,并尝试使用显式的浮点数等,不pipe我做什么,这个节点总是显示在0,0,这是毫无意义的。 我正在做的和我在其他几十个节点上玩游戏的过程一样,但是这个节点不会出现在任何地方,除了0,0,无论我做什么: int width = 64; SKSpriteNode *node = [[SKSpriteNode alloc] initWithColor:[SKColor grayColor] size:CGSizeMake(width,25)]; node.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:node.size]; node.physicsBody.dynamic = NO; node.physicsBody.categoryBitMask=nodeCategory; node.name=@"node"; node.position = CGPointMake(200,250); //Have also tried [node setPosition:CGPointMake(200,250); [self addChild:node]; 我在这里完全不知所措,我已经尝试在CGPointMake的input中join.0,以确保它们被作为浮点数处理。无论我如何处理这个节点,当它被添加到场景时,它总是默认为0,0的位置,我感到沮丧,我正在添加各种各样的节点没有事件,只是关于这个节点添加,这只是不工作,不知道什么是不同的或为什么。

使用捕获列表中的无主,导致崩溃,甚至块本身不执行

在这里,我在玩漏洞,所以我有意识地做了一个强大的参考周期,看看仪器是否会检测到某些东西,并且我得到了意想不到的结果。 在乐器中显示的泄漏当然是有道理的,但随机的崩溃有点神秘(由于我将在后面提到的两个事实)。 我在这里有一个叫做SomeClass的类: class SomeClass{ //As you can guess, I will use this shady property to make a strong cycle 🙂 var closure:(()->())? init(){} func method(){} deinit {print("SomeClass deinited")} } 另外我有两个场景, GameScene : class GameScene: SKScene { override func didMoveToView(view: SKView) { backgroundColor = .blackColor() let someInstance = SomeClass() let closure = {[unowned self] in […]

如何使SpriteKit跳转到特定的高度?

我正在尝试使用applyImpulse来使精灵跳转到特定的高度。 在下面的示例代码中,dynamic黑色圆圈跳转到与静态红色圆圈相同的高度,但只适用于kludge。 如果我的物理是正确的,发射到高度Y的弹丸所需的初始垂直动量是由质量* sqrt(2 * gravity * Y)给出的。 然而这个公式导致黑圈移动很less。 通过反复试验,我发现如下代码所示,通过将脉冲向量的垂直分量乘以12.3,我可以使红圈几乎准确地跳跃。 这似乎是完全武断的,正在让我发疯。 我显然做错了什么。 什么是正确的方法来做到这一点? 这是我认为是相关的代码位: let dy = mass * sqrt( 2 * -self.physicsWorld.gravity.dy * (fixedCircle.position.y-jumpingCircle.position.y)) * 12.3 jumpingCircle.physicsBody?.applyImpulse(CGVectorMake(0, CGFloat(dy))) 这是GameScene.swift类的整体,如果你想复制和粘贴… import SpriteKit class GameScene: SKScene { var jumpingCircle = SKShapeNode() var fixedCircle = SKShapeNode() override func didMoveToView(view: SKView) { self.scaleMode = .AspectFit // Create an […]

如何让一个button持续不断地调用一个函数(SpriteKit)

我正在使用sprite套件进行游戏,当按住左/右移动button时,我希望我的angular色在屏幕上移动。 问题在于,只有在轻按button时,他才会移动,而不是保持。 我到处寻找解决scheme,但似乎没有任何工作! 这是我的代码; class Button: SKNode { var defaultButton: SKSpriteNode // defualt state var activeButton: SKSpriteNode // active state var timer = Timer() var action: () -> Void //default constructor init(defaultButtonImage: String, activeButtonImage: String, buttonAction: @escaping () -> Void ) { //get the images for both button states defaultButton = SKSpriteNode(imageNamed: defaultButtonImage) activeButton = […]

Swift:从精灵套件SKShapeNode绘图中检测交集

我正在绘制Sprite Kit。 我想检测用户的图纸是否相交。 我试图跟随代码,但它不起作用。 看来sprite工具包并没有保存所有的要点: override func touchesMoved(touches: NSSet, withEvent event: UIEvent) { /* Called when a touch begins */ touch = touches.anyObject() as UITouch! for drawingPoint in drawingPoints{ if(touch.locationInNode(self) == drawingPoint){println(true)} } drawingPoints.append(touch.locationInNode(self)) }

放大SKNode不一致

我已经创build了自己的解决scheme来放大或缩小特定的SKNode,而不需要缩小整个场景,而且似乎主要是如何工作的,其中有2个值得注意的例外,我希望能够在这里得到input。 首先是代码(这个控制语句在touchesMoved方法中): if (touches.count == 2) { // this means there are two fingers on the screen NSArray *fingers = [touches allObjects]; CGPoint fingOneCurr = [fingers[0] locationInNode:self]; CGPoint fingOnePrev = [fingers[0] previousLocationInNode:self]; CGPoint fingTwoCurr = [fingers[1] locationInNode:self]; CGPoint fingTwoPrev = [fingers[1] previousLocationInNode:self]; BOOL yPinch = fingOneCurr.y > fingOnePrev.y && fingTwoCurr.y < fingTwoPrev.y; BOOL yUnpinch = […]

SpriteKit:检测完整的节点重叠

我有两个SKShapeNodes – 一个是基于边缘的SKPhysicsBody,一个是基于音量的 – 我想在没有碰撞的情况下检测它们的交集。 我已经得到了这个工作正常,SKPhysicsContactDelegate联系方法被调用时,通过另一个传递,但我的问题是,当边不再相交,即使当一个主体完全被包含在另一个时,被调用。 确定真正的接触或重叠的最佳方式是什么,而不仅仅是边缘相交? 我试过用usesPreciseCollisionDetection ,无济于事。

Sprite Kit的“didBeginContact”函数不是很准确。 我该怎么办?

好吧,这里的协议是:我正在开发一个2D的汽车游戏(类似于Hill Climb Racing),用于iOS的Sprite Kit。 我目前正在研究尘埃颗粒,当轮胎碰到一个具有这种效应的表面时就会出现。 为此,我显然需要function“didBeginContact”和“didEndContact”,以便根据轮胎是否接触地面来打开/closures效果。 这是我想要做的: /* —- very dirty pseudocode —- */ didBeginContact { if (contact.bodyA is one of the wheels && contact.bodyB is the surface that should make a dust effect) { engage dust effect } } didEndContact { if (contact.bodyA is one of the wheels && contact.bodyB is the surface that […]

如何在SpriteKit上创build一个UITextField

我想实现一个Textfield在我的SpriteKit游戏中input你的名字,所以我有这样的东西: SKLabelNode* gameTitle = [SKLabelNode labelNodeWithFontNamed:@"Chalkduster"]; gameTitle.text = @"Game Title"; gameTitle.name = @"gametitle"; gameTitle.fontSize = 44.0; gameTitle.fontColor = [SKColor blackColor]; gameTitle.position = CGPointMake(self.size.width/2,self.size.height/2 + 150); [self addChild:gameTitle]; UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(self.size.width/2, self.size.height/2+20, 200, 40)]; textField.borderStyle = UITextBorderStyleRoundedRect; textField.textColor = [UIColor blackColor]; textField.font = [UIFont systemFontOfSize:17.0]; textField.placeholder = @"Enter your name here"; textField.backgroundColor = […]