0

好的,所以这可能是我悬而未决,但我需要知道做某事的最佳方法:(这是伪代码,不是实际代码。实际代码很大)

我的包中基本上有一个像这样的类:

internal class charsys extends DisplayObject {
  Bunch of Variables
  a few functions
}

我打算添加到时间轴的另一个类,我想创建一个这样的函数:

public class charlist {
  var list:Array = new Array();
  var clock:Timer = new Timer(6000);
  var temp:charsys;

  function addObj(MC:DisplayObject, otherprops:int) {
     temp=MC;
     temp.props = otherprops;
     list.push(temp)
  }

  function moveabout(e: event) {
     stuff to move the items in list
  }

  function charlist() {
     stuff to initialize the timers and handle them.
  }
}

所以问题是,我填充这个数组的方法是一种有效的方法吗?有没有更简单的方法,它们可以像这样继承吗?我什至需要像我一样传递对象吗?

(还在写包,不知道能不能用)

4

2 回答 2

0

这会起作用,我想我会在将 charsys 对象的属性传递给 add 方法之前为其分配值,而不是传递属性并让不同的类进行属性分配。如果您有一些公共属性,它们可以在 charsys 类定义中具有默认值,或者您可以在 addObj 方法中设置文字。

于 2013-04-09T08:37:49.323 回答
0

是的,你可以将一个对象传递给一个函数,但是你应该小心你计划在那个函数中对那个对象做什么。比如说,如果你打算只传递charsys对象,你可以这样编写函数头:

function addObj(MC:charsys, otherprops:int) {

注意,类型是直接放入函数头的。这样Flash编译器就可以做很多事情了。

首先,它将查询函数体是否引用了传递实例的有效属性。说,你的charsys对象没有props属性,但是有prop属性,这个打字错误会立即被捕获并报告。此外props,例如,如果它是一个 int,并且您尝试为其分配一个 String 值,您将再次收到通知。

其次,无论您在何处使用该函数,Flash 编译器都会静态检查是否将正确类型的实例charsys传递给该函数,因此如果没有正确类型的实例charsys或其子类,则会引发编译错误。

第三,这可以帮助您学习如何为函数提供正确的类型,而不是依赖于动态类,例如MovieClip,几乎可以将任何名称的属性分配给任何东西,并且在编译时不检查该属性的存在,可能会引入s 无处出现的令人讨厌的错误NaN,或者某些元素未显示等。

关于此类方法的常见用法 - 它们确实可以用于创建/管理一个类的一组相似对象,以根据它们的相应值更改它们的每个可能属性。虽然偶尔需要属性的默认值,但这些函数可用于根据额外信息轻微(或不那么轻微)改变它们。例如,我有一个函数可以生成一个准备好放置的TextField对象,完成格式化和更改的默认设置(multiline=true等),然后按照我的需要对齐和放置。您不能更改TextField类中的默认值,因此您可以使用这样的函数来根据您的需要定制一个新的文本字段对象。

希望这可以帮助。

于 2013-04-09T11:10:35.830 回答