2017-01-13 27 views
4

我目前遇到问题。我正在创建一个游戏,我希望能够使用UITableView来显示数据(如关卡)。但是,我严格使用SpriteKit,并且似乎无法让UITableView和SpritKit工作。在Spritekit中使用UITableView

我试图创建在我的“GameScene”类称为“gameTableView”,并将其值设定为一个类的变量(其是SKScene)我做所谓的“GameRoomTableView”。

var gameTableView = GameRoomTableView() 

该类的值为'UITableView'(请注意,我没有将其设置为UITableViewController)。

class GameRoomTableView: UITableView { 
} 

我能够添加tableView作为我的SKView的子视图。我在我的GameScene类中的'DidMoveToView'函数中做了这个。其中有观点表明。

self.scene?.view?.addSubview(gameRoomTableView) 

不过,我不知道如何改变事物的部段的数量,以及如何添加cells.The类不会让我访问这些类型的东西,除非它是一个的viewController,并与我会需要一个实际的ViewController来使它工作。我见过很多游戏使用tableViews,但我不确定他们是如何运作的,哈哈。

请不要犹豫,告诉我我做错了什么,如果你知道更好的方法去做这件事。如果您有任何问题,请告诉我。

+0

我从来没有尝试加入'的UITableView '到'SpriteKitScene',但你确定你不能让类符合'UITableViewDelegate'和'UITableViewDataSource'吗?我并不是说这样做会起作用,但我写了一些示例代码,我只是这样做的,并没有显示任何错误 – Pierce

+0

只需在与SpriteKitScene相同的空间上覆盖一个UITableView,然后将.alpha更改为显示/把它藏起来? –

+0

SpriteKit的一个悲剧部分是它的UI前提/承诺与现实。使用SpriteKit游戏顶层的AutoLayout和UIViews应该允许轻松创建级别选择器。没有人似乎曾经这样做过,并且没有示例代码或其他演示可用,这提示了一些事情。 1.很少有人使用SpriteKit。来自“权威词典”那些做的,没有完成。因为a)苹果公司不会轻易展示如何做到这一点,b)它具有垃圾性能和/或c)完成它就像在不同的重力环境中通过陀螺旋转的火焰箍跳跃 – Confused

回答

10

通常我不喜欢子类UITableView为你做什么,我更喜欢直接使用UITableView委托和数据源到我的SKScene类既表规格和数据控制到我的游戏代码。

,不过也许你有你的个人计划,所以我做出了榜样给您按照您的要求:

import SpriteKit 
import UIKit 
class GameRoomTableView: UITableView,UITableViewDelegate,UITableViewDataSource { 
    var items: [String] = ["Player1", "Player2", "Player3"] 
    override init(frame: CGRect, style: UITableViewStyle) { 
     super.init(frame: frame, style: style) 
     self.delegate = self 
     self.dataSource = self 
    } 
    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
    // MARK: - Table view data source 
    func numberOfSections(in tableView: UITableView) -> Int { 
     return 1 
    } 
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return items.count 
    } 
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell:UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell")! as UITableViewCell 
     cell.textLabel?.text = self.items[indexPath.row] 
     return cell 
    } 
    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
     return "Section \(section)" 
    } 
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     print("You selected cell #\(indexPath.row)!") 
    } 
} 
class GameScene: SKScene { 
    var gameTableView = GameRoomTableView() 
    private var label : SKLabelNode? 
    override func didMove(to view: SKView) { 
     self.label = self.childNode(withName: "//helloLabel") as? SKLabelNode 
     if let label = self.label { 
      label.alpha = 0.0 
      label.run(SKAction.fadeIn(withDuration: 2.0)) 
     } 
     // Table setup 
     gameTableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell") 
     gameTableView.frame=CGRect(x:20,y:50,width:280,height:200) 
     self.scene?.view?.addSubview(gameTableView) 
     gameTableView.reloadData() 
    } 
} 

输出

enter image description here

+0

这工作完美无缺,正是我所期待的! – Nickolans