Tôi đang tạo trò chơi trong Xcode 8 bằng SpriteKit và đã có một khoảng thời gian rất khó lập trình kích hoạt phân đoạn. Tôi đã đi vào "Main.storyboard" và thực hiện một segue giữa "GameViewController" của tôi và "MenuViewController" cho nó định danh "toMenu".Không thể lập trình kích hoạt segue trong SpriteKit, bằng cách sử dụng Xcode 8 và Swift 3
Không Cố gắng # 1
Trong tập tin GameScene.swift của tôi, tôi đã thêm đoạn mã sau vào chức năng cập nhật.
override func update(_ currentTime: TimeInterval) {
// Called before each frame is rendered
if gameIsRunning == false{
score = 0
performSegue(withIdentifier: "toMenu", sender: self)
}
}
Mục tiêu của tôi là để segue kích hoạt bất cứ khi nào gameIsRunning sai. Tuy nhiên, tôi nhận được lỗi sau:
Use of unresolved identifier 'performSegue'
Điều này là lạ bởi vì performSegue là khai báo theo API Reference.
Không Cố gắng # 2
tôi đã cố gắng this solution bằng cách đặt đoạn mã sau vào "GameScene.swift"
override func update(_ currentTime: TimeInterval) {
// Called before each frame is rendered
if gameIsRunning == false{
score = 0
GameScene(MenuViewController, animated: true, completion: nil)
}
và tôi đã nhận lỗi này:
Type of expression is ambiguous without more context
Không Cố gắng # 3
Tôi thấy this solution rất khó hiểu nhưng tôi theo dõi mọi thứ. Tôi đã thực hiện bước 1, như đã nêu trong bước 2, tôi đặt mã sau vào cuối "GameViewController.swift"
func goToDifferentView() {
self.performSegue(withIdentifier: "toMenu", sender: self)
}
và không gặp lỗi! Sau đó, tôi thêm mã này để "GameViewController.swift" theo hướng dẫn ở bước 3 của giải pháp
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(goToDifferentView), name: NSNotification.Name(rawValue: "toMenu"), object: nil)
Sau đó, tôi đã bước 4 của giải pháp vì vậy tôi đặt đoạn mã sau vào "MenuViewController.swift"
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.post(NSNotification(name: NSNotification.Name(rawValue: "toMenu"), object: nil) as Notification)
Tôi sau đó đặt đoạn mã sau vào tệp "GameScene.swift" của tôi để thực sự gọi hàm.
override func update(_ currentTime: TimeInterval) {
// Called before each frame is rendered
if gameIsRunning == false{
score = 0
GameViewController().goToDifferentView()
}
Sau đó, tôi chạy trò chơi trên iPhone của mình và mọi thứ diễn ra tốt đẹp cho đến khi tôi tham gia trò chơi mà gameIsRunning chuyển thành false. Thay vì segue làm việc của nó, tôi đã nhận lỗi sau:
Thread 1: Signal SIGABRT
Tôi đã nhận lỗi này nhiều lần và nó luôn luôn là một cái gì đó mà tôi có nối không đúng cách trong "Main.storyboard". Tuy nhiên, đây là một trò chơi cực kỳ đơn giản và mọi thứ đều bình thường. Tôi cũng không nhận được lỗi này cho đến khi thêm mã mà tôi vừa mới trình bày cho bạn. Tôi đã xác nhận nhiều lần rằng segue có định danh "toMenu". Tôi hoàn toàn không biết tại sao segue không hoạt động và tại sao Attemp # 3 của tôi lại gây ra lỗi SIGABRT.
Loại segue nào? – GlennRay
@GlennRay Loại này là 'Hiển thị (ví dụ: Đẩy)' và đó là 'Phân đoạn bảng phân cảnh'. Tôi không chắc chắn làm thế nào để có được bất kỳ chi tiết bổ sung về nó. – chas
Câu hỏi đầu tiên tuyệt vời. Mẹo: nếu bạn muốn sử dụng chữ in đậm, hãy sử dụng dấu sao đôi ở bên cạnh một đoạn văn bản, việc nhập lại dễ dàng hơn và dễ dàng chỉnh sửa hơn HTML. Nếu bạn muốn định dạng một đoạn mã nội tuyến trong một đoạn văn, 'sử dụng một dấu gạch chéo ngược 'hai bên. – halfer