如何从这个类中调用其中一个函数?

时间:2012-07-27 08:42:52

标签: actionscript-3 flash class

我想把功能称为“ nextMenu ”&来自Main.as的此类中的“ prevMenu ” 但我收到错误 1136:参数数量不正确。预期1。 可以帮我看看我在代码上遗漏了什么吗?

CategoryScroller.as

package com.theflashfactor.carouselStackGallery.categoryMenu
{
    import com.greensock.TweenMax;
    import com.greensock.easing.Quint;
    import com.theflashfactor.utils.Ref;

    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.geom.Rectangle;

    /**
     * Scroller to switch view for category item if there are more than visibleItem available 
     * @author Rimmon Trieu
     */
    public class CategoryScroller extends Sprite
    {
        private var trackLength:int = 400;
        private var scrubber:Sprite;
        private var track:Shape;
        private var categoryMenu:CategoryMenu;
        private var trans:Sprite;
        private var center:Number;

        public function CategoryScroller(categoryMenu:CategoryMenu)
        {
            this.categoryMenu = categoryMenu;
            buttonMode = true;
            initialize();
        }

        /**
         * Draw elemnt scrubber and track 
         */
        private function initialize():void
        {
            trans = new Sprite();
            trans.graphics.beginFill(0, 0);
            trans.graphics.drawRect(0, 0, trackLength, 13);
            trans.graphics.endFill();
            trans.addEventListener(MouseEvent.MOUSE_DOWN, transMouseDown, false, 0, true);
            addChild(trans);

            // Draw track
            var color:uint = uint(Ref.getInstance().getRef("categoryCircleColor"));
            track = new Shape();
            track.graphics.lineStyle(1, color);
            track.graphics.lineTo(trackLength, 0);
            track.y = 6;
            addChild(track);

            // Draw scrubber
            scrubber = new Sprite();
            scrubber.graphics.beginFill(color);
            scrubber.graphics.drawRect(0, 0, 80, 13);
            scrubber.graphics.endFill();
            center = (trackLength - scrubber.width) >> 1; 
            scrubber.x = center;
            addChild(scrubber);

            // Add dragging functionality
            scrubber.addEventListener(MouseEvent.MOUSE_DOWN, scrubberMouseDown,false,0,true);
        }

        private function transMouseDown(event:MouseEvent):void
        {
            stage.addEventListener(MouseEvent.MOUSE_UP, stageMouseUpHandler,false,0,true);
            TweenMax.killTweensOf(scrubber);
            categoryMenu.preTransition();
            if (mouseX > width - scrubber.width) scrubber.x = (width - scrubber.width); else scrubber.x = mouseX;
        }

        /*private function transMouseUp(event:MouseEvent):void
        {
            stage.removeEventListener(MouseEvent.MOUSE_UP, stageMouseUpHandler);
            checkPosition();
        }*/

        private function scrubberMouseDown(event:MouseEvent):void
        {
            event.stopImmediatePropagation();
            TweenMax.killTweensOf(scrubber);
            scrubber.startDrag(false, new Rectangle(0, 0, trackLength - scrubber.width, 0));
            stage.addEventListener(MouseEvent.MOUSE_UP, stageMouseUpHandler,false,0,true);
            categoryMenu.preTransition();
        }

        private function stageMouseUpHandler(event:MouseEvent):void
        {
            stage.removeEventListener(MouseEvent.MOUSE_UP, stageMouseUpHandler);
            scrubber.stopDrag();
            checkPosition();
        }

        private function checkPosition():void
        {
            var targetX:Number = (trackLength - scrubber.width) >> 1; 
            if (scrubber.x > (center + 20)) categoryMenu.postTransition(1); 
                else
            if (scrubber.x < (center - 20)) categoryMenu.postTransition(-1);
                else 
                categoryMenu.postTransition(0);
            TweenMax.to(scrubber, .5, {x:targetX, ease:Quint.easeOut, overwrite:1});
        }

        public function nextMenu():void
        {
            categoryMenu.postTransition(1);
        }

        public function prevMenu():void
        {
            categoryMenu.postTransition(-1);
        }
    }
}

我已经在我的Main.as中插入了以下代码来调用我无法获得成功的函数。

import com.theflashfactor.carouselStackGallery.categoryMenu.CategoryScroller;
private var categoryScroller:CategoryScroller = new CategoryScroller();
categoryScroller.nextMenu();

Main.as

package 
{
    import com.theflashfactor.carouselStackGallery.CarouselStackGallery;
    import com.theflashfactor.carouselStackGallery.categoryMenu.CategoryMenu;
    import com.theflashfactor.carouselStackGallery.categoryMenu.CategoryScroller;

    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.geom.Rectangle;

    import org.casalib.events.LoadEvent;
    import org.casalib.load.DataLoad;

    /**
     * Main document class 
     * @author Rimmon Trieu
     */
    [SWF(frameRate="60", backgroundColor="0", pageTitle="3D Carousel Stack Gallery")]
    public class Main extends Sprite 
    {
        private var xmlPath:String = "../xml/Main.xml";
        private var ts3:Sprite = new Sprite;
        private var categoryMenu:CategoryMenu = new CategoryMenu();
        private var categoryScroller:CategoryScroller = new CategoryScroller();

        public function Main()
        {
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;
            addEventListener(Event.ADDED_TO_STAGE, addToStage);
        }

        private function addToStage(event:Event):void
        {
            removeEventListener(Event.ADDED_TO_STAGE, addToStage);
            var xmlLoad:DataLoad = new DataLoad(xmlPath);
            xmlLoad.addEventListener(LoadEvent.COMPLETE, xmlLoaded);
            xmlLoad.start();

            ts3.graphics.beginFill(0x555555,1);
            ts3.graphics.drawCircle(0, 0, 50);
            ts3.graphics.endFill();
        }

        private function xmlLoaded(event:LoadEvent):void
        {
            event.target.removeEventListener(LoadEvent.COMPLETE, xmlLoaded);
            opaqueBackground = uint(event.target.dataAsXml.settings.@backgroundColor);
            var gallery:CarouselStackGallery = new CarouselStackGallery(event.target.dataAsXml);
            addChild(gallery);

            addChild(ts3);
            ts3.addEventListener(MouseEvent.MOUSE_DOWN, ts3MouseDown,false,0,true);
        }

        private function ts3MouseDown(event:MouseEvent):void
        {
            categoryScroller.nextMenu();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

按照定义:

public function CategoryScroller(categoryMenu:CategoryMenu)
{
  ...

类构造函数不应该期望参数吗?

private var categoryScroller:CategoryScroller = new CategoryScroller();