ActionScript 3 函数以不同 class 隐藏或显示当前舞台上的动画片段
ActionScript3 Function to hide or show movieclip currently on stage in a different class
你好可爱的 Actionscript 人民。我在使用 AS3 创建按钮时遇到了一些问题,该按钮可以隐藏或显示由不同的 class 调用的特定动画片段。老实说,我认为我的问题是我从根本上不理解 OOP / classes,因为它们在 AS3 中被使用,但是我会 post 我对这里问题的理解 -
我有 3 个不同的 classes,ConsStartMenu.as
(文档 class),Menu.as(我想隐藏和显示的菜单) 和 SideMenu.as
(包含我想点击以隐藏/显示菜单的按钮)。我正在从 ConsStartMenu.as
调用我的菜单和 SideMenu MovieClips 的显示。相关代码在这里 -
public var menuDisplay:Menu = new Menu();
public var sidemenuDisplay:SideMenu = new SideMenu();
public function ConsStartMenu():void {
stage.addChild(menuDisplay);
menuDisplay.x=stage.stageWidth * .5;
menuDisplay.y=stage.stageHeight * .5;
stage.addChild(sidemenuDisplay);
sidemenuDisplay.x=stage.stageWidth*.98;
sidemenuDisplay.y=stage.stageHeight*.5;
}
在我的 SideMenu.as
中,我有这段代码来引用我认为的菜单?在舞台上 -
public var centerMenu:Menu = new Menu();
然后在按钮所在框架的操作上 -
import flash.events.MouseEvent;
stop();
OpenSideMenu.addEventListener(MouseEvent.CLICK, LinkOpenSideMenu);
function LinkOpenSideMenu(event:MouseEvent):void {
if (centerMenu.parent.stage){
trace ("center Menu is in display list");
centerMenu.parent.removeChild(centerMenu);
}
else
{
trace("Adding menu back to stage");
centerMenu.parent.addChild(centerMenu);
}
}
当我点击按钮时,出现了这个错误 -
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at SideMenu/LinkOpenSideMenu()[SideMenu::frame1:9]
如有任何帮助,我们将不胜感激。
您的问题是混淆了对象引用和实例化。
当您使用 new
关键字时,您正在创建一个全新的对象。
所以在 ConStartMenu
当你这样做时:
public var menuDisplay:Menu = new Menu();
您正在创建一个新的 Menu
对象。
而且,在 SideMenu
当你这样做时:
public var centerMenu:Menu = new Menu();
您正在创建第二个 Menu
对象(与第一个对象无关)。
您想要的是对创建的第一个菜单的引用。
有几种方法可以做到这一点:
将引用传递给 SideMenu
的构造函数。
public var menuDisplay:Menu;
public var sidemenuDisplay:SideMenu;
public function ConsStartMenu():void {
menuDisplay = new Menu();
sidemenuDisplay:SideMenu = new SideMenu(menuDisplay);
//...rest of code
//then in your side menu class:
public var centerMenu:Menu;
public function SideMenu(menu:Menu){
centerMenu = menu;
//now you have a reference to the menu
}
在 ConStartMenu
static
中创建 menuDisplay
变量。 (静态变量可以通过 class 本身访问,而不是实例化的一部分
public static var menuDisplay:Menu = new Menu();
//now you can access it anywhere in your app by doing:
ConStartMenu.menuDisplay
利用出身来寻找。由于您的 ConStartMenu
实例是 SideMenu
的父实例,您可以使用父关键字访问 ConStartMenu
的任何 public methods/var:
//from within SideMenu
parent.menuDisplay;
//or, to avoid a warning, tell the compiler that parent is of type ConStartMenu (cast)
ConStartMenu(parent).menuDisplay
你好可爱的 Actionscript 人民。我在使用 AS3 创建按钮时遇到了一些问题,该按钮可以隐藏或显示由不同的 class 调用的特定动画片段。老实说,我认为我的问题是我从根本上不理解 OOP / classes,因为它们在 AS3 中被使用,但是我会 post 我对这里问题的理解 -
我有 3 个不同的 classes,
ConsStartMenu.as
(文档 class),Menu.as(我想隐藏和显示的菜单) 和SideMenu.as
(包含我想点击以隐藏/显示菜单的按钮)。我正在从ConsStartMenu.as
调用我的菜单和 SideMenu MovieClips 的显示。相关代码在这里 -public var menuDisplay:Menu = new Menu(); public var sidemenuDisplay:SideMenu = new SideMenu(); public function ConsStartMenu():void { stage.addChild(menuDisplay); menuDisplay.x=stage.stageWidth * .5; menuDisplay.y=stage.stageHeight * .5; stage.addChild(sidemenuDisplay); sidemenuDisplay.x=stage.stageWidth*.98; sidemenuDisplay.y=stage.stageHeight*.5; }
在我的
SideMenu.as
中,我有这段代码来引用我认为的菜单?在舞台上 -public var centerMenu:Menu = new Menu();
然后在按钮所在框架的操作上 -
import flash.events.MouseEvent;
stop();
OpenSideMenu.addEventListener(MouseEvent.CLICK, LinkOpenSideMenu);
function LinkOpenSideMenu(event:MouseEvent):void {
if (centerMenu.parent.stage){
trace ("center Menu is in display list");
centerMenu.parent.removeChild(centerMenu);
}
else
{
trace("Adding menu back to stage");
centerMenu.parent.addChild(centerMenu);
}
}
当我点击按钮时,出现了这个错误 -
TypeError: Error #1009: Cannot access a property or method of a null object reference. at SideMenu/LinkOpenSideMenu()[SideMenu::frame1:9]
如有任何帮助,我们将不胜感激。
您的问题是混淆了对象引用和实例化。
当您使用 new
关键字时,您正在创建一个全新的对象。
所以在 ConStartMenu
当你这样做时:
public var menuDisplay:Menu = new Menu();
您正在创建一个新的 Menu
对象。
而且,在 SideMenu
当你这样做时:
public var centerMenu:Menu = new Menu();
您正在创建第二个 Menu
对象(与第一个对象无关)。
您想要的是对创建的第一个菜单的引用。
有几种方法可以做到这一点:
将引用传递给
SideMenu
的构造函数。public var menuDisplay:Menu; public var sidemenuDisplay:SideMenu; public function ConsStartMenu():void { menuDisplay = new Menu(); sidemenuDisplay:SideMenu = new SideMenu(menuDisplay); //...rest of code
//then in your side menu class:
public var centerMenu:Menu;
public function SideMenu(menu:Menu){
centerMenu = menu;
//now you have a reference to the menu
}
在
ConStartMenu
static
中创建menuDisplay
变量。 (静态变量可以通过 class 本身访问,而不是实例化的一部分public static var menuDisplay:Menu = new Menu(); //now you can access it anywhere in your app by doing: ConStartMenu.menuDisplay
利用出身来寻找。由于您的
ConStartMenu
实例是SideMenu
的父实例,您可以使用父关键字访问ConStartMenu
的任何 public methods/var://from within SideMenu parent.menuDisplay; //or, to avoid a warning, tell the compiler that parent is of type ConStartMenu (cast) ConStartMenu(parent).menuDisplay