我在Toolbar.as中有这段代码:
var money = 9999;
argent.text = String(money);
trace(money);
我该怎么说
if (money < 0){
callFunction();
}
?
非常感谢您的回答
修改
我已经尝试了一切。
这就是我的所作所为:
var money:int = 9999;
argent.text = money.toString();
trace(money);
stageRef.addEventListener("checkingMoney", checkMoney, false, 0, true);
我已经添加了EventListner以便检查钱(因为没有任何东西在触发条件,如果之前有钱&lt; 0)。
然后:
public function checkMoney(event):void{
var money;
trace("checking");
if (parseInt(money) < 0){
trace("dangerous");
}
}
因此功能被很好地触发(跟踪“检查”打开),但即使数字小于0(-4600),跟踪“危险”也不会出现.. 我不明白。
答案 0 :(得分:1)
您需要了解数据类型的工作原理。它在所有基于OOP的语言中的工作方式类似,因此不需要特定于AS3的文章。但是,避免任何关于PHP数据类型的内容。
但是,对于你发布的内容,你做错了一些事情。
首先,每个对象(无论是变量,函数还是类),应始终具有声明的数据类型。如果你这样做,你的应用程序运行速度会稍微快一些,并且编译器警告的可能性就会降低。
所以
var money = 9999;
应该是
var money:int = 9999; // could also use Number (AS3's float) or uint
你也应该避免像String(money)
这样的强硬派。这可能很慢并且可能导致错误。要将Number
投射到String
,您应该始终使用Number.toString()
,因为这是其预期目的,我相信它已经过优化,而其他投射类型则没有。
if (money < 0)
实际上是正确的。它可能一直在抛出IDE警告,因为您没有设置money
的类型。如果您需要比较数字String
值,则需要使用Number(var)
将其强制转换为数字。请注意,将String
转换为Number
是您想要使用强硬转换DataType(object)
而非软转换(object as DataType
)的少数几次之一。
答案 1 :(得分:1)
我没有遇到问题。
所有money
变量中的第1个缺少类型。
如果这里的钱是int
而不是:
var money:int = 9999;
argent.text = money.toString();
trace(money);
if (money < 0){
callFunction();
}
这应该有用。
如果由于某种原因,这里的钱是String
而不是:{
var money:String =“9999”;
argent.text = money;
迹(钱);
if (Number(money) < 0){
callFunction();
}
答案 2 :(得分:0)
我通常不会这样做,但我发布了第二个答案,因为您的编辑与您最初发布的内容完全不同。为了将来参考,请发布相关的整个代码。你似乎最初错过了一些上下文并迫使我们解决了错误的问题(不要误解我的意思,它仍然需要修复,但这不是手头的问题)
所以你看到的是一个范围问题。基本上,在对象中声明的对象(可以是Class
,Function
,循环或条件)仅在该对象内和子对象内可用。此外,在类的顶级范围内声明的所有对象必须具有访问修饰符(public
,private
,{{1} },internal
等。)
所以让我们假设这个类结构:
protected
构造函数(public class ClassName {
public function ClassName();
public function checkMoney();
}
)中声明的对象在ClassName()
中不可用。所以你需要做两件事之一:
在顶级范围内声明对象:
checkMoney()
或将对象传递给函数:
public class ClassName {
private var money:int;
public function ClassName(){
money = 9999;
checkMoney()
}
public function checkMoney() {
// you now have access to money
}
}