我正在使用Actionscript3,构建一个类似MMO的游戏,我负责UI等等。我在很多工作流程中都使用了Events,但我的合作伙伴建议我使用直接函数调用我的UI资源。这是一个例子:
我的搭档建议我改为:
现在,我的大多数UI都使用了事件,因此我可以保留下拉菜单,按钮,textareas等资源,并且可以重复使用。我想我们会将这个ColorChooser对象重用于其他东西(ObjectDesigner,WallpaperDesigner,BuildingDesigner)。他说,每次将ColorChooser用于其他东西时,最好在ColorChooser中添加一个条件,所以也许就像:
private function colorClicked(e:MouseEvent):void {
var chosenColor:uint = *the color chosen (bitmapdata.getpixel());*
switch(parent){
case AvatarDesigner: (parent as AvatarDesigner).colorChosen(chosenColor);
break;
case ObjectDesigner: (parent as ObjectDesigner).colorChosen(chosenColor);
break;
case WallpaperDesigner: (parent as WallpaperDesigner).colorChosen(chosenColor);
break;
case BuildingDesigner: (parent as BuildingDesigner).colorChosen(chosenColor);
break;
}
}
或类似的东西(也许不是检查父,在构造函数或其他东西中检查字符串“type”)。这对我来说很奇怪,因为每次在其他地方使用它时我都必须重新加入一个案例。而对于事件,它可以触发它的事件,并处理或不处理它,无论它的父级是什么。他的一些推理是:
我觉得事件是合适的,例如:
任何人都可以对此有所了解吗?每次我在不同类型的父母身上使用这个资产时,在新的逻辑条件下,比如说“ShinyButton”,是否值得进行硬编码?即使事件和监听器正在使用CPU,也不会添加这样的条件使它有点意大利面?是什么?
另外,对于我的生活,我找不到一个Actionscript3最佳实践,以便在事件好或坏时,为什么。另外,如果有人知道如何在低级别使用事件,我会很高兴。
感谢阅读!
答案 0 :(得分:3)
我认为你的不同观点是基于习惯而不是真正的原因。
我会个人使用个人事件模型,这是我想到的最开放,最灵活的解决方案。
但是如果您想使用回调函数而无需返回ColorChooser
,则可以使用IColorReceiver
之类的必需方法创建类似applyColor(color:Color){};
的接口(Speaking)编程最佳实践,您应该知道方法名称更清晰,使用“applyColor”或“chooseColor”等动词而不是形容词或“colorChosen”之类的名称,这并不意味着很多)
然后在您的colorPicked(e:MouseEvent){}
方法中,确保parent
实施IColorReceiver
,并且在没有其他测试的情况下调用applyColor(chosenColor);
而不是具有IColorReceiver
的测试。它也可以与经典继承一起使用,但需要更多代码以降低灵活性。
我不提供代码,但你似乎有一个合理的水平,所以我很自信。 ;)
(希望我的英语是正确的)
答案 1 :(得分:1)
简短的回答,我认为你是对的,而你的朋友是错的。任何感知到的性能提升(如果有的话)都可以忽略不计,正如您预期的那样,引入的tight-coupling会使您在其他情况下重用组件变得困难,并使您的项目整体难以维护。
ActionScript是一种基于事件的异步语言,如果你鼓励他接受它而不是与它斗争,你就会帮助你的朋友!
要回答有关ActionScript 3.0开发最佳实践的问题,我认为您可能会比查看Flex框架的某些组件的结构更糟糕。这些是由Adobe工程师开发的,因此可以被视为最佳实践的演示。您将发现大量使用事件以避免不同组件或组件参与者之间的紧密耦合,以及最少使用您朋友建议的smelly代码。