我一直在尝试使用 Objective-C 来实现一个简单的基于组件的游戏对象架构,这与Mick West的文章“Evolve Your Hierarchy”很相似。为此,我成功地使用了 Mike Ash 的文章'Objective-C Message Forwarding'中概述的一些想法,即使用该-(id)forwardingTargetForSelector:
方法。
基本设置是我有一个容器 GameObject 类,它包含组件类的三个实例作为实例变量:GCPositioning、GCRigidBody 和 GCRendering。该-(id)forwardingTargetForSelector:
方法返回使用该方法确定的将响应相关选择器的任何组件-(BOOL)respondsToSelector:
。
所有这一切,在某种程度上,就像一个魅力:我可以在 GameObject 实例上调用一个方法,该方法的实现在其中一个组件中找到,并且它可以工作。当然,问题在于编译器在每次调用时都会给出“可能无法响应……”警告。现在,我的问题是,我该如何避免这种情况?具体来说,关键是每个 GameObject 实例都会有一组不同的组件?也许是一种在每个对象的基础上向容器对象注册方法的方法?例如,我可以创建某种-(void)registerMethodWithGameObject:
方法,我该怎么做?
现在,很明显我对 Cocoa 和 Objective-C 还很陌生,而且基本上只是在闲逛,这整个事情在这里可能非常陌生。当然,虽然我非常想知道我的具体问题的解决方案,但任何愿意解释更优雅的方法的人也将受到欢迎。
非常感谢,-巴斯蒂安