小编Ale*_*ano的帖子

ios Sprite Kit screengrab?

我试图获取一个包含SKScene的视图的屏幕抓取.我使用的技术是:

UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, scale);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Run Code Online (Sandbox Code Playgroud)

这适用于普通的UIViews,但无论出于何种原因,它忽略了SKScene中的所有精灵.

我不确定这是否是一个错误,或者Sprite Kit的渲染是否与UIGraphics分开.

问题:当UIViews的工作方式似乎无法与Sprite Kit一起使用时,或者是否有人使用Sprite Kit使用UIGraphics上下文时,如何获取SKScene的屏幕抓取?

objective-c ios uigraphicscontext sprite-kit swift

27
推荐指数
2
解决办法
3786
查看次数

水平镜像SKSpriteNode纹理

我正在使用名为Sprite Kit的新API开发iOS7游戏.我想水平旋转SKSpriteNode图像/纹理.我已经尝试过首先镜像图像,然后创建一个SKTexture,最后将它应用到SKSpriteNode,但它不起作用.有办法做到这一点吗?或者我应该有不同的图像?

image objective-c ios7 sprite-kit swift

22
推荐指数
2
解决办法
1万
查看次数

Swift 3和CGContextDrawImage

我想将此行转换为Swift 3当前语法代码,但似乎存在一些问题:

CGContextDrawImage(context, CGRect(x:0.0,y: 0.0,width: image!.size.width,height: image!.size.height), image!.cgImage)
Run Code Online (Sandbox Code Playgroud)

根据CoreGraphics.apinotes CGContextDrawImage转换为CGContext.draw:

Name: CGContextDrawImage
  # replaced by draw(_ image: CGImage, in rect: CGRect, byTiling: Bool = false)
  SwiftName: CGContext.__draw(self:in:image:)
  SwiftPrivate: true
Run Code Online (Sandbox Code Playgroud)

当我尝试做的时候:

 CGContext.draw(context as! CGImage, in: CGRect(x:0.0, y:0.0, width: image!.size.width, height: image!.size.height), byTiling: false) 
Run Code Online (Sandbox Code Playgroud)

似乎有一些简单的语法干扰编译器,但我看不到(实际上我收到一个典型的模糊错误):

在此输入图像描述

任何人都可以帮助我使用这个新的swift 3语法代码吗?

core-graphics swift3

20
推荐指数
1
解决办法
2万
查看次数

调节SKAction的音量playSoundFileNamed:

有没有办法调节通过SKAction playSoundFileNamed播放的声音音量:waitForCompletion : .

我想在我的游戏中实现一个简单的音乐和声音效果滑块.我可以通过AVAudioPlayer轻松控制背景音乐,但所有音效都通过SKAction播放.

objective-c ios sprite-kit swift

13
推荐指数
2
解决办法
6341
查看次数

使用PHP或JS解码Youtube密码签名的最佳方法

use_cipher_signature = true通过http://www.youtube.com/get_video_info?&video_id=Video_Id返回字典 时,Youtube正在为某些视频使用密码签名

示例id:_JQH3G0cCtY

加密签名实际上是加密签名,任何人都可以通过几组工作签名进行调试.但是Youtube继续改变争夺战的算法.我见过几个Youtube视频下载器,它们运行顺畅而不会受到这种变化游戏的影响.我认为他们正在检查播放器并从播放器文件中提取解码脚本,因此它会让它们继续运行.

我需要一些关于在这种情况下使用的实际技术的帮助.我知道'youtube-dl' - 一个下载视频的python程序.由于我不擅长python,我认为他们使用相同的方法.

此外,还有一个用户脚本JS文件:http: //userscripts.org/scripts/show/25105,它正在做同样的事情.

任何关于解密PHP或JS中的密码的理智方法的帮助将不胜感激.

javascript php youtube ios

9
推荐指数
1
解决办法
2万
查看次数

调整文本大小以适合具有固定宽度的SKLabelNode

新增Spritekit并尝试修复a的宽度,SKLabelNode然后相应地调整文本字体以适合节点.

一直在浏览文档,但似乎找不到合适的东西,比如UILabel功能:

一个 UILabel.adjustsFontSizeToFitWidth = true

谢谢

sprite-kit sklabelnode swift2

9
推荐指数
1
解决办法
1157
查看次数

在SpriteKit中创建Button:Swift

我想在一个SpriteKit或一个SKScene中创建一个按钮,将视图发送到另一个视图控制器.

我尝试使用"performSegue with identifier",但显然SKScene不支持这一点.如何创建一个按钮,将视图发送到另一个视图SpriteKit

这是我尝试用来执行此操作的代码.

带有"HomeButton.prepareForSegueWithIdentifier()"的行只是一个例子.它实际上不会让我添加"prepareForSegue"部分,它不支持它<---我的意思是,当我去添加它时,它是无法识别的.

class GameOverScene: SKScene {

     var HomeButton: SKNode! = nil


