修改AS3中输入数据的类

时间:2015-04-23 11:34:13

标签: actionscript-3 class

请帮我创建一个修改输入数据的课程 例如将输入数字加倍:

主要时间表:

var n:Number=47;
DoublerClass.double(n);
trace(n); //I want 94 here!

班级:

package{
class DoublerClass{

public static function double(input:Number){
 //a code that doubles input at my main timeline

 }  //end function

}
}

TweenLite或其他同样的事情做我想要的。但是我看不懂那些长码或者我可能听不懂它们。

感谢您的帮助。

**编辑

我不想要一个 RETURNS 这个乘法值的班级 我想要一个直接修改的类。

5 个答案:

答案 0 :(得分:3)

要将值加倍,请将其乘以2.

package
{
   public class DoublerClass
   {
      public static function double(input:Number):Number
      {
         return 2 * input;
      }
   }
}

像这样使用

var n:Number = 47;
DoublerClass.double(n);
trace(DoublerClass.double(n)); //I want 94 here!

这将返回值。您无法通过引用传递n,因为它是a basic type and those are always passed by value in as3,这就是为什么您的函数无法修改时间轴上的变量n的原因。

  

在ActionScript 3.0中,所有参数都通过引用传递,因为所有值都存储为对象。但是,属于原始数据类型的对象(包括Boolean, Number ,int,uint和String)具有特殊的运算符,使它们的行为就像它们一样< strong>按值传递。

为了做到这一点,你必须将一个复杂的类型,比如一个对象传递给你的函数:

package
{
   public class DoublerClass
   {
      public static function double(input:Object):void
      {
         input.n *= 2;
      }
   }
}

允许你这样做

var object:Object = {n:47};
DoublerClass.double(object);
trace(object.n); //I want 94 here!

答案 1 :(得分:1)

主时间轴中的

表示:

var d:DoublerClass=new DoublerClass();
var n:Number=d.double(47);
trace(n);//94

并在DoublerClass.as中提出:

package{
    class DoublerClass{

public function DoublerClass():void{
}

public function double(input:Number):Number
{
 return input*2;

} 
}
}

答案 2 :(得分:1)

接受的答案是一个很好的选择,但实际上有一种方法可以“做你想做的事”:

虽然您无法通过引用从函数参数修改n因为基元是按值传递的,但您可以通过引用将n修改为公共属性;而不是传递值n,您传递父对象(通过引用传递)和属性名称"n"

function doubler(object:Object, property:String):void {
    object[property] *= 2;
}

用法:

var n:Number = 47;
doubler(this, "n");
trace(n); // 94

TweenLite就是这样做的。

答案 3 :(得分:0)

基于Null和Aaron答案的最佳答案(我感谢他们)。

public static function double(o:Object,n:Number){
  o.n*=2;}

在主时间轴:

var n:number=47;  
DoublerClass.double(this,n);
trace(n); //94

答案 4 :(得分:0)

TweenLite正在处理不具有原始数据类型的displayObject类。

显示对象传递对函数的引用。非原始数据类型具有更改原始变量值的能力。原始数据类型只能在函数内访问。

例如

//Timeline code
var xPos: Number = 100;
mc.x = 0;
DoublerClass.to(xPos, mc);

var _timer:Timer = new Timer(2000);
_timer.addEventListener(TimerEvent.TIMER, onTimerAction);
_timer.start();

function onTimerAction(e:TimerEvent):void{
    trace("Primitive datatype value: " + xPos);
    trace("MovieClip x pos : " + mc.x);
}

具有静态功能的DoublerClass'到'。

 package {
        import flash.display.MovieClip; 
        public class DoublerClass {     
            public static function to(xPos: Number, mc:MovieClip):void {
                //a code that doubles input;
                //it will not update the value because it is a primitive data type.
                xPos *= 2;
                //It will update the x position of the mc movieclip on the stage.
                mc.x = xPos;
            } //end function
        }
    }