2014-11-05 15 views
12

Tôi đã chơi xung quanh với SpriteKit và tôi đang có cảm giác khá tốt về cách lái nó từ mã, nhưng tôi khá bối rối bởi trình chỉnh sửa cấp bao gồm trong Xcode 6.Mối quan hệ giữa các tệp GameScene.swift và GameScene.sks trong mẫu SpriteKit

Tôi đã xem các video wwdc ("nền tảng công đoàn" và "tính năng mới trong spriteKit") và được tìm kiếm trên web nhưng không thể tìm thấy nhiều mô tả về trình chỉnh sửa cấp và những gì nó thực sự đang thực hiện.

Điều tôi không hiểu, là hai tệp mà mẫu thiết lập có liên quan như thế nào? Tệp .sks có phải là biểu thức của tệp GameScene.swift hoặc có thể là lớp GameScene chứa trong đó không?

HOẶC cả hai đều chỉ giữ các đối tượng/nút riêng lẻ sẽ phát cùng nhau trong cùng một cảnh?

Hoặc (đây là giải thích tốt nhất của tôi) là tệp .sks và trình chỉnh sửa cơ bản để tạo môi trường mà các ký tự đáp ứng sẽ "sống" trong? Nếu đó là sự thật, làm thế nào có thể mã của tôi trong tập tin .swift liên quan đến những gì trong tập tin .sks?

Trả lời

23

Tệp .sks là bản lưu trữ tĩnh của nội dung cảnh của bạn. Nếu bạn đã sử dụng Trình tạo giao diện để thiết lập các ứng dụng giao diện người dùng trước đây, thì đó cũng là ý tưởng tương tự, nếu thực sự khác nhau trong triển khai.

Trong một ứng dụng giao diện người dùng, bạn có thể làm tất cả mọi thứ trong mã:

override func viewDidLoad() { 
    let someText = UITextField(...) 
    let aButton = UIButton(...) 
    // ... position everything 
    // ... style everything 
    // ... etc ... 
} 

Hoặc bạn có thể làm tất cả những thiết lập nội dung tĩnh trong IB (một xib hoặc storyboard), và sử dụng mã chỉ để thiết lập năng động hành vi ứng dụng của bạn - những điều xảy ra khi ai đó bắt đầu chạm vào các nút đó. Khi bạn làm điều đó, bộ điều khiển xem bạn viết mã để tồn tại như một đối tượng proxy trong xib/storyboard, tạo một cầu nối giữa những gì bạn thiết lập trong IB và những gì bạn thiết lập trong mã.

Trong SpriteKit, bạn có cùng lựa chọn. Trước khi Xcode 6, nhiều trò chơi SK mất cách tiếp cận tất cả các mã:

override func didMoveToView(view: SKView) { 
    let player = PlumberSprite(color: .Red) 
    player.position = // ... 
    player.physicsBody = // ... 
    self.addChild(player) 
    let ground = SKSpriteNode(...) 
    ground.position = // ... 
    ground.physicsBody = // ... 
    self.addChild(ground) 
    let block = QuestionBlockSprite() 
    block.position = // ... 
    block.physicsBody = // ... 
    block.contents = CoinSprite() 
    self.addChild(block) 
    // ... etc etc etc ... 
} 

Đó là rất nhiều mã cho những gì là cuối cùng một đồ họa, cảnh tĩnh - thậm chí trước khi bạn bắt đầu thêm code để làm cho nó thành một trò chơi (xử lý đầu vào , hành vi của đối phương, gọi lại vật lý làm tăng điểm số hoặc chuyển sang trò chơi, v.v.). Và nó không cho vay tốt với thiết kế, nơi bạn tách logic trò chơi chung ra khỏi nội dung, vì vậy khó thêm nhiều cấp độ vào trò chơi của bạn.

Thay vào đó, bạn có thể sử dụng trình chỉnh sửa SpriteKit trong Xcode để tạo nội dung tĩnh (các cấp) và gắn vào mã cho hành vi động và logic trò chơi. Cũng giống như cách thức, trong IB, bộ điều khiển xem là một cầu nối giữa bảng phân cảnh và mã của bạn, lớp cảnh của bạn (GameScene.swift trong mẫu) là cầu nối giữa trình chỉnh sửa và mã. Khi bạn tải tệp .sks vào thời gian chạy (mã cho số này là GameViewController.swift trong mẫu), nó sẽ trở thành phiên bản của lớp GameScene và mọi thứ bạn thiết lập trong trình chỉnh sửa đều có thể truy cập dưới dạng nút con của cảnh.

Kiểm tra cuộc đàm phán WWDC là một ý tưởng hay, nhưng bạn đã bỏ lỡ cuộc hội thoại này: xem session 608: Best Practices for Building SpriteKit Games để biết thêm về động lực đằng sau trình chỉnh sửa SpriteKit, cách sử dụng và cách làm việc với nội dung cảnh được tải từ .sks tệp trong mã cảnh của bạn.

+0

Tuyệt vời! 20 phút đầu tiên của video đó chính xác là những gì tôi cần! –

+0

Tôi tìm thấy tệp .sks một chút hạn chế.Nó đôi khi dường như mất các đối tượng tôi thêm vào, và các lần khác nó hoàn nguyên các thay đổi mà tôi tạo ra (các chế độ Mô phỏng và Chỉnh sửa). Nếu không có chế độ xem lớp, tôi không biết tệp .sks này hữu ích như thế nào, cho đến khi Apple thêm nhiều tính năng hơn. Bạn phải đẩy các nút về phía trước và phía sau để làm việc với một hệ thống phân cấp phức tạp. –

Các vấn đề liên quan