    init(size: CGSize, won: Bool) {
        super.init(size: size)

        backgroundColor = SKColor.whiteColor()

        HomeButton = SKSpriteNode(color: SKColor.blueColor(), size: CGSize(width: 100, height: 100))
        HomeButton.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame))
        HomeButton.userInteractionEnabled = true
        self.addChild(HomeButton)

        let message = won ? "You Won!" : "You Lose!"





        let label = SKLabelNode(fontNamed: "Title 1")
        label.text = message
        label.fontSize = 40
        label.fontColor = SKColor.blackColor()
        label.position = CGPoint(x: size.width/2, y: …
Run Code Online (Sandbox Code Playgroud)

ios sprite-kit skscene swift

8
推荐指数
3
解决办法
1万
查看次数

动画地图集和动态物理在Swift 3中

我使用"Hello World"Sprite-kit模板做了一个小测试项目,其中有一个由这些框架组成的地图集动画: 在此输入图像描述

-

我想展示这个骑士和它的动画.

我想设置一个DYNAMIC物理体.

所以我用一个工具来分隔单帧,我做了一个atlasc文件夹,所以代码应该是:

import SpriteKit
class GameScene: SKScene {
    var knight: SKSpriteNode!
    var textures : [SKTexture] = [SKTexture]()
    override func didMove(to view: SKView) {
        self.physicsWorld.gravity = CGVector(dx:0, dy:-2)
        let plist = "knight.plist"
        let genericAtlas = SKTextureAtlas(named:plist)
        let filename : String! = NSURL(fileURLWithPath: plist).deletingPathExtension!.lastPathComponent
        for i in 0 ..< genericAtlas.textureNames.count
        {
            let textureName = (String(format:"%@%02d",filename,i))
            textures.append(genericAtlas.textureNamed(textureName))
        }
        if textures.count>0 {
            knight = SKSpriteNode(texture:textures.first)
            knight.zPosition = 2
            addChild(knight)
            knight.position = CGPoint(x:self.frame.midX,y:self.frame.midY)
        }
        //
        self.setPhysics()
        let animation …
Run Code Online (Sandbox Code Playgroud)

sprite-kit texture-atlas skphysicsbody swift

8
推荐指数
1
解决办法
1189
查看次数

提高Xcode Builds的速度(仅限终端命令)

有关如何减少构建时间的更多提示和技巧.

其中一些太旧了,其他一些只使用模拟器设备,其他例如解释了如何禁用代码覆盖支持但总是通过更改布局设置.

我的目的是启动一些有效的终端命令行或一个好的脚本(最后的选择会好得多),所以不需要更改Xcode布局设置,而无需添加库..,只能通过终端操作.

现在这就是我多年来发现的:

defaults write com.apple.dt.Xcode ShowBuildOperationDuration <YES/NO> 
Run Code Online (Sandbox Code Playgroud)

(这仅适用于调试,不是有效的结果)

defaults write com.apple.dt.XCode IDEIndexDisable <0/1> 
Run Code Online (Sandbox Code Playgroud)

(此命令禁用索引过程)

defaults write com.apple.Xcode PBXNumberOfParallelBuildSubtasks <1|2|4|8|16|..>
Run Code Online (Sandbox Code Playgroud)

(Xcode用于执行任务的线程数默认为CPU具有相同数量的核心 - >默认值= CPU核心)

defaults write com.apple.Xcode XCMaxNumberOfDistributedTasks <desired-number>
Run Code Online (Sandbox Code Playgroud)

(com.apple.Xcode域中的用户默认XCMaxNumberOfDistributedTasks控制Xcode将立即向DNB系统发送多少并发编译作业;默认情况下为25)

你知道其他类型的有用的有效命令行添加或一个好的脚本启动(例如任何检查CPU核心和正确设置PBXNumberOfParallelBuildSubtasks值的代码)?

我找到了更多的参数设置,你可以在下面轻松找到:

defaults read com.apple.dt.XCode > xcodeprefs.json
Run Code Online (Sandbox Code Playgroud)

macos xcode ios swift

7
推荐指数
0
解决办法
1974
查看次数

什么是正确的方法,使用"init"或"didmove"?

语言:Swift 3.0 --- IDE:Xcode 8.0 beta 2 ---项目:iOS游戏(SpriteKit)

我为iOS创建了一款游戏,我知道Apple对接受应用/游戏的规则非常严格.所以我想知道哪种是正确的游戏设置方式.

我从谷歌学到了创建一个新的SpriteKit项目并执行以下设置:

GameViewController.swift中清除viewDidLoad()并添加所有这些:

override func viewDidLoad() {
    super.viewDidLoad()
    let skView = self.view as! SKView

    let scene = GameScene(size: skView.bounds.size)
    scene.scaleMode = .aspectFit

    skView.presentScene(scene)
}
Run Code Online (Sandbox Code Playgroud)

GameScene.swift中删除所有内容并保留此代码:

import SpriteKit

class GameScene: SKScene {
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override init(size: CGSize) {
        super.init(size: size)
        // add all the code of the game here...
    }

}
Run Code Online (Sandbox Code Playgroud)

并在override init中开发我的游戏

但我认为用init启动游戏实际上是错误的.而正确的方法是使用didMove()方法.那么代码应该写在这里吗?:

override func didMove(to view: SKView) {
    <#code#>
}
Run Code Online (Sandbox Code Playgroud)

有谁知道哪一个是正确的方法?为什么?如果我的方式错了,你能解释一下如何使用didMove方法吗? …

objective-c ios sprite-kit swift swift3

7
推荐指数
1
解决办法
1785
查看次数