Tag: skspritenode

SKAction.moveToX重复值更改

我希望能够移动球,每隔20像素移动一次我试过这个球,但是什么也没做,球停留在开始的地方,它不移动到屏幕的尽头,我知道我没有不要把waitForDuration,因为我想检查它是否会移动或不 func spwan() { let ball:SKSpriteNode = SKScene(fileNamed: "Ball")?.childNodeWithName("ball") as! SKSpriteNode ball.removeFromParent() self.addChild(ball) ball.name = "spriteToTrack" ball.zPosition = 0 ball.position = CGPointMake(1950, 1000) var num:CGFloat = ball.position.x let a1 = SKAction.moveToX(num – 20, duration: 10) // i want to get to -50 let a1 = SKAction.moveToX(-50 , duration: 10) let minus = SKAction.runBlock{ num -= […]

将切片转换为XCode Swift中的精灵节点

我正在开发一个迷你游戏,并使用Tiled程序绘制了地图。 假设我使用了三张图片的一组图片; 我如何将它们“转换”为SKSpriteNodes? 假设有一个瓦片表示字符,三个瓦片表示地面。 我希望这四个是精灵节点。 提前致谢

SKShapeNode使用错误的宽度和高度

最近我一直在创造一个游戏,在屏幕上放置圆圈。 不过,我注意到通告不是圆圈,而是椭圆。 y轴被拉伸的x轴已经缩小了。 为了弄清楚这个问题,我现在正在试图用一个矩形进行debugging。 我做矩形有相同的高度和宽度(方形),但是,当变成skshapenode它不再是正确的形状。 代码: var testSquare = CGRect(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame), width: 1, height: 1) var squareNode = SKShapeNode(rect: testSquare) println(testSquare.width) println(testSquare.height) println(squareNode.frame.width) println(squareNode.frame.height) self.addChild(squareNode) 这是从这里打印的: 1.0 1.0 513.5 385.5 如果我将testSquare的高度和宽度都更改为100,则这是打印的内容: 100.0 100.0 612.5 484.5 出于某种原因,x中squarenode的框架增加了512.5,在y中增加了384.5。 屏幕上出于某种原因,创build的矩形在Y中的长度更长。 也许框架不是我应该打印的数字,但不pipe屏幕上的形状是不是一个正方形。 有谁知道这是为什么? 任何帮助是极大的赞赏!

不兼容的块指针SKSpriteNode

这是我的代码 – (void) update:(NSTimeInterval)currentTime { [self.children enumerateObjectsUsingBlock:^(SKSpriteNode * child, NSUInteger idx, BOOL *stop) { child.position = CGPointMake(child.position.x-self.scrollingSpeed, child.position.y); if (child.position.x <= -child.size.width){ float delta = child.position.x+child.size.width; child.position = CGPointMake(child.size.width*(self.children.count-1)+delta, child.position.y); } }]; } 我得到一个错误 Incompatible block pointer types sending 'void (^)(SKSpriteNode *__strong, NSUInteger, BOOL *)' to parameter of type 'void (^ _Nonnull)(SKNode * _Nonnull __strong, […]

如何将一个滑动手势添加到spritekit中的节点

