Tag: 雪碧套件

如何在Sprite Kit中设置纹理以平铺

我正在制作一个精灵套件游戏,并且使用平铺纹理的一个大SKSpriteNode比拥有多个具有贴图纹理的SKSpriteNode更有效率。 我的问题是,当我尝试使用5×5瓷砖 SKTexture* tex = [SKTexture textureWithRect:CGRectMake(0,0,5,5) inTexture:[SKTexture textureWithImageNamed:@"tile.png"]]; SKSpriteNode* node = [SKSpriteNode spriteNodeWithTexture:tex size:CGSizeMake(100,100)]; 图像大小合适,但是被夹住,没有平铺。 在openGL中,我得到一个GL_CLAMP_TO_EDGE,我想要一个GL_REPEAT。 无论如何,我可以在单个SKSpriteNode中实现纹理的拼贴效果,而不会创build非常大的图像。 这是我的问题的一个形象:

相对于其他dynamic体移动一个dynamic体

我遇到了一些我找不到解决scheme的问题。 我有摇摆的平台(body1)和英雄(body2)站在上面。 平台摇摆,所以英雄在平台上左右移动。 一开始我要英雄站在平台上而不改变它相对于平台的地位。 我通过joinSKPhysicsJointFixedjoin平台和英雄。 那么在游戏的某个时刻,我希望英雄跑在平台上,这意味着Y应该和平台保持一致,而X应该会增长。 我find的唯一解决scheme是使英雄身体静态,并改变它在didSimulatePhysics的位置。 那种方法的问题是那个位置没有准确地改变。 与平台位置相比,英雄位置落后于一个框架。 英雄到达平台右端后,他应该停止移动,然后再站在平台上。 所以我让英雄身体静止,再加上固定的关节。 而且由于英雄位置的变化与英雄相对平台的位置不正确有关。 有时它会停止平台表面以下的某些像素,有时会停止平面上方的某些像素。 那么有没有其他的方法可以让英雄沿着平台移动,英雄身体应该始终保持dynamic。

在Sprite Kit中创buildbutton的正确方法?

我正在做一个游戏,我想要一个button。 我如何处理窃听呢? 我使用单独的类为UI,它是SKSpriteNode持有所有的button和界面元素,我不希望场景来处理这些button触摸我的触摸开始方法。 据我所知,我们可以检查在触摸点被触摸的节点开始,所以要实现正常的button与触摸里面我需要在touchesBegan和touchesEnded编写代码,这看起来有点矫枉过正。 或者我应该使用普通的UIButton? 但我知道,你不能dynamic地添加这些,只有在didMoveToView方法,这看起来不好。

在Xcode Spritekit中缩放物理实体

我最近遇到了一个问题,我会增加一个节点的大小,但物理机构将保持相同的大小。 我试图寻找解决scheme,但没有成功。 我怎样才能使节点的大小与人体比例? CGPoint location = CGPointMake(randX, -self.frame.size.height – expander.size.height); SKAction *moveAction = [SKAction moveTo:location duration:randDuration]; SKAction *expandAction = [SKAction resizeToWidth:(expander.size.width * 1.4) height:(expander.size.width * 1.4) duration:1.0]; SKAction *collapseAction = [SKAction resizeToWidth:(expander.size.width) height: (expander.size.height) duration:1.0]; SKAction *doneAction = [SKAction runBlock:(dispatch_block_t)^() { expander.hidden = YES; }]; SKAction *expandCollapseAction = [SKAction repeatActionForever:[SKAction sequence:@[expandAction, collapseAction]]]; SKAction *moveExpandAction = […]

NSGenericException原因Collection <NSConcreteMapTable:xxx>

这是我目前SKScene看到的错误,这个错误是随机发生的,不能复制 *由于未捕获exception'NSGenericException',原因:'* Collection <NSConcreteMapTable:0x1459da60>被枚举时发生了变异。 发生了什么? 告诉我,如果你需要任何其他信息 谢谢 编辑: *** First throw call stack: ( 0 CoreFoundation 0x025601e4 __exceptionPreprocess + 180 1 libobjc.A.dylib 0x022298e5 objc_exception_throw + 44 2 CoreFoundation 0x025efcf5 __NSFastEnumerationMutationHandler + 165 3 Foundation 0x01e47f03 -[NSConcreteMapTable countByEnumeratingWithState:objects:count:] + 66 4 CoreFoundation 0x0253d77f -[__NSFastEnumerationEnumerator nextObject] + 143 5 SpriteKit 0x01d009f2 +[SKTextureAtlas(Internal) findTextureNamed:] + 232 6 SpriteKit […]

