Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sprite kit 在SpriteKit游戏中创建AppKit元素_Sprite Kit_Appkit - Fatal编程技术网

Sprite kit 在SpriteKit游戏中创建AppKit元素

Sprite kit 在SpriteKit游戏中创建AppKit元素,sprite-kit,appkit,Sprite Kit,Appkit,问题的标题确实说明了一切。我正在尝试将AppKit元素(如按钮和其他控件)绑定到OSX SpriteKit游戏中。我的理解是AppKit元素可以放在场景的顶部,但是这是如何工作的呢?这会通过NSView处理吗?该层是如何在SpriteKit中创建的,还是这是一个单独的过程?所有AppKit UI元素都是NSResponder的子类,大多数是NSView的子类 这意味着,与任何其他Cocoa应用程序一样,您拥有非常相同的响应链 SpriteKit基于SKNode添加了NSResponder子类,它

问题的标题确实说明了一切。我正在尝试将AppKit元素(如按钮和其他控件)绑定到OSX SpriteKit游戏中。我的理解是AppKit元素可以放在场景的顶部,但是这是如何工作的呢?这会通过NSView处理吗?该层是如何在SpriteKit中创建的,还是这是一个单独的过程?

所有AppKit UI元素都是NSResponder的子类,大多数是NSView的子类

这意味着,与任何其他Cocoa应用程序一样,您拥有非常相同的响应链

SpriteKit基于SKNode添加了NSResponder子类,它们都位于SKView中

在同一个窗口中,所有内容都将在响应器链中具有相同的窗口。 即使控件和视图位于单独的窗口或菜单栏中的菜单中,所有内容都共享响应器链。在某种程度上,这是不适用的

您真正想要做的是确定最佳用户体验。但是,NSResponder的任何子类都可以向上转发消息。 只要该消息在链中得到处理,它就会工作


这允许您在应用程序委托、窗口控制器甚至视图控制器中设置iAction方法,并将这些方法选择器指定为控件的操作。响应者链和所谓的无目标消息传递是Cocoa中最基本和最强大的设计模式,由Objective-C的特性实现。花些时间在响应者链上的Apple文档上。然后考虑只带有按钮或滑块的简单应用程序。将相同的应用于您的游戏

对不起,说到这件事,我是个笨蛋。我在较高的层次上理解这个概念,但不是在代码层次上。例如,我不能简单地创建一个NSButton,然后将其作为子对象添加到我的场景中,对吗?一个代码示例将非常有用。不。只有SKNodes可以是SKNodes的子级。Skscene是一个SKNode。SKView是一个特殊的NSView子类,它对SKNOTES略知一二。你总是可以把一个视图放在视图中。是的,我就是这么想的。以编程方式,如何将视图放在NSView中?在SKView内部?与以编程方式向任何视图添加视图相同。addSubview:然后设置任何约束。好的,我将NSView子类化,我读到你应该这样做,这就是我得到的,但没有显示任何内容-voiddidMoveToView:SKView*视图{TestView*TestView=[[TestView alloc]initWithFrame:CgRectMake100100200200];[view addSubview:TestView];[TestView drawRect:nsrectFromCgRectMake2120,120,20,10];NSButton*按钮=[[NSButton alloc]initWithFrame:CGRectMake20,20,40,20];[button setTitle:@PRESS ME];[testView addSubview:按钮];}