2015-04-23 36 views
0

请帮我做一个修改输入数据的类。
例如双打输入的号码:修改AS3中输入数据的类

主要时间表:

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的或其他同样的事情做我想做的。但我无法阅读那些长码或者我可能不了解它们。

我感谢您的帮助。

**编辑

我不想一类退货乘积值。
我想要一个可以直接修改的类。

+1

这里您的目标是什么?为什么你想在一个函数中做这个,而不是简单地使用'* 2'? – null

+0

不需要大喊,真的。我怀疑这不是你的目标,而是要求它。你能否提供这些信息?你想修改什么号码,为什么?提供一些背景。 – null

+0

[as3如何通过类更改数字?]的可能重复(http://stackoverflow.com/questions/25968898/as3-how-to-change-a-number-by-a-class) – null

回答

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中,所有参数都是通过引用传递的,因为所有值均以对象形式存储。但是,属于的对象包含布尔型,号码,int,uint和String的原始数据类型具有特殊运算符,这些运算符使它们的行为看起来像通过值传递。

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

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! 
+0

你的回答很好,是我想要的。非常感谢你,对我的愤怒再次抱歉 – HITMAN

+0

@HITMAN不用担心,很高兴我可以帮忙=) – null

+0

编辑的代码适合我,并且更容易,更好,但如果你不喜欢不需要,不管;) – HITMAN

1

主时间轴把这个:

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

和在DoublerClass。为把这个:

package{ 
    class DoublerClass{ 

public function DoublerClass():void{ 
} 

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

} 
} 
} 
+0

没有我的朋友,我自己可以这样做 – HITMAN

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的是怎么做的。

+0

是的,这是我想要的。也谢谢你! – HITMAN

+0

@HITMAN您是否看到这与您在编辑中提出的建议不同? 'object.property'在这里不起作用,还要注意函数参数'property'的类型是'String'。 [括号有许多不同的用途,如你所见](http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/operators.html#array_access) – null

+0

为什么不行?如果它不起作用,为什么它适合我? – HITMAN

0

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

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

在主时间轴:

​​
0

TweenLite的是处理displayObject的类不与原始数据类型。

Display object传递函数的引用。非原始数据类型有能力更改原始变量值。原始数据类型只能在函数内访问。

例如

//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 
     } 
    }