我试图获取一个包含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的屏幕抓取?
我正在使用名为Sprite Kit的新API开发iOS7游戏.我想水平旋转SKSpriteNode图像/纹理.我已经尝试过首先镜像图像,然后创建一个SKTexture,最后将它应用到SKSpriteNode,但它不起作用.有办法做到这一点吗?或者我应该有不同的图像?
我想将此行转换为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语法代码吗?
有没有办法调节通过SKAction playSoundFileNamed播放的声音音量:waitForCompletion : .
我想在我的游戏中实现一个简单的音乐和声音效果滑块.我可以通过AVAudioPlayer轻松控制背景音乐,但所有音效都通过SKAction播放.
当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中的密码的理智方法的帮助将不胜感激.
新增Spritekit并尝试修复a的宽度,SKLabelNode然后相应地调整文本字体以适合节点.
一直在浏览文档,但似乎找不到合适的东西,比如UILabel功能:
一个 UILabel.adjustsFontSizeToFitWidth = true
谢谢
我想在一个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) 我使用"Hello World"Sprite-kit模板做了一个小测试项目,其中有一个由这些框架组成的地图集动画:

-
所以我用一个工具来分隔单帧,我做了一个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) 有关如何减少构建时间的更多提示和技巧.
其中一些太旧了,其他一些只使用模拟器设备,其他例如解释了如何禁用代码覆盖支持但总是通过更改布局设置.
我的目的是启动一些有效的终端命令行或一个好的脚本(最后的选择会好得多),所以不需要更改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) 语言: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方法吗? …
sprite-kit ×7
swift ×7
ios ×6
objective-c ×4
swift3 ×2
image ×1
ios7 ×1
javascript ×1
macos ×1
php ×1
sklabelnode ×1
skscene ×1
swift2 ×1
xcode ×1
youtube ×1