请帮我创建一个修改输入数据的课程 例如将输入数字加倍:
主要时间表:
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 这个乘法值的班级 我想要一个直接修改的类。
答案 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
}
}