如何解散SKScene?

当我完成我的SKScene是否有一种方法来解散我的SKScene类SKScene? 如果没有在我的ViewController中显示我的SKScene [skView presentScene:theScene]; 有没有办法重新启动现场或删除从我的SKView? SKScene类参考和SKView类参考没有帮助。 更新: 下面的代码从我的SKView中删除我的场景[yourSKView presentScene:nil]; 但是当我回到我的视图控制器时,场景仍然在后台运行。 当游戏结束时,我总是可以暂停它,然后我回到我的视图控制器(菜单),但我想知道是否有另一种方法,然后像彻底删除它一样暂停它? -(void)endTheGame { [highscoreLabel removeFromSuperview]; NSLog(@"Game Over"); //would like to end here before calling the below method in my view controller [self.delegate mySceneDidFinish:self]; }

Sprite Kitpipe脚关节似乎具有不正确的锚点

我正在用Sprite Kittesting针脚关节,并且发现了一些不寻常的事情。 我想要的设置是这样的:一个宽,扁平的盒子和两个圆圈; 圆圈通过SKPhysicsPinJoints连接到箱子,所以它们可以作为车轮。 这是我的代码。 我试图尽可能简洁: – (SKNode*) createWheelWithRadius:(float)wheelRadius { CGRect wheelRect = CGRectMake(-wheelRadius, -wheelRadius, wheelRadius*2, wheelRadius*2); SKShapeNode* wheelNode = [[SKShapeNode alloc] init]; wheelNode.path = [UIBezierPath bezierPathWithOvalInRect:wheelRect].CGPath; wheelNode.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:wheelRadius]; return wheelNode; } – (void) createCar { // Create the car SKSpriteNode* carNode = [SKSpriteNode spriteNodeWithColor:[SKColor yellowColor] size:CGSizeMake(150, 50)]; carNode.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:carNode.size]; carNode.position […]

Spritekit – 不从SKTextureAtlas加载@ 3x图片

由于我的示例项目被删除(我认为这将是更容易testing),我会张贴一些代码和图像来说明我的观点。 这里是示例图像 我的地图集设置: 我的启动图像设置: 代码中我添加这些精灵到我的场景 override func didMoveToView(view: SKView) { let texture = SKTextureAtlas(named: "scenery") let test = SKSpriteNode(texture: texture.textureNamed("test")) test.position = CGPoint(x: self.size.width/2, y: self.size.height/2) self.addChild(test) } 这些是我的结果: iPhone 5模拟器: iPhone 6 plus模拟器: 我尝试更改启动图像以使用资产目录。 然后iPhone 6加上似乎高档2倍的屏幕。 它仍在加载2倍的图像,但将其扩展。 我需要它来加载我的3倍图像,并与我的2倍图像成比例。 Gabuh的回答下面指出了正确的方向。 在一个新项目上工作。 但是,如果我使用他的解决scheme来处理我的真实SpriteKit项目,我的3x图像不会缩小。 他们比他们应该大3倍。

检测sprite套件中的冲突

我试图用sprite套件做一个简单的游戏。 基本的想法是,有一个玩家可以跳跃,以避免块。 但是我有一个问题,我不知道怎么做,当玩家击中区块,玩家消失,血液animation开始。 首先,我不明白这个代码是在苹果网站上find的。 static const uint32_t blockCategory = 0x1 <<0; static const uint32_t playerCategory = 0x1 <<1; 比我打电话didBeginContact函数,并在其中放置一个NSLOG(“没有调用函数”)。 但是我从来没有收到我的debugging器的输出。 这是我的_player和_block代码: – (SKSpriteNode *)字符{ _player = [SKSpriteNode spriteNodeWithImageNamed:@"soldier_run1"]; _player.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:_player.size.width /2 -5]; _player.physicsBody.dynamic = YES; _player.physicsBody.usesPreciseCollisionDetection = YES; _player.physicsBody.friction = 0; _player.physicsBody.categoryBitMask = playerCategory; _player.physicsBody.collisionBitMask = blokCategory; _player.name = @"player"; SKAction *animAction = […]