我试图添加一个滑动手势到一个节点,以便当用户滑动它,它会离开屏幕,但我不断收到一个SIGABRT错误: `Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[fidget2.PlankScene swipedRight:]: unrecognized selector sent to instance 0x7ff4c3603e00'` 我不知道为什么这个错误是popup。 我确保节点在.sks文件中正确标记。 这是我的代码: import SpriteKit let plankName = "woodPlank" class PlankScene: SKScene { var plankWood : SKSpriteNode? override func didMove(to view: SKView) { plankWood = childNode(withName: "woodPlank") as? SKSpriteNode let swipeRight : UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: Selector("swipedRight:")) […]

如何在SpriteKit中使用类似于物理的台球?

我是SpriteKit的新手,正在尝试制作台球游戏,但似乎没有正常工作。 球不会互相反弹或池提示。 我不确定我做错了什么。 这是一些球和池提示的示例代码。 任何帮助将不胜感激! class PoolTableScene: SKScene, SKPhysicsContactDelegate { struct PhysicsCatagory { static let None : UInt32 = 0 //0 static let PokeBall : UInt32 = 0b1 //1 static let PoolCue : UInt32 = 0b1000 //5 static let All : UInt32 = UInt32.max } let ballPoke = SKSpriteNode(imageNamed:"pokeBall") let cuePool = SKSpriteNode(imageNamed: "poolCue") override […]

使用Sprite Kit和Swift从另一个场景影响一个孩子

我试图教自己的Sprite Kit和Swift。 我想要做的是从ArcheryScene.sks文件访问一个子节点,并从ArcheryScene.swift文件中影响该子节点。 例如:在我的ArcheryScene.swift文件中,我添加了这一行代码: let scene = SKScene(fileNamed: "ArcheryScene") 。 这编译罚款,当我说println(scene) ,它正确打印我想要打印的场景,这就是我知道ArcheryScene.sks是真正在我的scenevariables。 在此之后,我通过添加以下代码行来访问该场景中的一个孩子: let ballChild = scene.childNodeWithName("Ball") 。 当我使用println(ballChild) ,它打印正确的孩子,让我知道variables确实包含在ArcheryScene.sks中的Ball子。 现在我的问题… 为什么我不能在我的ArcheryScene.swift文件中这样说: ballChild?.physicsBody?.affectedByGravity = false 要么 ballChild?.position.x = self.frame.size.width / 2 要么 let move = SKAction.moveByX(40, y: 0, duration: 5.0) ballChild?.runAction(move) 所有这些代码都可以毫无错误地进行编译,但是当我运行游戏时,Ball并没有受到任何影响。 此外,如果我运行ballChild?.position.x = self.frame.size.width / 2 ,然后打印ballChild位置,它将显示为x:512,这应该是,但仍然当我运行游戏中,Ball不受影响。 这真是令我困惑,我只想弄清楚发生了什么。 任何build议,将不胜感激,谢谢。

使用SpriteKit和SWIFT为游戏构build网格级别

我正在寻找构build游戏关卡的最佳方式: 游戏将由多个层次组成,每个层次都将是独一无二的。 你会播放一个对象(这里是明星),这是在网格上移动。 物体只能移动到底部,不能返回。 一个级别由多个案例组成,每个案例都会有不同的行为。 我的水平将有一个背景,屏幕的宽度,但高度将取决于水平,我想是屏幕的高度的许多倍。 背景移动取决于对象的移动 现在,我正在研究一个小原型,只是为了学习。 阅读了许多教程后,我的想法是使用SKSpriteNode创buildx个方块(菱形)。 并用标识符来标识正方形。 我不知道在性能方面是否是一个好的解决scheme? 他们会在一个层面上很多广场。 我不知道:) 我们受限于一个场景中的节点数量吗?

Swift&SpriteKit – 如何在GameScene中显示警报视图

我需要在游戏场景中提供一个警报视图的帮助。 我目前正在努力做到这一点,因为GameScene.Swift不是一个标准的ViewController。 如果有帮助,我需要这样做,因为我需要用户input一个值作为我的游戏中的Sprite Sprite Kit Node的坐标。 input只是一个标准的整数,所以不是一个问题。 任何其他的想法,我怎么能做到这一点,而不是通过一个警报视图也是受欢迎的。 override func viewWillLayoutSubviews() { super.viewWillLayoutSubviews() let view = self.view as! SKView if view.scene == nil { view.showsFPS = false view.showsNodeCount = false let gameScene = GameScene(size: view.bounds.size) gameScene.scaleMode = SKSceneScaleMode.AspectFill view.presentScene(gameScene) } } 这是在GameViewController文件中 var vc : GameViewController! override init(size: CGSize) { super.init(size: size) let alertController = […]

如何设置边界到场景物理正常弹跳?

我实现了一个简单的物理来反弹一个sprite node ,除了节点之外的所有东西都在顶部和底部的屏幕上反弹。对于边来说它是好的,但是从顶部和底部的视angular来看,它们是离开屏幕的。 这是观点: 正如你所看到的那样,我的球从底部的屏幕上掉下来,在那里它碰到了其他三面。 这是因为我改变了: self.physicsBody=[SKPhysicsBody bodyWithEdgeLoopFromRect:CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, self.frame.size.height-100)]; 如果我使用scene frame ,那么球在顶部和底部都会离开屏幕,但是它会弹跳。 self.physicsBody=[SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame]; 我的问题是为什么self.frame不足以为self.frame设置界限? 当我设置这样的边界时,唯一的条件适用于我: self.physicsBody=[SKPhysicsBody bodyWithEdgeLoopFromRect:CGRectMake(self.frame.origin.x, self.frame.origin.y+100, self.frame.size.width, self.frame.size.height-200)];