2009-12-20 51 views
0

我想添加一段简单的文本到舞台上,并添加一个监听器,当用户点击它时做一些事情。AS3中的TextField - 编程一个点击监听器

这是我的文本链接类:

package some.package 
{ 
    import flash.display.Sprite; 
    import flash.external.ExternalInterface; 
    import flash.text.TextField; 
    import flash.text.TextFieldAutoSize; 

    public class TextLink extends Sprite 
    { 
     public var tf:TextField = new TextField(); 
     public var bspr:Sprite = new Sprite(); 

     public function TextLink(tx:int, ty:int, tft:String):void 
     { 
      tf.text = tft; 
      tf.x = tx; 
      tf.y = ty; 
      tf.autoSize = TextFieldAutoSize.LEFT; 
      bspr.addChild(tf); 
      this.addChild(tf); 
     } 
    } 
} 

这里是我打电话的方式,与听众一起:

public function test_array_of_objects():void 
{  
var tmp:TextLink = new TextLink(30, 30, "some text"); 
tmp.addEventListener(MouseEvent.CLICK, roverNotify); 
addChild(tmp);  
} 

protected function roverNotify(e:Event):void 
{ 
    ExternalInterface.call("console.log", "got a click"); 
} 

...但我没有得到一个消息一些原因。 我已经成功导入了一切。任何想法,我还可以尝试什么?

+0

你能提供更多的代码吗?东西丢失。 – LiraNuna 2009-12-21 00:05:48

回答

1

您的TextLink类是一个事件派发器吗?您正尝试向TextLink对象添加侦听器,但是需要将点击侦听器附加到您在TextLink中使用的文本字段。 TextLink需要是某种DisplayObject才能继承调度功能。

另外,构造函数不应该指定返回类型(因为它们只是自己返回) - void:不应该存在于TextLink构造函数所在的位置。

+0

re:textlink:这是一个精灵;这不会工作吗? 回复:无效:我把它拿出来了。似乎并不重要......嗯。 感谢您的想法;仍然不是werkin。 – jml 2009-12-21 01:30:59

+0

btw-我更新了我的帖子中的代码,向您展示更全面的图片 – jml 2009-12-21 01:36:20

+0

是的,Sprites派发活动。 – aib 2009-12-21 04:57:23

1

函数TextLink在开始时需要这样的东西: var tf:Text = new Text();

+0

是啊;我已经在主构造函数之外定义了它。 – jml 2009-12-21 01:27:35

1

单击Sprite或获取事件触发问题?如果是前者,您可以尝试添加下面的代码。

tmp.mouseChildren = false; 
tmp.buttonMode = true; 
+0

我可以点击它,然后我得到一个错误,说我已经通过了太多的参数(1)。我有我的回调定义与事件(e)的单一参数。 – jml 2009-12-21 05:24:28

0
ExternalInterface.call("console.log", "got a click"); 

你有这样??定义的JavaScript函数:

function console.log(inputString) { 
    //do something 
} 

编辑:没关系以上,忘了萤火虫。

此外,TextLink并不需要是事件派发器,尽管您可能希望TextLink将其属性设置为false(除非需要能够选择该文本),以便您不要不会无意中触发TextFieldbuttonMode上的事件为真。

编辑:此外,什么是?:的

var bspr:Sprite = new Sprite(); 
bspr.addChild(tf); 

最后编辑

这个怎么样的地步? http://code.google.com/p/fbug/issues/detail?id=1494

是的,你是正确的,在FF3控制台被注入,只有当页面有 JavaScript和使用window.console。

如果你把闪存​​加载它应该工作之前访问控制台的任何JS,如

<script> 
    var triggerFirebugConsole = window.console; 
</script> 

让我们知道这是否正常工作。我们不可能很快解决这个问题。