Actionscript 3 在ScrollWindow ActionScript 3.0中添加舞台

Actionscript 3 在ScrollWindow ActionScript 3.0中添加舞台,actionscript-3,flash,actionscript,flash-cs5,flash-cs4,Actionscript 3,Flash,Actionscript,Flash Cs5,Flash Cs4,我将尝试用图片来解释我的处境,以确保每个人都理解我想要成功 首先,我有3个文件: GenImage.fla它链接到类GeneralImage.as 它只包含以下图片(我尝试制作图像电影剪辑,但仍然无法正常工作): 以及一个名为ScrollUI.as的文件,其中包含类ScrollUI 我想要成功的是从我的GeneralImage类创建一个ScrollUi项,通过阶段,然后创建一个ScrollPane,使图片看起来像这样: 第二个图像的中心部分是ScrollPane组件,我需要使它可以在整个图像

我将尝试用图片来解释我的处境,以确保每个人都理解我想要成功

首先,我有3个文件:

GenImage.fla它链接到类GeneralImage.as 它只包含以下图片(我尝试制作图像电影剪辑,但仍然无法正常工作):

以及一个名为ScrollUI.as的文件,其中包含类ScrollUI

我想要成功的是从我的GeneralImage类创建一个ScrollUi项,通过阶段,然后创建一个ScrollPane,使图片看起来像这样:

第二个图像的中心部分是ScrollPane组件,我需要使它可以在整个图像中滚动。我设法把它放在我的屏幕上,但我不能把舞台放进去,使它可以滚动

这是我的密码:

GeneralImage.as

package  {

    import flash.display.*;
    import flash.events.*;
    import flash.display.Stage;
    import ScrollUI;


    public class GeneralImage extends MovieClip
    {

        public function GeneralImage()
        {
            var k = new ScrollUI();
            k.ScrollConstructor(this);

        }

    }

}
package  
{

    import flash.display.*;
    import flash.events.*;
    import fl.containers.ScrollPane; 
    import fl.events.ScrollEvent;
    import fl.controls.ScrollPolicy; 

    public class ScrollUI extends MovieClip
    {
        private var _mainStage:Stage;
        var aBox:MovieClip = new MovieClip(); 
        var aSp:ScrollPane = new ScrollPane();

        public function ScrollUI()
        {
        }

        function ScrollConstructor(stage:Object):void
        {
            _mainStage = (stage as MovieClip).stage;
            aBox == stage as MovieClip;
            aSp.source == aBox ;
            _mainStage.addChild(aBox);
            aSp.setSize(300,300);
            aSp.move(150, 75); 
            aSp.scrollDrag = true;
            aSp.horizontalScrollPolicy=ScrollPolicy.OFF;
            _mainStage.addChild(aSp);

        }
    }

}
package  
{

    import flash.display.Sprite;
    import fl.containers.ScrollPane; 
    import fl.events.ScrollEvent;
    import fl.controls.ScrollPolicy; 

    public class ScrollUI extends Sprite
    {
        //just declare the variables here, don't assign them new values
        private var aBox:MovieClip; 
        private var aSp:ScrollPane;

        public function ScrollUI()
        {
            //use the actual constructor...

            aSp = new ScrollPane(); //instantiate a new scroll pane
            addChild(aSp); //add the scroll pane to the display

            aBox = new MyImage(); //instantiate an new MyImage from the library
            //set the scroll pane properties
            aSp.source = aBox; //you had two = signs here before, which doesn't actually assign anything it compares
            aSp.setSize(300,300);
            aSp.move(150, 75); 
            aSp.scrollDrag = true;
            aSp.horizontalScrollPolicy=ScrollPolicy.OFF;

        }
    }

}
package  {

    import ScrollUI;


    public class GeneralImage extends MovieClip
    {

        public function GeneralImage()
        {
            var k:ScrollUI = new ScrollUI(); //create a new instance of the ScrollUI class
            addChild(k); //add the scrollUI object to the display;

            //OR, you just do this:
            //addChild(new ScrollUI());
        }

    }

}
package  {

    import flash.display.*;
    import flash.events.*;
    import flash.display.Stage;
    import ScrollUI;

    public class GeneralImage extends MovieClip
    {
//as Batman indicated, I should have used the ScrollUI constructor, but 
//except for the Stage, i also send the wholemap that is in my GenImage.fla
//<< this.getChildByName("wholemap") as MovieClip) >>
        public function GeneralImage()
        {
            var k = new ScrollUI(this, this.getChildByName("wholemap") as MovieClip); 
        }
    }

}
package  
{
    import flash.display.*;
    import flash.events.*;
    import fl.containers.ScrollPane; 
    import fl.events.ScrollEvent;
    import fl.controls.ScrollPolicy; 

    public class ScrollUI extends MovieClip
    {
        private var _mainStage:Stage;
        var aBox:MovieClip = new MovieClip(); 
    //So our constructor gets 2 items, a Stage, and a MovieClip
        public function ScrollUI(stage:Object, pic:MovieClip)
        {
    //We set the Stage at the variable _mainStage with that way:
            _mainStage = (stage as MovieClip).stage;
    //We set the Image that we will take at our clip variable :
            var clip:MovieClip = pic;
    //And we send the Movieclip (clip) in our ScrollConstructor function
            ScrollConstructor(clip);
        }

        function ScrollConstructor(Clip:MovieClip):void
        {
            var aSp:ScrollPane = new ScrollPane();
            aBox = Clip;
            _mainStage.addChild(aBox);
            aSp.source = aBox ;
            aSp.setSize(300,300);
            aSp.move(150, 75); 
            aSp.scrollDrag = true;
            aSp.horizontalScrollPolicy=ScrollPolicy.OFF;
            aSp.verticalScrollPolicy=ScrollPolicy.OFF;
            _mainStage.addChild(aSp);
        }
    }

}
ScrollUI.as

