Tag: 精灵套件

屏幕的实际尺寸比我所看到的要大

我正在学习Swift和SpriteKit。 我在Xcode 6中创build了新的SpriteKit&Swift游戏项目,我编辑了GameScene.swift文件。 我没有触及其他文件。 问题:当球弹跳时,它受到上下方向的限制,但是当它向左或向右时,它不受限制并且熄灭,但是似乎左右极限在那里,但是它们不在屏幕边缘因为球会在一会之后回来。 这是我的GameScene.swift : import SpriteKit class GameScene: SKScene { override func didMoveToView(view: SKView) { self.backgroundColor = SKColor.whiteColor() self.physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame) self.physicsWorld.gravity = CGVectorMake(0, 0) let ball = SKSpriteNode(imageNamed: "ball") ball.position = CGPointMake(self.size.width/2, self.size.height/2) ball.physicsBody = SKPhysicsBody(circleOfRadius: ball.frame.size.width/2) self.addChild(ball) var myVector = CGVectorMake(20, 20) ball.physicsBody.applyImpulse(myVector) } override func update(currentTime: CFTimeInterval) { […]

didBeginContact传递了PKPhyicsObject

我有一个扩展SKPhysicsContact的帮手方法 extension SKPhysicsContact { /// – returns: `[SKPhysicsBody]` containing all the bodies that match `mask` func bodiesMatchingCategory(mask: UInt32) -> [SKPhysicsBody] { let bodies = [bodyA, bodyB] return bodies.filter { ($0.categoryBitMask & mask) != 0 } } } 在didBeginContact()我在传入的contact调用此方法。 func didBeginContact(contact: SKPhysicsContact) { let ballMask: UInt32 = 0x1 << 2 let ball = contact.bodiesMatchingCategory(ballMask) … 我有时会得到这个错误消息(比如5中的1)会导致应用程序崩溃: […]

沿着其中心旋转SKShapeNode

我有一个SKShapeNode(在这种情况下是矩形),我试图沿着它的中心旋转。 但是它沿着屏幕的左下angular旋转。 由于我无法为SKShapeNode设置定位点,我怎样才能达到我的要求(沿着其中心旋转形状)。 这是我正在尝试的代码。 let rectangle = SKShapeNode() rectangle.path = UIBezierPath(rect: CGRectMake(view.frame.width/4, view.frame.height/2, view.frame.width/2, view.frame.width/2)).CGPath rectangle.fillColor = UIColor.yellowColor() rectangle.strokeColor = UIColor.yellowColor() let oneRevolution = SKAction.rotateByAngle(360, duration: 100.0) let repeat = SKAction.repeatActionForever(oneRevolution) rectangle.runAction(repeat)

在发生runBlock(Swift)后,延迟SKAction.sequence中的下一个动作?

在runBlock内部不会遵循moveTo的duration属性,从而允许序列中的后续操作在duration秒后才能被执行。 代码A(顺序执行正确): let realDest = CGPointMake(itemA.position.x, itemA.position.y) let moveAction = SKAction.moveTo(realDest, duration: 2.0) itemB.runAction(SKAction.sequence([SKAction.waitForDuration(0.5), moveAction, SKAction.runBlock { itemB.removeFromParent() }])) 代码B(序列没有正确执行): let badMoveAction = SKAction.runBlock { let realDest = CGPointMake(itemA.position.x, itemA.position.y) let moveAction = SKAction.moveTo(realDest, duration: 2.0) itemB.runAction(moveAction) } itemB.runAction(SKAction.sequence([SKAction.waitForDuration(0.5), badMoveAction, SKAction.runBlock { itemB.removeFromParent() }])) 在Code A , itemB在moveAction完成后被移除(大约2秒)。 这是正确的顺序。 在Code B , itemB在badMoveAction完成之前被移除,这意味着itemB永远不会从原始位置移开。 这就好像Code B的持续时间属性不受尊重。 […]

Swift:无法将AnyObject向下转换为SKPhysicsBody

苹果在SKPhysicsBody类中有以下方法。 /* Returns an array of all SKPhysicsBodies currently in contact with this one */ func allContactedBodies() -> [AnyObject]! 我注意到它返回一个AnyObject的数组。 所以我读了关于如何处理在这里下载 AnyObject 我想循环遍历我的物理体的allContactedBodies数组。 问题是,无论我尝试什么,我都无法让事情发挥作用。 我先试了一下: for body in self.physicsBody.allContactedBodies() as [SKPhysicsBody] { } 但是我得到这个错误。 致命错误:数组不能倒数到派生的数组 我也试过这个: for object in self.physicsBody.allContactedBodies() { let body = object as SKPhysicsBody } 但是,这也崩溃了以下内容: 同样我也试过这个: for object in self.physicsBody.allContactedBodies() { […]

如果我使用iPad尺寸创build我的应用程序,如何才能find适合iPhone尺寸的“安全区域”?

我正在创build一个游戏,并希望使用iPad尺寸设置(横向:1024×768)。 从我所了解的情况来看,使用iPad设置只会在iPhone上突出部分高度。 假设我有用于iPad(1024×768)的2048×1536背景图像和用于iPhone 6+(736×414)的2208×1242图像, 一世。 我怎样才能确定iPad上的“安全区域”,这将出现在iPhone 6+的点和像素明智? II。 iPhone 6+的“安全区域”是否与1334×750的iPhone 6(667×375)一样? 如果不是的话,那么如何确定点和像素呢?

AVAudioPlayer声音不能播放

在iOS 8 / Xcode 6中,我有一个包含音效的function。 多次更改代码后,它不再适用于iOS 9。 这是我试过的: 原版的: let bangSoundEffect = SKAction.playSoundFileNamed("Bang.mp3", waitForCompletion: false) runAction(bangSoundEffect) 其他尝试: self.runAction(SKAction.playSoundFileNamed("Bang.mp3", waitForCompletion: false)) 也: func playRocketExplosionSound(filename: String) { let url = NSBundle.mainBundle().URLForResource( filename, withExtension: nil) if (url == nil) { print("Could not find file: \(filename)") return } var error: NSError? = nil do { backgroundMusicPlayer = try AVAudioPlayer(contentsOfURL: […]

SpriteKit液体(水)

如何在spriteKit应用程序中获得less量液体? 我想要一个容器中的液体,它会被密封在里面,但我希望它能够移动。 有没有更好的方法来实现这一点? 也许没有SpriteKit的选项? 编辑:我能够使用本教程模拟水: http : //www.raywenderlich.com/85515/liquidfun-tutorial-1 这个示例项目我发现: https : //github.com/safx/liquidfun-ios-sample 但它需要我运行2个物理世界(box2D 1和spriteKit 1)。 有谁知道我怎么可以从box2D我的粒子spriteKit? 我想这应该是可行的,因为spriteKit在box2D上运行,以及?

SpriteKit着色器崩溃iOS 9:SKDefaultShading,gl_FragCoord

刚刚安装了iOS 9的公测(版本3),现在我遇到了很多SpriteKit着色器的问题。 在iOS 8下面的代码工作得很好: _fontShader = [SKShader shaderWithFileNamed:@"TheShader"]; // TODO: iOS9 compatibility issues here _fontUniform = [SKUniform uniformWithName:@"labelBase" float:0]; [self.fontShader addUniform:self.fontUniform]; // TODO: iOS9 compatibility issues here _fontEffects = [SKEffectNode node]; self.fontEffects.shader = self.fontShader; // TODO: iOS9 compatibility issues here self.fontEffects.shouldEnableEffects = YES; self.fontEffects.shouldCenterFilter = NO; self.fontEffects.shouldRasterize = YES; [self addChild:self.fontEffects]; 编辑:文件“TheShader.fsh”看起来像这样: float yPos = […]

节点旋转不遵循手指

我试图旋转一个箭头来跟随手指的移动,但它执行奇怪。 这绝对不是跟着它。 我试图在touchesMoved做。 我试图做到这一点: var fingerLocation = CGPoint() override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) { for touch: AnyObject in touches { fingerLocation = touch.locationInNode(self) let currentOrient = arrow.position let angle = atan2(currentOrient.y – fingerLocation.y, currentOrient.x – fingerLocation.y) let rotateAction = SKAction.rotateToAngle(angle + CGFloat(M_PI*0.5), duration: 0.0) arrow.runAction(rotateAction) } } 而且也试过这个: var fingerLocation = CGPoint() override […]