skip to main |skip to sidebar

2008-02-17

永远的 SoundComplete 事件

这已经不是什么新闻了,只是关注度好像不是很高,但我认为很有必要说几句。

自从 Flash Player 升级为 9.0.115.0 后 Sound.soundComplete 事件就消失了!没有任何征兆,一夜之间就从这个世界消失得无影无踪。

不要小看这个事件,没有它音频控制几乎不可能。比如以前一直使用 Sound.soundComplete 事件来实现音频的连续回放等各种特效,现在一切变为了南柯一梦。特别是 popforge 项目,一个 使用 AS3 来创作与修改音频的先端开发的新兴项目成为了最大的受害者之一,它有可能因此而从此玉损了!

大家署名来抗议吧The silent death of onSoundComplete event - a petition

2008-02-07

祝大家新春快乐

今天是初一,祝大家鼠年快快乐乐。也祝我的网站日月兴隆。

[AS3]让构造函数不执行 super()

在构造函数里一般 super() 必须执行。如果不写,在编译时会在构造函数的最上面添加 super()。但有时又需要不执行。比如以下代码:

class AbstractClass {
  public function AbstractClass() {
    throw new Error("Abstract class");
  }
}
class SubClass extends AbstractClass {
  public function SubClass() {
    trace("sub class");
  }
}

SubClass 对象会因为超类弹出错误而创建失败。但如果让 super() 不执行就可以了。

class SubClass extends AbstractClass {
  public function SubClass() {
    if(0) { //这里必须为返回 false 的表达式。但不能为 "false"(false 会被编译器忽视)。
      super();
    }
    trace("sub class");
  }
}

测试代码:

package {
  import flash.display.*;
  public class Test extends Sprite {
    public function Test() {
      new AbstractClass(); // -> Super CLass
      new SubClass1(); // -> Super CLass / Sub CLass1 start / Sub CLass1 end
      new SubClass2(); // -> Sub CLass2 start / Sub CLass2 end
    }
  }
}
class AbstractClass {
  public function AbstractClass() {
    trace("Super CLass");
  }
}
class SubClass1 {
  public function AbstractClass() {
    trace("Sub CLass1 start");
    super();
    trace("Sub CLass1 end");
  }
}
class SubClass2 {
  public function AbstractClass() {
    trace("Sub CLass2 start");
    if(0) {
      super();
    }
    trace("Sub CLass2 end");
  }
}

2008-02-03

[Flex]把 Sprite 添加到 Canvas 里的方

Flex FrameworkCanvas 是无法添加 Sprite 等非 UI 组件的 DisplayObject的。但有变通的办法。

1.使用 Adaptor 模式

Sprite 添加到 UIComponent,再把 UIComponent 添加到 Canvas

代码:

var mySprite:Sprite = new Sprite();
mySprite.graphics.beginFill(0xFFCC00);
mySprite.graphics.drawCircle( 40, 40, 40 );
var UIRef:UIComponent = new UIComponent();
myUI.addChild(UIRef);
UIRef.addChild(mySprite);

2.使用 rawChildren

使用 Canvas.rawChildren

代码:

var mySprite:Sprite = new Sprite();
mySprite.graphics.beginFill(0xFFCC00);
mySprite.graphics.drawCircle( 40, 40, 40 );
myUI.rawChildren.addChild(mySprite);

2008-01-30

ActionScript Snippets 加入了 RXNA

我的专门收集代码的博客 ActionScript Snippets 加入 MXNA 了。

大家可以常去看看。

2008-01-26

POP3 协议很危险!

大家注意,POP3 协议(非 POP3s)十分危险!

如果使用未加密的 POP3 协议来收邮件,你的用户名与密码就用可能被盗

以下是我使用 Wireshark 接下的包:

可以看到,用户名与密码写得一清二楚。即使一个刚入门的骇客也知道该怎么解读。

解决办法:

  • 可以使用安全的 POP3s 协议。POP3s 协议相当于加了密的 POP3,这样用户名与密码就难以解读了。但并不是所有的邮件提供商都支持 POP3s 协议。
  • 经常换密码,这样即使被盗,也是暂时的,把损失降到最小。
  • 避免用邮件发送重要的信息。

2008-01-20

[AS3]小心使用连续赋值

连续赋值即为 a = b = 1 的形式的赋值。这样写有时候会很方便,但有一个陷阱!

比如以下代码:

var a:Array, b:String;
a = b = null;

会报类型错误。因为在内部是编译成以下形式的。

var a:Array;
var b:String;
b = null;
a = b;

理所当然会报错了。以后可要注意。