【问题标题】:Scenes vs Stages in Actionscript 3Actionscript 3 中的场景与阶段
【发布时间】:2014-04-05 21:15:13
【问题描述】:

我在 FlashDevelop 中编写了一个程序,该程序将有几个不同的窗口,每个窗口的侧面都有按钮,允许用户从一个窗口转到下一个窗口。窗口不会同时打开 - 基本上只需要重新绘制背景并添加或删除功能。窗户侧面的按钮将是相同的。

现在一切正常,只是位图是从按钮的左上角而不是窗口的左上角绘制的。一个月前我问了这个问题,得到了与场景相关的答案。我一直很忙,没有太多时间来处理这个问题,但这似乎不起作用。如果我理解正确,场景只是时间线的不同部分。我没有使用 Flash,否则这很简单——goToAndPlay。

我在这里缺少什么?我应该使用 Stage 还是 Document 类?代码如下,此时我只是在绘制一个黑色矩形,但是当我绘制位图时,事情是一样的:

从主要:

songbutton = new SongButton;
addChild(songbutton);
songbutton.x = 680;
songbutton.y = 100;

来自 SongButton:

public class SongButton extends MusicPlay
{   
        public var songsYellow:Loader;
        public var songsWhite:Loader;
        public function SongButton(): void
        {
            songsYellow = new Loader();
            songsYellow.load(new URLRequest("images/SongsYellow.jpg"));
            songsWhite = new Loader();
            songsWhite.load(new URLRequest("images/SongsWhite.jpg"));
            addChild(songsWhite);
            addEventListener(MouseEvent.MOUSE_OVER, mouseOver);
            addEventListener(MouseEvent.MOUSE_OUT, mouseOut);
            addEventListener(MouseEvent.MOUSE_UP, mouseUp);
        }

        private function mouseOver(e:MouseEvent):void {
            addChild(songsYellow);
        }
        private function mouseOut(e:MouseEvent):void {
            addChild(songsWhite);
        }
        private function mouseUp(e:MouseEvent):void {
            SetMusicScreen();
        }
}

来自 MusicPlay:

public function SetMusicScreen():void 
{
    graphics.beginFill(0x0);
    graphics.drawRect(0, 0, 800, 550);
    graphics.endFill();
}

【问题讨论】:

  • 有十亿种方法可以制作按钮并将它们放在屏幕上,所以...您可以发布您用来执行此操作的代码吗?通常,所有内容都与其父容器的左上角对齐。因此,这将取决于您将按钮添加到什么——无论是舞台还是其他。

标签: actionscript-3 flash stage scene


【解决方案1】:

至少在 Flash 中,您可以通过stage.graphics.beginFill(0x0); 直接在舞台上进行 Flash 绘图

无论出于何种原因,如果超出范围,您还应该能够通过 MovieClip(parent).graphics.beginfill(0x0); 访问 MovieClip 的父级。要获得更多的父级,您可以使用 MovieClip(parent.parent)“退后一步”, MovieClip(parent.parent.parent),等等。

这是否适用于 FlashDevelop,我不知道。我认为它会,因为它基于 ActionScript 3。

【讨论】:

  • 不幸的是,它不适用于 FlashDevelop - 这基本上是 Flash 的东西。显然我遗漏了一些相当明显的东西,必须有办法做到这一点。
【解决方案2】:

除了位图是从按钮的左上角绘制的

因为你使用的是按钮的 Graphics 对象

public function SetMusicScreen():void 
{
    graphics.beginFill(0x0);
    graphics.drawRect(0, 0, 800, 550);
    graphics.endFill();
}

SetMusicScreen 是按钮的方法,graphics 也与按钮有关。您应该更改 SetMusicScreen 方法的逻辑,它应该引用正确的 Graphics 对象。例如,这种方法会改变应用程序的背景颜色:

function SetMusicScreen():void {
    //This will change background color of document class
    var myRoot: Sprite = Sprite(root);

    myRoot.graphics.clear();
    myRoot.graphics.beginFill(0);
    myRoot.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight); //x,y, width, height
}

你可以放置窗口精灵对象,它会改变颜色,或者你可以在SetMusicScreen,沿X轴偏移绘图,所以左侧按钮下的背景不会改变。

【讨论】:

  • 在 var myRoot: Sprite = Sprite(root); 上执行此操作时出现错误。 “参数数量不正确。预计不超过 0。”
  • 你的文档类是Sprite吗?如果您使用 MovieClip 作为 Document 类 → var myRoot: MovieClip = MovieClip(root);
  • 我得到了同样的错误......你是绝对正确的,当前代码正在访问错误的图形对象。
【解决方案3】:

好的,我找到了一种方法来做到这一点。可能不是最好的方法,但事实证明我可以在调用类中放置一个 addEventListener(MouseEvent.MOUSE_UP, gottaMouseUp),在按钮类中添加一个公共变量,让我知道是否单击了正确的按钮,并且在调用类中使用它来确定单击了哪个按钮。我知道这很简单……

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    相关资源
    最近更新 更多