作者dreamboxer (陌生人)
看板Flash
标题Re: [问题] 看到一个非常好用的as..但是不知道怎麽 …
时间Tue Jul 8 01:24:56 2008
※ 引述《a149851571 (yem)》之铭言:
: http://www.tink.ws/blog/as-30-hittest
: 这是一个老外写的hittest..它可以判断不规则形状的物件
: 我在fla档里面是这样写的
: import ws.tink.display.*;
: var hitst:HitTest = new HitTest();
: if(hitst.complexHitTestObject(this.circle_1,this.circle_2,1))
: trace("hit!!");
: 会一直出现错误:
: 1061: Call to a possibly undefined method complexHitTestObject through a
: reference with static type ws.tink.display:HitTest.
: 请问我还有哪里需要改的吗?
因为原Po问了 有static 和 没static 的差别...
只好拿出不大好吃的物件导向程式语言解释一下...orz
有加 static 修饰字的 function 表示这个 function 是一个 class function
而没有加 static 修饰字的 function 表示这是一个 object function
class function 和 object function 有啥不一样呢...
就是一个不用 new 就可以用(static, class function),
一个要 new 才可以用(object function)。(好像废话...orz)
事实上,这两个在执行的时候记忆体的使用也是不一样的...
想像一下,我们有一只AS3程式叫做血腥 "动物园.as"
所以我的 "动物园" 这个 class 里面我写了两个 function
一个是
老虎(人) {} ← 一个需要传入<人>的 object function, 没有 static 修饰
另一个是
static 收票员(钱) {} ← 一个传入<钱>的 class function
所以当我在别的程式用到 动物园 里面的 function 的时候,
我们可以 tiger_1 = new 老虎(人); ,但我们只会有一个收票员,
因为他被宣告成static。
当你的swf被 Flash Player 载入(但还没开始执行)的时候,
他们在记忆体区块会被分配成这样(概念上):
┌────────────┬──────┐
│ ※老虎(人) {....} │ 位址:001 │
├────────────┼──────┤
│ ◎收票员(钱) {....} │ 位址:002 │
└────────────┴──────┘
※号表示载入时属於object function的程式,◎表示载入时属於class function的程式
然後,Flash Player 开始执行你的程式:new 了 tiger_1 这只老虎
┌────────────┬──────┐
│ ※老虎(人) {....} │ 位址:001 ├─┐
├────────────┼──────┤ │
│ ◎收票员(钱) {....} │ 位址:002 │ │复制(new)一只老虎
├────────────┼──────┤ │
│ 老虎(人) {....} │ 位址:003 │←┘←┐
├────────────┼──────┤ │这只老虎的别名(reference)
│ tiger_1 = 003 │ 位址:004 │───┘叫作 tiger_1 指到刚刚复制
└────────────┴──────┘ 出来的位置...
但是因为 收票员 被宣告为 class function (有加 static),
所以他在记忆体中没办法被复制(所以才用static这英文单字),
永远只有一份,你可以直接使用他。
而 老虎 因为被宣告为 object function (没有static),
所以他要被复制(new)後"才"能使用,你可以复制出很多只老虎(同时也会花掉更多记忆体)
除了记忆体使用不一样外,在程式中这两种东西(有static和没static)设计的目标用途
也有些不大一样的。(要讲这用途还要再花些时间...orz)
这样不知道有没有了解...好像有点讲太多。XD
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.115.166.132
※ 编辑: dreamboxer 来自: 59.115.166.132 (07/08 01:28)
1F:推 ComicMan:大推 07/08 02:04
2F:推 zswolf:这一定要推一下~~大大推 07/08 03:12
3F:推 a149851571:哇....实在是太感谢大大了....一目了然~~ 07/08 10:00
4F:→ dreamboxer:改一下标题方便日後的人搜寻...XD 07/08 10:23
5F:推 kuwood:推图说=w= 07/08 12:40
6F:推 kerpohpwos:最近在学Java,又看到这篇,感觉很有亲切感 07/08 16:56
7F:推 starjou:所以 static class 其实在定义的时候就是一个实体 07/08 21:32
8F:→ starjou:且不用指定给变数是吗? 07/08 21:32
9F:推 starjou:不对,我搞错了,现在讲的是 function 不是 class 07/08 21:34
10F:推 etrexetrex:正确说 static function 是 class 拥有的 function 07/08 23:02
11F:推 etrexetrex:1 个 class 可以有很多个 object(实体) 07/08 23:05
12F:→ etrexetrex:因为 static function 是 class function 所以1个就好 07/08 23:06
13F:推 osanaosana:小补充一下,可直接使用 动物园.收票员(钱) 函式 04/30 04:20
14F:→ osanaosana:不需要宣告动物园的实体 04/30 04:21