Tag: sprite kit

缩放SKSpriteNodes制作的钟摆

我有一个摆锤的工作时钟,但摆动臂不能正确缩放。 这是缩放前的样子 然后,缩放后… 钟面缩小,摇臂(绿线)也缩小,但它看起来像围绕它的中心点缩放,而不是在脸部中心的支点。 我可以通过设置swing的anchorPoint来解决这个问题,所以它可以扩展到一端而不是中心。 swing.anchorPoint = CGPointMake(0, 0.5); 但这样做会导致摆锤不摆动。 (我认为是因为物理力量被应用到摆动的anchorPoint上,如果我把它移动到一端,就是在固定的锚点上)。 我怎样才能让arm向支点伸展,并仍能摆动? 这是代码… // in my SKScene ClockFace *face = [ClockFace face]; // just an SKNode subclass face.name = @"face"; face.position = CGPointMake(150, 150); [self addChild:face]; // add the pendulum SKSpriteNode *fulcrum = [SKSpriteNode spriteNodeWithColor:[UIColor redColor] size:CGSizeMake(5, 5)]; [face addChild:fulcrum]; fulcrum.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:fulcrum.frame.size]; fulcrum.physicsBody.dynamic […]

SpriteKit如何在每次变化的随机数的animation循环之后重复SKAction?

我有一个SKSpriteNode纹理animation。 我基本上有一个4帧的字符闲置周期和一个眨眼animation序列。 我想要永远循环字符闲置循环,但是让它以随机的间隔播放闪烁的animation序列。 我有以下代码; func playIdle() { let idle_loop = SKAction.repeatAction(action_textureSequence_idle!, count: randomLoopCount()) let sequence = SKAction.sequence([idle_loop, action_textureSequence_blink!]) let repeatSequence = SKAction.repeatActionForever(sequence) runAction(repeatSequence) } func randomLoopCount() -> Int { return Int(arc4random_uniform(10) + 2) } 问题在于,随机数只生成一次,所以眨眼不会随机发生。 就在每次循环次数相同之后。 我如何达到我要找的效果?

来自Texture的SKPhysicsBody在Spritekit中给出冲突空值

我正在创build一个angular色跳跃和收集点(一些对象)的游戏。 当你点击字符从阿特拉斯执行一些animation。 当它触及分数时,分数提高1.我使用SKTexture来创buildangular色的物理体。 当我的angular色触及到这个点时,它会崩溃,并向我显示这个错误 fatal error: unexpectedly found nil while unwrapping an Optional value //码 Cat = SKSpriteNode(imageNamed: "cat"); Cat.size = CGSize(width: 100, height: 100) Cat.position = CGPoint(x: self.frame.width/2, y: self.frame.height/2) //physics Cat.physicsBody = SKPhysicsBody(texture: SKTexture(imageNamed: "cat"), size:CGSizeMake(100, 100)) 但是,如果我从矩形或圆形创buildPhysicsbody它工作得很好。 也许是用我用来激活我的angular色的地图集。 Cat.physicsBody = SKPhysicsBody(circleOfRadius: self.frame.width/2) 当angular色碰到蘑菇时,它会崩溃。 工作演示: https : //github.com/nak1b/demo-game-error

用于animateWithTextures的纹理迷路了。 有些框架显示红色X.

我的xCode项目有以下… AppDelegate中 GameViewController OpeningScene MainMenuScene GameScene 当游戏开始时,AppDelegate创build一个包含所有纹理的数组,我将使用… [self.texturesArray addObject:[SKTexture textureWithImageNamed:@"Background05.jpg"]]; 有大约120个纹理。 然后我预先使用… [SKTexture preloadTextures:self.texturesArray withCompletionHandler:^{ NSLog(@"************ Finished Preloading Textures in AppDelegate.m *************"); [[STGD sharedGD].currentScene presentMainMenuScene]; }]; 然后,我提出的OpeningScene,等待上述完成处理程序告诉它显示主菜单。 这是问题… 在主菜单(animateWithTextures)中使用预加载纹理的一个animation。 有时某些框架丢失,并以红色的X表示,通常表示无法find的文件。 如果发生这种情况,则总是会发生以下情况:切换到游戏场景时使用相同的animation(虽然GameScene中的animation尺寸较大),并且相同的帧将会丢失并显示红色的X.一个MainMenuScene和一个GameScene(每次重新创build每个场景)和相同的框架将会消失,直到我重新启动应用程序。 我知道纹理正在代码中正确创build,因为大部分时间它工作正常。 但是在15个结果中有一个发生了一些animation纹理丢失。 而每次发生时,都不会有相同的帧,甚至是相同数量的帧。 如果这意味着什么,它们也不是相邻的框架:P 在我开始使用预加载之前,我不相信这发生过。 但没有预加载我的最初fps是垃圾。 欣赏任何见解! 谢谢! 更新: 这里是我如何填充Star.m中的纹理数组。 Star对象用于MainMenuScene和GameScene self.animationSlides = [NSMutableArray arrayWithCapacity:45]; for (int i = 0; i < 45; i++) […]

检测并忽略触摸iAd横幅