package  {

    import flash.display.*;
    import flash.events.*;
    import flash.display.Stage;
    import ScrollUI;


    public class GeneralImage extends MovieClip
    {

        public function GeneralImage()
        {
            var k = new ScrollUI();
            k.ScrollConstructor(this);

        }

    }

}
package  
{

    import flash.display.*;
    import flash.events.*;
    import fl.containers.ScrollPane; 
    import fl.events.ScrollEvent;
    import fl.controls.ScrollPolicy; 

    public class ScrollUI extends MovieClip
    {
        private var _mainStage:Stage;
        var aBox:MovieClip = new MovieClip(); 
        var aSp:ScrollPane = new ScrollPane();

        public function ScrollUI()
        {
        }

        function ScrollConstructor(stage:Object):void
        {
            _mainStage = (stage as MovieClip).stage;
            aBox == stage as MovieClip;
            aSp.source == aBox ;
            _mainStage.addChild(aBox);
            aSp.setSize(300,300);
            aSp.move(150, 75); 
            aSp.scrollDrag = true;
            aSp.horizontalScrollPolicy=ScrollPolicy.OFF;
            _mainStage.addChild(aSp);

        }
    }

}
package  
{

    import flash.display.Sprite;
    import fl.containers.ScrollPane; 
    import fl.events.ScrollEvent;
    import fl.controls.ScrollPolicy; 

    public class ScrollUI extends Sprite
    {
        //just declare the variables here, don't assign them new values
        private var aBox:MovieClip; 
        private var aSp:ScrollPane;

        public function ScrollUI()
        {
            //use the actual constructor...

            aSp = new ScrollPane(); //instantiate a new scroll pane
            addChild(aSp); //add the scroll pane to the display

            aBox = new MyImage(); //instantiate an new MyImage from the library
            //set the scroll pane properties
            aSp.source = aBox; //you had two = signs here before, which doesn't actually assign anything it compares
            aSp.setSize(300,300);
            aSp.move(150, 75); 
            aSp.scrollDrag = true;
            aSp.horizontalScrollPolicy=ScrollPolicy.OFF;

        }
    }

}
package  {

    import ScrollUI;


    public class GeneralImage extends MovieClip
    {

        public function GeneralImage()
        {
            var k:ScrollUI = new ScrollUI(); //create a new instance of the ScrollUI class
            addChild(k); //add the scrollUI object to the display;

            //OR, you just do this:
            //addChild(new ScrollUI());
        }

    }

}
package  {

    import flash.display.*;
    import flash.events.*;
    import flash.display.Stage;
    import ScrollUI;

    public class GeneralImage extends MovieClip
    {
//as Batman indicated, I should have used the ScrollUI constructor, but 
//except for the Stage, i also send the wholemap that is in my GenImage.fla
//<< this.getChildByName("wholemap") as MovieClip) >>
        public function GeneralImage()
        {
            var k = new ScrollUI(this, this.getChildByName("wholemap") as MovieClip); 
        }
    }

}
package  
{
    import flash.display.*;
    import flash.events.*;
    import fl.containers.ScrollPane; 
    import fl.events.ScrollEvent;
    import fl.controls.ScrollPolicy; 

    public class ScrollUI extends MovieClip
    {
        private var _mainStage:Stage;
        var aBox:MovieClip = new MovieClip(); 
    //So our constructor gets 2 items, a Stage, and a MovieClip
        public function ScrollUI(stage:Object, pic:MovieClip)
        {
    //We set the Stage at the variable _mainStage with that way:
            _mainStage = (stage as MovieClip).stage;
    //We set the Image that we will take at our clip variable :
            var clip:MovieClip = pic;
    //And we send the Movieclip (clip) in our ScrollConstructor function
            ScrollConstructor(clip);
        }

        function ScrollConstructor(Clip:MovieClip):void
        {
            var aSp:ScrollPane = new ScrollPane();
            aBox = Clip;
            _mainStage.addChild(aBox);
            aSp.source = aBox ;
            aSp.setSize(300,300);
            aSp.move(150, 75); 
            aSp.scrollDrag = true;
            aSp.horizontalScrollPolicy=ScrollPolicy.OFF;
            aSp.verticalScrollPolicy=ScrollPolicy.OFF;
            _mainStage.addChild(aSp);
        }
    }

}

