Tag: skscene

UIViewController中的SKScene

我正在使这个应用程序具有多个function,其中之一应该是一个游戏。 正常的碰撞游戏,你打对象和得分。 但我的应用程序是基于单一的应用程序。 当我创build一个新的swift文件,我如何添加SKScene到UIViewController? 任何帮助将不胜感激。

如何将一个滑动手势添加到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:")) […]

Sprite Kit – 当精灵离开屏幕时,移动场景和相机与精灵

我正在尝试创build一个从屏幕上延伸一定距离的场景,并且我希望相机保持以播放器节点为中心。 当玩家到达屏幕的顶部时,我希望底部节点消失在屏幕边界之下并且场景的新的屏幕外部分变得可见。 像马里奥! 我创build这样的场景大小: CGSize screenSize = CGSizeMake(skView.bounds.size.width, skView.bounds.size.height + (skView.bounds.size.height/3));//+ (skView.bounds.size.height/3) scene = [GameScene sceneWithSize:screenSize]; 然后,将所有的节点添加到WorldNode中,就像这个问题一样。 我已经修改它是: – (void)didSimulatePhysics { CGFloat margin = self.size.height/3;// previously defined // make sure the cat's position is defined in scene coordinates CGPoint catPosition = [self convertPoint:cat.position fromNode:cat.parent]; if (catPosition.y > (self.size.height – margin)) { CGPoint worldPosition = worldNode.position; […]

使用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议,将不胜感激,谢谢。

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

我实现了一个简单的物理来反弹一个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)];

在SpriteKit的SKScene和SKSpriteNode中接收触摸事件

用SKSpriteNode的button构build一个UI。 button精灵接收触摸事件来处理特殊效果(弹性缩放效果)但是我需要SKScene同时处理触摸事件来处理UI导航逻辑。 (精灵和场景)如何处理这些触摸事件?

如何正确使用Swift在SpriteKit中切换SKScenes?

我正在开发一个有3个不同的SKScenes(scene1,scene2,scene3)的游戏。 在GameViewController中,我像这样初始化它们: class GameViewController: UIViewController { var hero = Hero() var skView: SKView! var scene1: SKScene! var scene2: SKScene! var scene3: SKScene! override func viewDidLoad() { super.viewDidLoad() // init scenes scene1 = SKScene(size: view.bounds.size, hero: hero) scene2 = SKScene(size: view.bounds.size, hero: hero) scene3 = SKScene(size: view.bounds.size, hero: hero) scene1.scaleMode = .AspectFill scene2.scaleMode = .AspectFill scene3.scaleMode […]

当SKSpriteNode与类别一起使用时,纹理未find,精灵不显示

我开始使用SKSpriteNode类别系统来扩展SKSpriteNode的基本function,并且通过编辑器添加到.sks场景中的精灵现在从场景中丢失(而不是在运行时以编程方式添加到场景中)。 当我在.sks上logging一些精灵时,我可以看到它们的正确位置和缩放参数,但是在XCode的debugging控制台中纹理总是['nil']。 发生这种情况(见下面的NSLog行)当我例如在GameScene1.sks的场景编辑器中的静态SKNoe内的名为“house1”的日志元素。 在场景编辑器上,我可以看到所有的元素(包括house1元素),但是当我启动项目时,没有添加到该.sks文件的精灵。 这是相关的代码: GameScene头文件是: //GameScene.h #import "Hero.h" #import "SKSpriteNode+StaticLevelElement.h" @interface GameScene : SKScene <SKPhysicsContactDelegate> -(void) initStaticLevelElements; @end GameScene的实现文件是: //GameScene.m #import "SKSpriteNode+StaticLevelElement.h" @implementation SKScene (Unarchive) + (instancetype)unarchiveFromFile:(NSString *)file { /* Retrieve scene file path from the application bundle */ NSString *nodePath = [[NSBundle mainBundle] pathForResource:file ofType:@"sks"]; /* Unarchive the file to an SKScene object […]

除了GameScene,如何创build更多的SKScene

我试图创build一个SKScene“MainScene”的新子类,就像创buildGameScene的一个苹果一样。 我想创造更多的场景,除了我的“GameScene”,但它不工作。 以下是我的子类代码。 MainScene: import SpriteKit #if !os(iOS) import AppKit #endif class MainScene : SKScene { override func didMoveToView(view: SKView) { backgroundColor = UIColor.blueColor() } } MainSceneViewController: import UIKit import SpriteKit class MainViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() if let scene = MainScene(fileNamed:"MainScene") { // Configure the view. let skView = self.view as! […]

将UITextView添加到SpriteKit中的场景中

我试图创build一个游戏,并遵循苹果的build议,我正在使用多个场景。 你可以认为游戏是一个文本的重点和点击冒险。 这就是问题所在。 大量的文本,做了一些search,似乎是推荐的方式,或者更确切地说,目前唯一的方法是使用UITextView : [self.view addSubview: textView]; 如果您只有一个SKScene ,那么这是非常好的,因为这是当前视图/ SKView所显示的场景。 我的问题是,当我添加文本到我场景的*视图,这不是应用程序加载的第一个场景(它的第三个或更高),应用程序跳回到它加载的第一个场景(这是我的菜单场景),并愉快地显示所需的文字。 有人知道为什么吗? 我有菜单场景过渡到场景一,到场景二(我希望显示testing)。 如果我想要在每个场景中显示一些以上的单词,请不要说每个场景都需要一个视图,这只是没有意义,但是也许不会使用SpriteKit。 我还是有些什么惊呆了,没有UITextView SK等价物。 无论如何,任何帮助,指针会很好,谢谢。 好的,这里是代码的相关部分….我想。 控制器: – (void)viewWillLayoutSubviews { [super viewWillLayoutSubviews]; // Configure the view. SKView *skView = (SKView *)self.view; skView.showsFPS = YES; skView.showsNodeCount = YES; skView.showsDrawCount = YES; // Create and configure the scene. SKScene *scene = [[GTMainMenu alloc] initWithSize:skView.bounds.size]; […]