语言: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中实现类似CCBlink的操作?我希望2闪烁10次.
id blink = [CCBlink actionWithDuration:2.0f blinks:10];
id calBck = [CCCallBlock actionWithBlock:^{
[enemy expired];
}];
[HeroSprite runAction:[CCSequence actions:blink, calBck, nil]];
Run Code Online (Sandbox Code Playgroud) 我试图SKSpriteNode从PNG图像设置a的大小(好吧,只需:
test = SKSpriteNode(imageNamed: "myImage")
Run Code Online (Sandbox Code Playgroud)
但是当谈到调整大小时,我不确定我是否应该使用test.setScale或test.size.有什么区别,什么时候应该使用它们?
我在一个SKSpriteNode(名称:square)和一个SKLabel(name:label)中创建了一个场景Case.sks(使用Level Editor).在我的主场景GameScene.sks中,我使用带有"Case"的SKReferenceNode作为参考.
我需要从我的主场景中访问"方形"精灵.
我的第一个想法是直接调用子节点:
let firstSquare = childNode(withName: "square") as! SKSpriteNode
Run Code Online (Sandbox Code Playgroud)
但我得到了:
Fatal error: unexpectedly found nil while unwrapping an Optional value
Run Code Online (Sandbox Code Playgroud)
所以我尝试过:
let caseRef = childNode(withName: "Case") as! SKReferenceNode
let firstSquare = caseRef.childNode(withName: "square") as! SKSpriteNode
Run Code Online (Sandbox Code Playgroud)
但我得到了第一个广场线:
Fatal error: unexpectedly found nil while unwrapping an Optional value
Run Code Online (Sandbox Code Playgroud)
如何获取参考场景的子节点?
这是我的问题:
我使用SpriteKit,我想在某个矩形中发生忽略触摸事件(阻止调用touchesBegan).我想如何做到这一点的方式是一样的东西"重写hitTestWithEvent的UIView".但我找不到任何类似的方法SKSpriteNode可以忽略事件并阻止调用touchesBegan.
当然
isUserInteractionEnabled为false但它会禁用整个精灵而不仅仅是一部分.touchesBegan方法中的触摸位置,但这是迟到的 - 在同一位置下面的其他精灵将不再接收此事件.SKCropNode,但它只是阻止显示精灵,甚至在不可见区域处理事件.有没有人知道如何防止部分精灵处理事件?
我正在使用SKTAudioRay Wenderlich在他的Github上提供的库.这是我为播放声音效果而修改的代码,我每次播放时都会调用它:
public func playSoundEffect(_ filename: String) {
let url = Bundle.main.url(forResource: filename, withExtension: nil)
if (url == nil) {
print("Could not find file: \(filename)")
return
}
if !UserDefaults.standard.bool(forKey: "soundOff"){
var error: NSError? = nil
do {
soundEffectPlayer = try AVAudioPlayer(contentsOf: url!)
} catch let error1 as NSError {
error = error1
soundEffectPlayer = nil
}
if let player = soundEffectPlayer {
DispatchQueue.global(qos: .background).async {
player.numberOfLoops = 0
player.prepareToPlay()
player.play()
}
} else {
print("Could not create audio …Run Code Online (Sandbox Code Playgroud) 我是一个天真的IOS开发人员使用swift语言.
我有一个表格视图,显示酒店的功能列表.现在我想在tableView上添加一个标题信息与酒店图片,酒店名称在tableview上方,以便标题信息也与tableview内容一起滚动(产品功能列表) )
这是问题,TableView与功能列表工作正常.
class HotelDetailViewController: UIViewController,UITableViewDataSource,UITableViewDelegate {
@IBOutlet weak var categoriesTableView: UITableView!
var items: [(String, String,String)] = [
("Service", " Courteous service, Good staff , Good staff"," Bad Facility"),
("Vibe", " Courteous service, Good staff"," Bad Facility"),
("Hotel", " Courteous service, Good staff"," Bad Facility"),
("Room Facility", " Courteous service, Good staff"," Bad Facility"),
("Amenities", " Courteous service, Good staff"," Bad Facility"),
("Food", " Courteous service, Good staff"," Bad Facility")
]
override func viewDidLoad() {
super.viewDidLoad()
let nib = …Run Code Online (Sandbox Code Playgroud) 我想UIImage在 Swift 中合并两个:
和
我试过了
func maskImage(image: UIImage, withMask maskImage: UIImage) -> UIImage {
let maskRef = maskImage.CGImage
let mask = CGImageMaskCreate(
CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef),
nil,
false)
let masked = CGImageCreateWithMask(image.CGImage, mask)
let maskedImage = UIImage(CGImage: masked!)
// No need to release. Core Foundation objects are automatically memory managed.
return maskedImage
}
Run Code Online (Sandbox Code Playgroud)
和电话
let imageName = data.valueForKey("imagename")!.description
let image = UIImage(named: imageName)
let imageBackground : UIImage = UIImage(named:"background")!
let maskedImage: UIImage = self.maskImage(image!, withMask: imageBackground) …Run Code Online (Sandbox Code Playgroud) 我们知道SKScene的原点在左下角。
但是我尝试从一个包含 0 和 1 矩阵的文件中进行简单的级别加载。虽然 0 什么都不是,但 1 表示一堵墙(简单的矩形)。
由于文件的内容显然是从左上角到右下角,我想从场景的左上角绘制。
但是我的第一个角色是在场景的左下角绘制的。我尝试将场景的yScale设置为 -1,希望它反转 y 轴,但这不起作用。
什么是最干净的方式,所以SKScene我总是从左上角开始绘制?我仍然想保持我anchorPoint的 0.5、0.5。
所以从左上角绘制将位于x=-widthOfScreen/2和y=heightOfScreen/2
我有一个问题,我在标签栏控制器上有2个视图控制器.这两个控制器都显示标签.但是当我从View控制器1到View控制器3进行推送时,视图控制器3没有显示标签栏.
我编写了以下代码来下载并在tableView的单元格中显示图像.然而,投影根本没有出现,我无法弄清楚出了什么问题.
cell.societyImage.setIndicatorStyle(UIActivityIndicatorViewStyle.White)
cell.societyImage.setShowActivityIndicatorView(true)
cell.societyImage.sd_setImageWithURL(NSURL(string: pictureURLs[objectIds[indexPath.row]]!),completed: { (image, error, cache, url) in
cell.societyImage.layer.shadowColor = UIColor(white: 0.7, alpha: 0.7).CGColor
cell.societyImage.layer.shadowOffset = CGSizeMake(3, 3)
cell.societyImage.layer.shadowOpacity = 0.4
cell.societyImage.layer.masksToBounds = true
})
Run Code Online (Sandbox Code Playgroud)
任何帮助深表感谢!
swift ×10
ios ×9
sprite-kit ×7
objective-c ×3
skspritenode ×3
hittest ×1
ios8 ×1
iphone ×1
merge ×1
shadow ×1
skscene ×1
swift3 ×1
uiimage ×1
uiimageview ×1
uiscrollview ×1
uitableview ×1
xcode ×1
xcode8-beta2 ×1