Actionscript 3 如何引用现有变量而不创建新变量?
我不知道该怎么问这个问题 我有一个变量Actionscript 3 如何引用现有变量而不创建新变量?,actionscript-3,flash,actionscript,cs3,Actionscript 3,Flash,Actionscript,Cs3,我不知道该怎么问这个问题 我有一个变量 public static var MaxDurabilityTestItem:Number = 3; 我有一个函数 public static function setItemInSlot(Item:String, Slot:Number, MaxDurability:Number = 0) { UI_Taskbar_Inventory.InventoryItems[Slot] = Item; if(M
public static var MaxDurabilityTestItem:Number = 3;
我有一个函数
public static function setItemInSlot(Item:String, Slot:Number, MaxDurability:Number = 0)
{
UI_Taskbar_Inventory.InventoryItems[Slot] = Item;
if(MaxDurability == 0)
{
trace("Before change " + UI_Taskbar_Inventory.InventoryDurability);
UI_Taskbar_Inventory.InventoryDurability[Slot] = "MaxDurability" + Item;
trace("After change " + UI_Taskbar_Inventory.InventoryDurability);
}
else
{
trace("not using default durability");
}
}
这个函数中唯一让我头疼的部分就是这一行
UI_Taskbar_Inventory.InventoryDurability[Slot] = "MaxDurability" + Item
它输出
更改前0,0,0,0,0,0,0,0,0
更改0后,MaxDurabilityTestItem为0,0,0,0,0,0
而我希望它输出
更改前0,0,0,0,0,0,0,0,0
更改0,3,0,0,0,0,0,0,0后
我知道这个问题,但我不知道如何解决它“MaxDurability”+项
生成一个名为MaxDurabilityTestItem
的字符串,而不是引用我的变量MaxDurabilityTestItem
如何更改它,使其引用变量MaxDurabilityTestItem,而不是它创建的字符串
“MaxDurability”+项
生成一个名为MaxDurabilityTestItem
的字符串
因为您使用引号自动定义了一个“字符串”
。我只能假设项
也是带有文本的字符串“TestItem”
。因此,您只需将两个字符串连接在一起
(二)
…而不是引用我的变量MaxDurabilityTestItem
试试看:
UI_Taskbar_Inventory.InventoryDurability[Slot] = MaxDurabilityTestItem; //now using your defined variable
编辑:
以防万一,您确实想使用字符串作为变量本身的引用:
使用此[“某个变量的名称”]。。。其中,此
将以当前类为目标,[“name”]
将在当前类中找到此类指定变量
尝试:
“MaxDurability”+项
生成一个名为MaxDurabilityTestItem
的字符串
因为您使用引号自动定义了一个“字符串”
。我只能假设项
也是带有文本的字符串“TestItem”
。因此,您只需将两个字符串连接在一起
(二)
…而不是引用我的变量MaxDurabilityTestItem
试试看:
UI_Taskbar_Inventory.InventoryDurability[Slot] = MaxDurabilityTestItem; //now using your defined variable
编辑:
以防万一,您确实想使用字符串作为变量本身的引用:
使用此[“某个变量的名称”]。。。其中,此
将以当前类为目标,[“name”]
将在当前类中找到此类指定变量
尝试:
我需要在这里说的第一件事是,尽管下面描述的所有工作都很好,但诉诸此类技术可能表明项目架构存在一些深层次的问题。那么 ActionScript 3的美丑在于,从字面上看,任何东西都是其中的一个对象,你可以这样处理任何实例 任何类实例都是对象。您可以将任何显示对象x和y分别命名为['x']和['y']。您可以采用相同的方法处理方法:
function gotoAnd(frame:*, thenPlay:Boolean):void
{
// Forms 'gotoAndPlay' or 'gotoAndStop' string.
var methodName = 'gotoAnd' + (thenPlay? 'Play': 'Stop');
// Gets method reference to either gotoAndPlay or to gotoAndStop.
var methodItself:Function = this[methodName];
// Calls method by the reference.
methodItself(frame);
// In one line:
// this['gotoAnd' + (thenPlay? 'Play': 'Stop')](frame);
}
任何类都是对象。微妙的区别在于,作为对象的类的成员是静态类方法和字段。例如:
import flash.system.System;
// Accepts "free" or "private" or "total" as an argument.
function getMemory(value:String = "total"):Number
{
var propertyName:String;
switch (value)
{
case "private":
propertyName = "privateMemory";
break;
case "free":
propertyName = "freeMemory";
break;
case "total":
propertyName = "totalMemoryNumber";
break;
// Returns -1 for an invalid argument.
default:
return -1;
break;
}
// Returns either System.privateMemory
// or System.freeMemory or System.totalFreeMemory.
return System[propertyName];
}
同样,静态类方法是作为对象的类的函数成员:
// Direct method access.
System.gc();
// Property-based method access.
System['gc']();
请记住,[]访问仍然尊重私有、内部和受保护的命名空间,因此如果您无法访问SomeObject.someMethod(),因为该方法标记为私有,您也将无法通过SomeObject['someMethod']访问它。前者会给你一个编译时错误,后者会让你编译你的应用程序,然后让你处理运行时异常。我需要在这里说的第一件事是,尽管下面描述的一切都很好,诉诸此类技术可能表明项目架构存在一些深层次的问题。那么 ActionScript 3的美丑在于,从字面上看,任何东西都是其中的一个对象,你可以这样处理任何实例 任何类实例都是对象。您可以将任何显示对象x和y分别命名为['x']和['y']。您可以采用相同的方法处理方法:
function gotoAnd(frame:*, thenPlay:Boolean):void
{
// Forms 'gotoAndPlay' or 'gotoAndStop' string.
var methodName = 'gotoAnd' + (thenPlay? 'Play': 'Stop');
// Gets method reference to either gotoAndPlay or to gotoAndStop.
var methodItself:Function = this[methodName];
// Calls method by the reference.
methodItself(frame);
// In one line:
// this['gotoAnd' + (thenPlay? 'Play': 'Stop')](frame);
}
任何类都是对象。微妙的区别在于,作为对象的类的成员是静态类方法和字段。例如:
import flash.system.System;
// Accepts "free" or "private" or "total" as an argument.
function getMemory(value:String = "total"):Number
{
var propertyName:String;
switch (value)
{
case "private":
propertyName = "privateMemory";
break;
case "free":
propertyName = "freeMemory";
break;
case "total":
propertyName = "totalMemoryNumber";
break;
// Returns -1 for an invalid argument.
default:
return -1;
break;
}
// Returns either System.privateMemory
// or System.freeMemory or System.totalFreeMemory.
return System[propertyName];
}
同样,静态类方法是作为对象的类的函数成员:
// Direct method access.
System.gc();
// Property-based method access.
System['gc']();
请记住,[]访问仍然尊重私有、内部和受保护的命名空间,因此如果您无法访问SomeObject.someMethod(),因为该方法标记为私有,您也将无法通过SomeObject['someMethod']访问它。前者会给你一个编译时错误,后者会让你编译你的应用程序,然后让你处理运行时异常。静态属性是类的属性。您可以通过类引用来解决它:ClassReference[StaticPropertyName]。如果您的类名是MyClass,那么它将是MyClass['MaxDurabilityTestItem']。为什么
“MaxDurability”+项
?该项目
是否可能更改?是,项目将更改。此函数用于为项目所在的插槽设置项目的耐久性。@我意识到我的问题已得到回答,但要扩展ClassReference[StaticPropertyName]部分,如何为函数执行此操作?我尝试了ItemHandling[Item+“Effect”];-但是(1)它不起作用,(2)我不知道把括号放在哪里——如果你真的想这样做的话。(本例中函数名为TestItemEffect)@UnAlpha好的,我在下面发布了一些解释。Static属性是类的属性。您可以通过类reference来解决它