我在我的SpriteKit项目中创建的是由大约160个Sprite节点组成的大型二维平铺背景。但对我来说,这似乎非常低效。将这些节点置于单个父节点下是否会使它们更有效率?我假设不会,在那种情况下,他们是否有一种在运行时将纹理本身组合到单个节点中的方法?我会简单地使用图像编辑器来平铺这些图像,但由于我项目中的其他因素,所述背景的大小会因设备而异。 最佳答案 你可以做什么,在你的加载阶段,创建160个Sprite节点,使你的背景在1个父节点下,然后调用lettexture=scene.view.textureFromNode(paren
我必须构建一个可以使用各种手势为3D对象着色的Swift应用程序。我有一个作为SceneKit对象导入的Collada文件。我找不到用水龙头给它上色的方法。我尝试从WWDC示例转换Obj-C,但它对我不起作用。我尝试在3D对象上应用SpriteKit作为纹理,但结果是这样:当用户点击屏幕时,应用程序应获取3D对象的纹理坐标,然后在该点添加一个SpriteKit节点。之前:之后:我不知道为什么纹理会以这种方式爆炸。谢谢! 最佳答案 SpriteKit场景坐标系统并不像图像那样映射到纹理坐标。图像中的像素坐标具有向下增加的y轴;在Spr
我正在尝试使用SKAction.rotateToAngle旋转Sprite。例如:rotate=SKAction.rotateToAngle(desiredAngle,duration:1.0)sprite.runAction(rotate)但它并没有像预期的那样工作。Sprite以不同的方式旋转。通过尝试和尝试,我发现这是SpriteKit采用的旋转系统:现在我不知道他们为什么决定采用这个坐标系,但它非常违反直觉。我怎样才能在这个系统和普通系统之间转换?顺便问一下,我怎样才能顺时针旋转Sprite? 最佳答案 来自文档:Anang
我的屏幕顶部有6个不同的彩色圆圈落下。对于每个节点,您应该朝不同的方向滑动以得分(红色圆圈;向上滑动,蓝色圆圈;向下滑动等),但是如果用户向与分配给该特定节点的方向不同的方向滑动,它结束了游戏。我对滑动手势非常不熟悉,所以我没有代码,但非常感谢帮助。我如何生成我的节点:funcarray(){letcolorCount=5letindex=Int(arc4random_uniform(UInt32(colorCount)))letcolors=SKSpriteNode(imageNamed:"Color\(index+1)")colors.size=CGSizeMake(130,130
我正在制作一个简单的游戏(使用Swift和SpriteKit),我有一个可以四处拖动的圆圈。但圆圈不允许穿墙。我的碰撞BitMask完美运行,但是当我拖动得足够快时,圆圈最终会穿过墙壁。PlayerSprite的初始化是这样的:funcinitPlayerSprite(){letplayerTexture=SKTexture(imageNamed:"player.png")letoriginX=CGRectGetMidX(self.frame)letoriginY=CGRectGetMidY(self.frame)player=SKSpriteNode(texture:playerTe
这是我的代码:overridefuncdidMoveToView(view:SKView){/*Setupyourscenehere*/letbackgroundImage=SKSpriteNode(imageNamed:"Background.jpeg")backgroundImage.size=self.frame.sizebackgroundImage.position=CGPoint(x:self.frame.width/2,y:self.frame.height/2)backgroundImage.zPosition=1self.addChild(backgroundImag
解释我正在iPhone5s上构建游戏,但现在我想让它通用,以便它可以在所有iPhone(或至少4s之前)和所有iPad(或至少iPad2之前)上运行。到目前为止,我几乎已经创建了这3张图像(1x、2x和3x)。所以有一个50x50的正方形(@1x)、一个100x100的正方形(@2x)和一个150x150的正方形(@3x)。这是我正在测试的示例项目(下载here):importSpriteKitclassGameScene:SKScene{overridefuncdidMoveToView(view:SKView){/*Setupyourscenehere*/scene!.scaleM
我希望能够根据分数打开和关闭我的SKEmitterNode(雨粒子)。但是我的更新功能不断被调用,即我最终在屏幕上看到数百万个粒子,下面是我当前的代码……我如何构建我的代码,以便在达到分数时只调用一次雨粒子?classGameScene:SKScene,SKPhysicsContactDelegate{funcsetUpRain(){ifletrainParticle=SKEmitterNode(fileNamed:"Rain"){rainParticle.position=CGPointMake(frame.size.width,frame.size.height)rainParti
我是Swift3和一般编程的完全初学者,所以这将是一个非常基础的问题。我一直在学习教程,目前正在使用CGPoint定位SpriteNode。本教程推荐以下方法将节点定位在屏幕底部的中央:Ground.position=CGPoint(x:self.frame.width/2,y:0)但是,这会导致它停留在屏幕的右上角。当我使用下面的代码时:Ground.position=CGPoint(x:0-self.frame.width/2,y:0-self.frame.height/2)它按预期定位在底部中心。我不明白为什么会发生这种情况,因为此时教程中几乎没有其他内容会导致错误。
当调用funcdidBegin(_contact:SKPhysicsContact)的SKScene中发生接触时,需要确定哪个SKPhysicsBody是contact.bodyA和contact.bodyB。但是,我一直没有成功地发现在调用函数之前是如何设置的。这会导致不成功的向下转换(例如(contact.bodyA.node!as!MySpriteNode)导致应用程序崩溃。我的模式理论涉及到它是由应用程序节点树中的SKNode对象的顺序或它们在场景的self.childen中的顺序决定的,但是这已被证明是不正确的。有时,在self.children中晚于bodyB.node的节