我有一个Sprite Kit游戏,首先显示一个菜单屏幕。 当你点击屏幕上的任何地方时,游戏就开始了。 我正在显示iAd的。 我遇到的问题是,当用户点击iAd横幅查看添加,GameScene是响应水龙头,并开始游戏。 理想情况下,我想检测触摸是在iAd横幅上,而不是在这种情况下启动游戏。 GameScene.m -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { // I dont want to start game if the touch was on the iAd Banner NSLog(@"Touch detected – Start the game…."); [self startGame]; }

从AppDelegate调用GameScene方法(Swift 3,SpriteKit,Xcode 8)

我使用Spritekit和SWIFT 3来创build游戏,我的问题是当我尝试从applicationWillResignActive(_ application: UIApplication)方法的AppDelegate文件中调用我的GameScene类(SKScene的子类)中的pauseGame applicationWillResignActive(_ application: UIApplication)方法。 我已经尝试实例化GameScene类,然后以这种方式调用我的AppDelegate文件中的方法,虽然没有编译器错误它不起作用: func applicationWillResignActive(_ application: UIApplication) { if let gameScene = GameScene(fileNamed: "GameScene") { gameScene.pauseGame() } } 我该如何解决这个问题? 提前致谢。

iOS应用在设备上运行,但不在模拟器中运行

我有以下问题。 目前我正在开发一个Spritekit游戏。 游戏在iPhone5上运行完全平滑。 当我想在模拟器中运行应用程序时,编译器告诉我: fatal error: malformed or corrupted AST file: 'Unable to load module "/Users/macvideo/Library/Developer/Xcode/DerivedData/ModuleCache/3TAGE798UH20R/Darwin.pcm": module file not found' note: after modifying system headers, please delete the module cache at '/Users/macvideo/Library/Developer/Xcode/DerivedData/ModuleCache/3TAGE798UH20R' 但是当我想用64位模拟器运行它时,帧率非常低,但是没有错误。 (游戏也运行与iPhone5s非常顺利)。 我没有iPhone 4在设备上testing游戏。 但是在这里,编译器告诉我一个像上面这样的错误,当我想用​​iPhone4的模拟器运行应用程序! 我可以忽略游戏在真正的设备上运行没有任何问题,或者我必须关心这些错误吗? 谢谢你的帮助!

SpriteKit:使用SKTextureAtlas会导致不正确的Physics Body

我正在构build我的第一个精灵套件游戏,最近阅读了一篇文章,说使用SKTextureAtlas来提高性能。 所以我把我所有的精灵图像都转移到了有组织的.atlas文件夹中,并相应地更新了代码。 不过,现在我的精灵怪异的物理机构(主要是过度扩大) 。 例如,我的玩家精灵有三个状态:飞(平),飞起来,飞下来。 这三个图像是非常相似的,有轻微的变化(arm平放,上,下) 。 在迁移到纹理图集之前,物理图像与图像相关。 然而,现在它比图像大得多,在y轴上略微拉伸。 这是我的player.atlas文件结构: 玩家飞iphone.atlas: player-flying-down@2x.png player-flying-down@3x.png player-flying-up@2x.png player-flying-up@3x.png player-flying@2x.png player-flying@3x.png 下面是我的代码示例: (Player是一个子类SKSpriteNode) let textureAtlas = SKTextureAtlas(named: "player-iphone") let playerFlyingTexture = textureAtlas.textureNamed("player-flying") let player = Player(texture: playerFlyingTexture, color: UIColor.clearColor(), size: CGSizeMake(100.0, 100.0)) let physicsBody = SKPhysicsBody(texture: playerFlyingTexture, size: CGSizeMake(100.0, 100.0)) physicsBody.dynamic = true physicsBody.affectedByGravity = true physicsBody.usesPreciseCollisionDetection = false […]

混合雪碧套件与空应用程序

我目前正在开发一个Empty Application默认的iPhone Empty Application 。 这意味着Xcode创build的唯一东西就是一个AppDelegate。 在我的.pch文件中导入的唯一框架是<Foundation/Foundation.h>框架。 这是我的大部分应用程序的工作,但在一些地方,我想使用SpriteKit 。 是否可以在我的应用程序中使用SpriteKit框架使用Empty Application默认? 我问这是因为通常,如果我想使用SpriteKit,在Xcode中创build一个新的项目时,我必须特别selectSprite Kit Game默认。

我如何添加滚动视图到我的gameScene.swift,这将滚动一系列的精灵?

所以我创build了一个3×10的精灵网格,它离开了屏幕的底部边缘。 我已经添加了一个UIScrollView,滚动指示器出现,但实际上没有发生移动。 代码如下: import SpriteKit var buyButton = SKSpriteNode() var pic = SKTexture(imageNamed: "Button") class GameScene: SKScene, UIScrollViewDelegate { var scrollView = UIScrollView() var scrollFrame = CGRect!() override func didMoveToView(view: SKView) { /* Setup your scene here */ print(self.frame.size.width) scrollView = UIScrollView(frame: CGRect(origin: CGPointMake(0,0), size: CGSizeMake(self.frame.size.width, self.frame.size.height))) scrollView.contentSize = CGSizeMake(self.frame.size.width, self.frame.size.height*2) scrollView.bounces = false scrollView.pagingEnabled […]