Tag: 精灵套件

需要物体以恒定的速度移动

我试图创造一个游戏,物品需要追逐食物。 目前,当食物在给定半径内时,物体加速。 但我需要的速度永远是相同的。 任何build议如何解决这个问题? 我试图添加一个SKEction下的追逐function,我设置position.x和position.y,但我不能让它工作正确。 鱼类: class Fish:SKSpriteNode{ private let kMovingAroundKey = "movingAround" private let kFishSpeed:CGFloat = 4.5 private var swimmingSpeed:CGFloat = 100.0 private let sensorRadius:CGFloat = 100.0 private weak var food:SKSpriteNode! = nil //the food node that this fish currently chase override init(texture: SKTexture?, color: UIColor, size: CGSize) { super.init(texture: texture, color: color, size: […]

iOS SpriteKit如何使笔画颜色透明?

我现在使用SpriteKit做一些简单的游戏。 绘画过程中有笔画颜色的问题。 我必须做我的彩色shapeNode透明,但我的笔触颜色保持不变每次。 我已经尝试了不同的技术来完成我的节点是完全透明的:1)将alpha组件设置为笔触颜色2)将alpha组件设置为整个节点。 它没有帮助。 有什么方法可以实现或解决这个问题吗? 创build我的节点 CGMutablePathRef arc = CGPathCreateMutable(); cardWidth = cardWidth + cardAlpha; CGPathAddRoundedRect(arc, NULL, CGRectMake(-cardWidth/2, -cardHeight/2, cardWidth, cardHeight), roundRadius, roundRadius); roundRect = [SKShapeNode node]; roundRect.name = self.name; CGFloat lineWidth = 2.0; CGPathRef strokedArc = CGPathCreateCopyByStrokingPath(arc, NULL, lineWidth, kCGLineCapButt, kCGLineJoinMiter, // the default 10); // 10 is default miter limit roundRect.path = […]

使用.sks文件来布局复杂的对象与SKScene文件

是否可以使用SceneEditor来布局和创buildSKSpriteNode的复杂子类,根据sks文件加载信息并在场景中创build自定义对象? 我的场景是我有一个popup式对话框(它们只不过是SKSpriteNodes的子类),在对话框中有很多子对象。 我希望把它放在场景编辑器中,类似于我如何布置SKScene,然后在需要时将其呈现在场景中。 我意识到我可以在我的GameScene.sks文件中创build这个对象,但是发现这些对象可能会变得非常混乱,并且认为如果每个对象都有自己的sks文件,可能会更好地存储这些对象。 我试过扩展SKSpriteNode来访问文件类似于场景文件,但它没有工作 if let teamDialog = SKSpriteNode.spriteWithClassNamed(className: "TeamDialog", fileName: "TeamDialog.sks") { } extension SKSpriteNode { static func spriteWithClassNamed(className: String, fileName: String) -> SKSpriteNode? { guard let dialog = SKSpriteNode(fileNamed: fileName) else { return nil } return dialog } }

从墙上反弹的球不起作用

即将离开屏幕时,我正试图让球弹回来。 我认为这应该与此工作: bal.physicsBody?.velocity.dx = -bal.physicsBody?.velocity.dx 但它不.. 我得到这个错误:无法find“ – ”的超载,接受supably参数。 如何解决这个问题?

在xcode中处理不同的屏幕尺寸

我有一款最初为iPhone 6开发的iPhone游戏,当它在iPhone 5上运行时效果很好,但是在iPhone 4上玩游戏时,双方都被拉长了。 而且我从左边和右边产生的节点在屏幕上产生,而不是像在iPhone 6和5上那样在屏幕上产生。(请不要说这是重复的,因为我一直在寻找几周处理不同的iPhone) 我有箭头从y轴上随机产生的左侧和右侧进入。 他们离开屏幕,然后在屏幕上缓慢移动,而不是在屏幕上快速移动,但在iPhone 4上,屏幕上产生箭头。 这是其中一个箭头的代码 -(void) leftArrow { int randomY = arc4random() % (675 – 175); int yPoint = randomY + 175; leftArrow = [SKSpriteNode spriteNodeWithImageNamed:@"arrow"]; leftArrow.size = CGSizeMake(leftArrow.size.width/1.2, self.frame.size.height/22); leftArrow.position = CGPointMake(CGRectGetMidX(self.frame) – 230, yPoint); leftArrow.zPosition = 50; leftArrow.alpha = 1; SKAction* action1 = [SKAction moveToX:leftArrow.position.x + 30 duration:0.5]; […]

与子sprite的精灵套件碰撞检测

我试图检测两个精灵之间的冲突,但我无法做到这一点与一个孩子精灵。 self.player = [[Player alloc] initWithImageNamed:@"player"]; self.player.position = CGPointMake(150, 75); [self addChild:self.player]; _object = [SKSpriteNode spriteNodeWithImageNamed:@"object"]; _object.position = CGPointMake(-40, 27); [self.player addChild:_object]; 那么我有这样的碰撞检测 – (void)checkCollisions { [self.map enumerateChildNodesWithName:@"enemy" usingBlock:^(SKNode *node, BOOL *stop){SKSpriteNode *enemy = (SKSpriteNode *)node; if (CGRectIntersectsRect(enemy.frame, _object.frame)) { [enemy removeFromParent]; } }]; } *这不起作用! 但如果我使用: CGRectIntersectsRect(enemy.frame, self.player.frame) 我可以检测到与主体的碰撞。 如何为另一个精灵的孩子做碰撞检测?

iOS SpriteKit SKAction完成调用不工作/创build奇怪的结果

我试图让一个SKNode移动到屏幕上的命令。 我build立了以下SKAction链,以便1)节点向上和向外移动,然后2)节点向下移动到起始位置,然后3)开始移动。 我用下面的代码来尝试和实现这个: SKAction *moveUp = [SKAction moveTo: shipIntroSpot1 duration:3.0]; SKAction *moveDown = [SKAction moveTo:shipSpot1 duration:ship1MovementSpeed]; [self enumerateChildNodesWithName:@"ship1" usingBlock:^(SKNode *node, BOOL *stop) { NSLog(@"RUNNING MOVE UP"); [node runAction: moveUp]; [node runAction:moveUp completion:^{ NSLog(@"RUNNING MOVE DOWN"); [node setHidden: NO]; [node runAction: moveDown]; }]; [node runAction:moveDown completion:^{ NSLog(@"STARTING MOVEMENT"); }]; 但是,SKActions似乎并没有按照正确的顺序开火。 我使用的代码,一旦一步完成,下一步将开始。 然而,在下一个SKAction开始工作之前,SKAction似乎没有足够快地移动节点。 我的印象是,使用完成调用将意味着下一个行动不会开始,直到前一个完成? 这似乎并不是这种情况。 另外,如果我为步骤1(MOVING UP)留下了足够长的时间,它将跳过步骤2(MOVING […]

内存增加SpriteKit即使removeAllChildren调用

我一直在努力修复SpriteKit的内存增加了很多个星期,但是没有find解决办法。 我已经尝试了几乎所有在线pipe理SK内存的方法,但仍然遇到麻烦。 这是我的情况: 我首先介绍了SKScene的“HomeScreen”,然后从那里我用我的视图控制器中的UIButton来改变页面场景,就像这样: func nextPage(sender: UIButton) { pageNumber = pageNumber + 1 let switchPage = SKTransition.crossFadeWithDuration(3.0) switchPage.pausesOutgoingScene = false switch pageNumber { case 1: self.skView.presentScene(Page01(size: (self.view?.bounds.size)!), transition: switchPage) case 2: self.skView.presentScene(Page02(size: (self.view?.bounds.size)!), transition: switchPage) case 3: self.skView.presentScene(Page03(size: (self.view?.bounds.size)!), transition: switchPage) case 4: self.skView.presentScene(Page04(size: (self.view?.bounds.size)!), transition: switchPage) case 5: self.skView.presentScene(Page05(size: (self.view?.bounds.size)!), transition: switchPage) case 6: […]

从SKscene(SpriteKit)演示UIViewController

互联网上有几个post要求如何正确结合SpriteKit和Storyboard / Interface构build器。 特别是没有人能够从SKscene移动到所需的UIViewController。 networking上没有解决scheme真的解决这个问题! 这是不是真的可以做到这一点? 如果是这样,这将是一个SpriteKit的重大限制…

如何让textureFromNode产生纹理视网膜显示?

平台:XCode 6.0 + iOS 7.0.4 在iPad mini视网膜上运行以下代码,并期望tmpLbl和node的图像呈现相同,因为后者通过textureFromNode与前者的纹理进行初始化。 实际上,作为SKLabelNode在视网膜分辨率下呈现,但是应该作为副本的node是模糊的,看起来是半尺寸纹理的双倍缩放的再现。 我看到一个postbuild议将源文件( tmpLbl在下面的示例中)放在场景中,但是没有任何区别,如示例所示。 以下任何build议:1.如何使用任何方式进行这项工作2.如何使这项工作无需在屏幕上呈现源节点(tmpLbl) 示例代码: – (void)didMoveToView:(SKView *)view { SKLabelNode *tmpLbl = [SKLabelNode labelNodeWithFontNamed: @"Futura"]; tmpLbl.position = CGPointMake(100, 100); [self addChild: tmpLbl]; tmpLbl.fontSize = 125; tmpLbl.fontColor = [SKColor colorWithRed:0.8 green:0.0 blue:0.0 alpha:1.0]; tmpLbl.text = @"a"; SKTexture *texture = [view textureFromNode: tmpLbl]; SKNode *node = [SKSpriteNode spriteNodeWithTexture:texture]; node.position = […]