草庐IT

Sprite-Kit

全部标签

ios - 使用导致内存泄漏的音频剪辑

我有一个不时使用音频剪辑的sprite-kit游戏场景(SKScene)。我不想每次需要运行一个简短的音频剪辑时都创建一个新操作(SKAction),因为声音可能会断断续续。因此,我用一个文件名初始化了一个Action变量,并准备好在必要时使用它。classGameScene:SKScene{letaudioMatchAction=SKAction.playSoundFileNamed("myAudio",waitForCompletion:false)}然后当我需要运行这个音频剪辑时,我只需要使用下面这行代码。self.run(audioMatchAction)考虑到所有情况,有一些

ios - 如何设置CAEmitterLayer背景透明?

varemitter=CAEmitterLayer()emitter.emitterPosition=CGPoint(x:self.view.frame.size.width/2,y:-10)emitter.emitterShape=kCAEmitterLayerLineemitter.emitterSize=CGSize(width:self.view.frame.size.width,height:2.0)emitter.emitterCells=generateEmitterCells()self.view.layer.addSublayer(emitter)在这里,CAEmit

ios - PhysicsBody 是零使用 SpriteKit 和 Swift

我有一个正在构建的SpriteKit游戏,我正在从一个多维数组中加载一个关卡。loadlevel函数第一次工作。如果我在physicsBody赋值上方执行physicsBody的println(在physicsBody初始化之后),它确实会失败。当我第二次使用removeChildrenInArray删除所有图block时,我运行加载级别时它会抛出一条错误消息,提示fatalerror:unwrappinganOptionalunwrappedlyfoundnil并且它指向右下方的行下面的println。println表示physicsBody是nil。在我看来,没有理由将新初始化的P

time - 你如何获得 "current system time"?

SKScene-update的文档如下:“当前系统时间”到底是什么?除了通过SKScene-update之外,我该如何获取它?我试过CFAbsoluteTimeGetCurrent(),但显然是这样Returnsthecurrentsystemabsolutetime[,whichis]ismeasuredinsecondsrelativetotheabsolutereferencedateofJan1200100:00:00GMT.并且与“当前系统时间”不同,根据我的测试,“当前系统时间”的值比“当前绝对时间”小几个数量级。 最佳答案

ios - 为 iphone 6 spritekit 游戏准备 Assets

我正在使用SpriteKit制作游戏,并使用代码定位卡片。卡片纹理的大小需要根据屏幕大小而不同,否则布局会被拧紧。当然与背景图片或任何其他布局相同。iphone6如何与低分辨率屏幕共享相同的@2x资源?这没有道理。我听说要为6设计,让旧手机缩小尺寸。但这似乎不是正在发生的事情。检查5s时,一切都被切断了。我的6+Assets很好,但当然它使用自己的一组3x图像。 最佳答案 显示比例因子并不能告诉您在选择资源和布置屏幕时可能需要的所有信息——例如如果您只有@2xAssets,它们将同时用于iPhone(4和更新版本)和iPad(3和更

iOS/WatchKit : Is there a way for the watch kit app(swift) to use the iOS code (Objective C)?

我考虑过使用桥接头,但我总是无法导入桥接接头。watch扩展(用swift编写)是否可以使用来自iOSApp(用ObjectiveC编写)的代码?我需要确保我这样做是正确和专业的。如果我可以使用桥接头,为什么会出现以下错误?:0:error:failedtoimportbridgingheader 最佳答案 它可能像路径问题一样简单。但我通常做的是创建一个虚拟的Objective-C文件,这样Xcode就会为我创建那个桥接header,然后我只需将路径复制并粘贴到扩展的build设置中。我已经包含了一个演示项目,该项目从桥接head

swift - 从 Spritekit 中的多个 block 创建一个 "smooth"平面

我正在尝试使用Spritekit和Swift编写一个iOS游戏,这是我关于stackoverflow的第一个问题:)为了简化我的问题和我的约束,假设我有两个高度相同的矩形SKShapeNodes(我的关卡),它们完全并排,具有物理实体但非动态。英雄只是一个方形的SKShapeNode,具有动态物理体,可以在这些矩形的顶部移动。玩家使用加速度计移动英雄。我不确定为什么,但有时,当英雄沿着矩形的顶部滑动时,它会立即停在两个矩形之间的缝隙处,或者似乎被这个缝隙绊倒(小跳过去):(((移动应该是平滑的。是否有一种变通方法可以使两个矩形之间的表面更“平坦”/更平滑,因为我知道我不能为了游戏目的而

swift - 使用 SpriteKit/Views 与 ViewController 显示关卡

我正在使用Swift制作游戏,并希望允许用户选择一个级别(点击它)来玩该特定级别。每个级别都是屏幕上的一个框,其中包含级别编号。因此,如果该区域有20个级别,您会在屏幕上看到20个框,其中包含级别#和名称以及您获得的星星数。我对最好的方法感到困惑。我看到两种方式:您创建一个拥有UICollectionView的ViewController,我将关卡作为数据源输入其中,并在那里处理点击事件。当你点击它时,我可以对相应的游戏场景(SKScene)做一个presentScene来处理正常的游戏绘制。我使用for..循环将关卡直接渲染为屏幕上的SKSpriteNode(关卡框),然后执行add

ios - 从 SKNode 中删除特定的 SKAction 列表

在开发不同节点之间的一些交互过程中,我意识到我需要从节点中删除特定的操作列表。当前版本的Sprite-Kit框架提供了一些实例方法:removeAllActions()action(forKeykey:String)hasActions()显然,在我的节点中运行的每个操作都有一个String键用于标识。所以我想到了一个和removeAllAction很相似的东西,然后我做了一个SKNode扩展:publicextensionSKNode{funcremoveAllAction(inlist:[String]){list.forEach{ifself.action(forKey:$0)!

swift - 如何限制 SpriteKit 中的缩放

我有一个Swift+SpriteKit应用程序,它将SKSpriteNode加载到场景中,注册UIPinchGestureRecognizer,并使用简单的处理函数处理捏合手势,如下所示:funczoom(_sender:UIPinchGestureRecognizer){//Don'tletthemapgettoosmallortoobig:ifmap.frame.width>=1408&&map.frame.width但是,捏合仍会使sprite节点的大小小于指定的限制,然后当我尝试再次松开捏合时,处理程序突然识别出我设置的限制并且将不允许和松开手势.我试过用识别器的比例属性做同样