发新话题
打印

[求救] 《FLASHAS2互动编程从基础到应用》书上错了呢?还是我笨!?

《FLASHAS2互动编程从基础到应用》书上错了呢?还是我笨!?

书中第九章12小节讲解MENU组件时,作了个实例,我刚才测试时却发现点问题,侦听器函数根本没有触发,不知道什么原因?
var menuData = new XML();
menuData.ignoreWhite = true;
menuData.load("data.xml");
menuData.onLoad = function(success) {
if (success) {
  createClassObject(mx.controls.MenuBar, "myMenuBar", 0, {});
  var fileMenu = myMenuBar.addMenu("File");
  var viewMenu = myMenuBar.addMenu("View");
  var cntrMenu = myMenuBar.addMenu("Control");
  var helpMenu = myMenuBar.addMenu("Help");
  fileMenu.dataProvider = menuData.firstChild.childNodes[0];
  viewMenu.dataProvider = menuData.firstChild.childNodes[1];
  cntrMenu.dataProvider = menuData.firstChild.childNodes[2];
  helpMenu.dataProvider = menuData.firstChild.childNodes[3];
}
};
var fileChangeListener = new Object();
fileChangeListener.change = function(evt) {
if (evt.menuItem.attributes.label == "退出") {
  fscommand("quit","");//点退出菜单,播放并没有关闭
}
};
fileMenu.addEventListener("change", fileChangeListener);
Stage.showMenu = false;
希望高手能够指点迷津!谢谢!!!

附件

Menu.rar (145.51 KB)

2008-5-3 15:34, 下载次数: 26

TOP

这段代码确实有不合理的地方。
因为在没有var fileMenu的地方为fileMenu添加了侦听。相当于给一个不存在的对象添加了侦听
调整一下,先有 申明再有侦听是可以的。
复制内容到剪贴板
代码:
var menuData = new XML();
//组件的颜色能随及变换么?或者指定颜色
menuData.ignoreWhite = true;
menuData.onLoad = function(success) {
        if (success) {
                createClassObject(mx.controls.MenuBar, "myMenuBar", 0, {});
                var fileMenu = myMenuBar.addMenu("File");
                fileMenu.addEventListener("change", fileChangeListener);
                var viewMenu = myMenuBar.addMenu("View");
                var cntrMenu = myMenuBar.addMenu("Control");
                var helpMenu = myMenuBar.addMenu("Help");
                fileMenu.dataProvider = menuData.firstChild.childNodes[0];
                viewMenu.dataProvider = menuData.firstChild.childNodes[1];
                cntrMenu.dataProvider = menuData.firstChild.childNodes[2];
                helpMenu.dataProvider = menuData.firstChild.childNodes[3];
        }
};
menuData.load("data.xml");
var fileChangeListener = new Object();
fileChangeListener.change = function(evt) {
        trace(evt.menuItem.attributes.label);
        if (evt.menuItem.attributes.label == "退出") {
                fscommand("quit", "");
        }
};
Stage.showMenu = false;

TOP

回复 2# 的帖子

谢谢热心的终极讨厌老师!每一次都是你及时出手相助,请允许我代表广大菜鸟们向你表示深深的谢意!
不好意思!刚才竟然又发现了个问题,借此机会再请讨厌指导一下!以下摘自flash8 pro  帮助文件:
/**
要求:
  - 库中有 Menu 组件
*/
import mx.controls.Menu;
// 创建用作出厂设置的 XML 对象。
var my_xml:XML = new XML();
// 接下来创建的项不会出现在菜单中。
// createMenu() 方法调用(如下所示)预期会
// 接收到根元素,该元素的子元素将成为
// 菜单项。这只是一个创建该
// 根元素并为其指定一个便利名称的简单方法。
var menuDP_obj:Object = my_xml.addMenuItem("Edit");
// 添加菜单项。
menuDP_obj.addMenuItem({label:"1st Item"});
menuDP_obj.addMenuItem({label:"2nd Item"});
// 创建 Menu 对象。
var my_menu:Menu = Menu.createMenu(this, menuDP_obj);
my_menu.show();
var menuListener:Object = new Object();
menuListener.change = function(evt_obj:Object) {
trace("Menu item chosen: " + evt_obj.menuItem.attributes.label);
};
my_menu.addEventListener("change", menuListener);
//+++++++++++++++++++++++++++++++++++
郁闷的是:
**错误** 场景=场景 1, 图层=图层 1, 帧=1:第 30 行: 没有名为'addEventListener'的方法。
     my_menu.addEventListener("change", menuListener);
ActionScript 错误总数:1   报错:1
//********************************************
请各位老师察看帮助文件,是我复制的代码不全呢?还是另有原因?

[ 本帖最后由 fxtfxt2008 于 2008-5-3 20:31 编辑 ]

TOP

发新话题