因此,我希望它将滚动窗格(名为aSp)的源设置为“主体”,这是我从GeneralImage获得的舞台。您的问题可能是以下两行:

 aBox == stage as MovieClip;
 aSp.source == aBox ;
您正在使用两个
==
进行比较,这在您的情况下实际上没有任何作用。使用单个
=
指定值

我建议您这样做:

在FlashPro库中,找到您的图像资源(我假设您将其包装在MovieClip中),右键单击(或命令单击)并转到其属性。选中“export for actionscript”框,并为其指定一个有意义的类名(例如,我假设您将其命名为MyImage

然后您可以执行以下操作:

ScrollUI类

package  {

    import flash.display.*;
    import flash.events.*;
    import flash.display.Stage;
    import ScrollUI;


    public class GeneralImage extends MovieClip
    {

        public function GeneralImage()
        {
            var k = new ScrollUI();
            k.ScrollConstructor(this);

        }

    }

}
package  
{

    import flash.display.*;
    import flash.events.*;
    import fl.containers.ScrollPane; 
    import fl.events.ScrollEvent;
    import fl.controls.ScrollPolicy; 

    public class ScrollUI extends MovieClip
    {
        private var _mainStage:Stage;
        var aBox:MovieClip = new MovieClip(); 
        var aSp:ScrollPane = new ScrollPane();

        public function ScrollUI()
        {
        }

        function ScrollConstructor(stage:Object):void
        {
            _mainStage = (stage as MovieClip).stage;
            aBox == stage as MovieClip;
            aSp.source == aBox ;
            _mainStage.addChild(aBox);
            aSp.setSize(300,300);
            aSp.move(150, 75); 
            aSp.scrollDrag = true;
            aSp.horizontalScrollPolicy=ScrollPolicy.OFF;
            _mainStage.addChild(aSp);

        }
    }

}
package  
{

    import flash.display.Sprite;
    import fl.containers.ScrollPane; 
    import fl.events.ScrollEvent;
    import fl.controls.ScrollPolicy; 

    public class ScrollUI extends Sprite
    {
        //just declare the variables here, don't assign them new values
        private var aBox:MovieClip; 
        private var aSp:ScrollPane;

        public function ScrollUI()
        {
            //use the actual constructor...

            aSp = new ScrollPane(); //instantiate a new scroll pane
            addChild(aSp); //add the scroll pane to the display

            aBox = new MyImage(); //instantiate an new MyImage from the library
            //set the scroll pane properties
            aSp.source = aBox; //you had two = signs here before, which doesn't actually assign anything it compares
            aSp.setSize(300,300);
            aSp.move(150, 75); 
            aSp.scrollDrag = true;
            aSp.horizontalScrollPolicy=ScrollPolicy.OFF;

        }
    }

}
package  {

    import ScrollUI;


    public class GeneralImage extends MovieClip
    {

        public function GeneralImage()
        {
            var k:ScrollUI = new ScrollUI(); //create a new instance of the ScrollUI class
            addChild(k); //add the scrollUI object to the display;

            //OR, you just do this:
            //addChild(new ScrollUI());
        }

    }

}
package  {

    import flash.display.*;
    import flash.events.*;
    import flash.display.Stage;
    import ScrollUI;

    public class GeneralImage extends MovieClip
    {
//as Batman indicated, I should have used the ScrollUI constructor, but 
//except for the Stage, i also send the wholemap that is in my GenImage.fla
//<< this.getChildByName("wholemap") as MovieClip) >>
        public function GeneralImage()
        {
            var k = new ScrollUI(this, this.getChildByName("wholemap") as MovieClip); 
        }
    }

}
package  
{
    import flash.display.*;
    import flash.events.*;
    import fl.containers.ScrollPane; 
    import fl.events.ScrollEvent;
    import fl.controls.ScrollPolicy; 

    public class ScrollUI extends MovieClip
    {
        private var _mainStage:Stage;
        var aBox:MovieClip = new MovieClip(); 
    //So our constructor gets 2 items, a Stage, and a MovieClip
        public function ScrollUI(stage:Object, pic:MovieClip)
        {
    //We set the Stage at the variable _mainStage with that way:
            _mainStage = (stage as MovieClip).stage;
    //We set the Image that we will take at our clip variable :
            var clip:MovieClip = pic;
    //And we send the Movieclip (clip) in our ScrollConstructor function
            ScrollConstructor(clip);
        }

        function ScrollConstructor(Clip:MovieClip):void
        {
            var aSp:ScrollPane = new ScrollPane();
            aBox = Clip;
            _mainStage.addChild(aBox);
            aSp.source = aBox ;
            aSp.setSize(300,300);
            aSp.move(150, 75); 
            aSp.scrollDrag = true;
            aSp.horizontalScrollPolicy=ScrollPolicy.OFF;
            aSp.verticalScrollPolicy=ScrollPolicy.OFF;
            _mainStage.addChild(aSp);
        }
    }

}
文档类

package  {

    import flash.display.*;
    import flash.events.*;
    import flash.display.Stage;
    import ScrollUI;


    public class GeneralImage extends MovieClip
    {

        public function GeneralImage()
        {
            var k = new ScrollUI();
            k.ScrollConstructor(this);

        }

    }

}
package  
{

    import flash.display.*;
    import flash.events.*;
    import fl.containers.ScrollPane; 
    import fl.events.ScrollEvent;
    import fl.controls.ScrollPolicy; 

    public class ScrollUI extends MovieClip
    {
        private var _mainStage:Stage;
        var aBox:MovieClip = new MovieClip(); 
        var aSp:ScrollPane = new ScrollPane();

        public function ScrollUI()
        {
        }

        function ScrollConstructor(stage:Object):void
        {
            _mainStage = (stage as MovieClip).stage;
            aBox == stage as MovieClip;
            aSp.source == aBox ;
            _mainStage.addChild(aBox);
            aSp.setSize(300,300);
            aSp.move(150, 75); 
            aSp.scrollDrag = true;
            aSp.horizontalScrollPolicy=ScrollPolicy.OFF;
            _mainStage.addChild(aSp);

        }
    }

}
package  
{

    import flash.display.Sprite;
    import fl.containers.ScrollPane; 
    import fl.events.ScrollEvent;
    import fl.controls.ScrollPolicy; 

    public class ScrollUI extends Sprite
    {
        //just declare the variables here, don't assign them new values
        private var aBox:MovieClip; 
        private var aSp:ScrollPane;

        public function ScrollUI()
        {
            //use the actual constructor...

            aSp = new ScrollPane(); //instantiate a new scroll pane
            addChild(aSp); //add the scroll pane to the display

            aBox = new MyImage(); //instantiate an new MyImage from the library
            //set the scroll pane properties
            aSp.source = aBox; //you had two = signs here before, which doesn't actually assign anything it compares
            aSp.setSize(300,300);
            aSp.move(150, 75); 
            aSp.scrollDrag = true;
            aSp.horizontalScrollPolicy=ScrollPolicy.OFF;

        }
    }

}
package  {

    import ScrollUI;


    public class GeneralImage extends MovieClip
    {

        public function GeneralImage()
        {
            var k:ScrollUI = new ScrollUI(); //create a new instance of the ScrollUI class
            addChild(k); //add the scrollUI object to the display;

            //OR, you just do this:
            //addChild(new ScrollUI());
        }

    }

}
package  {

    import flash.display.*;
    import flash.events.*;
    import flash.display.Stage;
    import ScrollUI;

    public class GeneralImage extends MovieClip
    {
//as Batman indicated, I should have used the ScrollUI constructor, but 
//except for the Stage, i also send the wholemap that is in my GenImage.fla
//<< this.getChildByName("wholemap") as MovieClip) >>
        public function GeneralImage()
        {
            var k = new ScrollUI(this, this.getChildByName("wholemap") as MovieClip); 
        }
    }

}
package  
{
    import flash.display.*;
    import flash.events.*;
    import fl.containers.ScrollPane; 
    import fl.events.ScrollEvent;
    import fl.controls.ScrollPolicy; 

    public class ScrollUI extends MovieClip
    {
        private var _mainStage:Stage;
        var aBox:MovieClip = new MovieClip(); 
    //So our constructor gets 2 items, a Stage, and a MovieClip
        public function ScrollUI(stage:Object, pic:MovieClip)
        {
    //We set the Stage at the variable _mainStage with that way:
            _mainStage = (stage as MovieClip).stage;
    //We set the Image that we will take at our clip variable :
            var clip:MovieClip = pic;
    //And we send the Movieclip (clip) in our ScrollConstructor function
            ScrollConstructor(clip);
        }

        function ScrollConstructor(Clip:MovieClip):void
        {
            var aSp:ScrollPane = new ScrollPane();
            aBox = Clip;
            _mainStage.addChild(aBox);
            aSp.source = aBox ;
            aSp.setSize(300,300);
            aSp.move(150, 75); 
            aSp.scrollDrag = true;
            aSp.horizontalScrollPolicy=ScrollPolicy.OFF;
            aSp.verticalScrollPolicy=ScrollPolicy.OFF;
            _mainStage.addChild(aSp);
        }
    }

}

您也可以将滚动窗格的
.source
属性设置为图像的物理路径。

我找到了解决方案,感谢蝙蝠侠的帮助,我在代码中更改了一些内容,程序正在运行

首先,正如蝙蝠侠所说,在我的GenImage.fla中,我把这个标志做成了一个MovieClip,我把它命名为“wholemap”

这是我的密码:

GeneralImage.as

package  {

    import flash.display.*;
    import flash.events.*;
    import flash.display.Stage;
    import ScrollUI;


    public class GeneralImage extends MovieClip
    {

        public function GeneralImage()
        {
            var k = new ScrollUI();
            k.ScrollConstructor(this);

        }

    }

}
package  
{

    import flash.display.*;
    import flash.events.*;
    import fl.containers.ScrollPane; 
    import fl.events.ScrollEvent;
    import fl.controls.ScrollPolicy; 

    public class ScrollUI extends MovieClip
    {
        private var _mainStage:Stage;
        var aBox:MovieClip = new MovieClip(); 
        var aSp:ScrollPane = new ScrollPane();

        public function ScrollUI()
        {
        }

        function ScrollConstructor(stage:Object):void
        {
            _mainStage = (stage as MovieClip).stage;
            aBox == stage as MovieClip;
            aSp.source == aBox ;
            _mainStage.addChild(aBox);
            aSp.setSize(300,300);
            aSp.move(150, 75); 
            aSp.scrollDrag = true;
            aSp.horizontalScrollPolicy=ScrollPolicy.OFF;
            _mainStage.addChild(aSp);

        }
    }

}
package  
{

    import flash.display.Sprite;
    import fl.containers.ScrollPane; 
    import fl.events.ScrollEvent;
    import fl.controls.ScrollPolicy; 

    public class ScrollUI extends Sprite
    {
        //just declare the variables here, don't assign them new values
        private var aBox:MovieClip; 
        private var aSp:ScrollPane;

        public function ScrollUI()
        {
            //use the actual constructor...

            aSp = new ScrollPane(); //instantiate a new scroll pane
            addChild(aSp); //add the scroll pane to the display

            aBox = new MyImage(); //instantiate an new MyImage from the library
            //set the scroll pane properties
            aSp.source = aBox; //you had two = signs here before, which doesn't actually assign anything it compares
            aSp.setSize(300,300);
            aSp.move(150, 75); 
            aSp.scrollDrag = true;
            aSp.horizontalScrollPolicy=ScrollPolicy.OFF;

        }
    }

}
package  {

    import ScrollUI;


    public class GeneralImage extends MovieClip
    {

        public function GeneralImage()
        {
            var k:ScrollUI = new ScrollUI(); //create a new instance of the ScrollUI class
            addChild(k); //add the scrollUI object to the display;

            //OR, you just do this:
            //addChild(new ScrollUI());
        }

    }

}
package  {

    import flash.display.*;
    import flash.events.*;
    import flash.display.Stage;
    import ScrollUI;

    public class GeneralImage extends MovieClip
    {
//as Batman indicated, I should have used the ScrollUI constructor, but 
//except for the Stage, i also send the wholemap that is in my GenImage.fla
//<< this.getChildByName("wholemap") as MovieClip) >>
        public function GeneralImage()
        {
            var k = new ScrollUI(this, this.getChildByName("wholemap") as MovieClip); 
        }
    }

}
package  
{
    import flash.display.*;
    import flash.events.*;
    import fl.containers.ScrollPane; 
    import fl.events.ScrollEvent;
    import fl.controls.ScrollPolicy; 

    public class ScrollUI extends MovieClip
    {
        private var _mainStage:Stage;
        var aBox:MovieClip = new MovieClip(); 
    //So our constructor gets 2 items, a Stage, and a MovieClip
        public function ScrollUI(stage:Object, pic:MovieClip)
        {
    //We set the Stage at the variable _mainStage with that way:
            _mainStage = (stage as MovieClip).stage;
    //We set the Image that we will take at our clip variable :
            var clip:MovieClip = pic;
    //And we send the Movieclip (clip) in our ScrollConstructor function
            ScrollConstructor(clip);
        }

        function ScrollConstructor(Clip:MovieClip):void
        {
            var aSp:ScrollPane = new ScrollPane();
            aBox = Clip;
            _mainStage.addChild(aBox);
            aSp.source = aBox ;
            aSp.setSize(300,300);
            aSp.move(150, 75); 
            aSp.scrollDrag = true;
            aSp.horizontalScrollPolicy=ScrollPolicy.OFF;
            aSp.verticalScrollPolicy=ScrollPolicy.OFF;
            _mainStage.addChild(aSp);
        }
    }

}

非常感谢您的帮助,我希望如果其他人遇到此问题,能够用此答案解决此问题

您不能将swf的阶段设置为滚动窗格内容(因为它是您滚动窗格的父/母)。为什么你不能用Flash把图像做成电影剪辑?您的代码的当前结果是什么?我当前使用此代码的结果是背景中的图片和中间的滚动窗口。我可以制作电影剪辑,基本上我已经试过了,但结果是一样的我已经将基本阶段传递到了子类中我只需要将它放在scrollYour
ScrollUI
类扩展了MovieClip,难道你从来没有将它添加到显示中吗,您似乎只是试图将滚动窗格直接添加到舞台上。这似乎很奇怪。是
GeneralImage.as
您的文档类吗?是的,这是我的“主要”类非常感谢您的帮助,我发布了解决方案:)