【问题标题】:Access a integer variable through a separate Class通过单独的类访问整数变量
【发布时间】:2013-04-16 05:50:28
【问题描述】:

嘿伙计们,抱歉,如果这是一个重新发布,我通过其他网站以及这个网站检查了答案,但信息还不够,而且我还在学习很多东西。

但我的问题是我有一个名为 keepFocusEngine 的引擎类和另一个名为 mcStar 的类我没有遇到过这个问题,所以我不太明白该怎么做,但我想访问从mcStar 到我的keepFocusEngine 的整数变量。所以在我的mcStar 类中,我有一个名为private var speed:Number; 的整数变量,其中包含speed = 2 + Math.random()*2;。我想通过这个函数将速度变量从我的keepFocusEngine改成这个speed = 10 + Math.random()*2;

private function shootPlayerObject(e:TouchEvent):void 
    {
        if (e.type == TouchEvent.TOUCH_TAP)
        {
            btnShootPlayer = true;
        }else
        {
            btnShootPlayer = false;
        }
    }

所以如果btnShootPlayer = true; 我希望speed = 10 + Math.random()*2; 被调用。

对不起,如果我让任何人感到困惑,我有点困惑自己哈哈。 但是你明白我想要完成什么吗?

【问题讨论】:

  • 您将其命名为private,这意味着您无法在它处于私有状态时对其进行更改。如果你为你的飞船编写一个函数,在特定事件中调用它会更好,这反过来会改变它的速度。

标签: actionscript-3 class


【解决方案1】:

如果你想简洁地做到这一点,你可以在 keepFocusEngine 类中编写 getter/setter 函数。然后您可以将您的 speed 变量保留为私有。当然,getter 和 setter 必须是公开的,才能在类外联系到。

在您的keepFocusEngine 中,添加以下内容:

public function GetSpeed() : Number
{
    return speed;
}

public function SetSpeed(newspeed:Number)
{
    speed = newspeed;
}

然后您可以将您提供的代码更改为:

private function shootPlayerObject(e:TouchEvent):void 
{
    if (e.type == TouchEvent.TOUCH_TAP)
    {
        btnShootPlayer = true;
        keepFocusEngine.SetSpeed(10 + Math.random()*2);
    }else
    {
        btnShootPlayer = false;
    }
}

如果您想知道速度,可以使用keepFocusEngine.GetSpeed()。这使得编程更容易,因为您对类路径有一些了解。此外,当调用 getter 或 setter 时,您可以在该函数中做任何您想做的事情。例如,如果您总是返回 speed*10 似乎更容易,getter 可以return speed*10;

编辑:我想参考这个问题:Why prefer Properties to public variables?

【讨论】:

  • AS3 实际上支持真正的 getter 和 setter。 public function set varName( value:DataType ):void {}public function get varName():DataType {}
  • 感谢 Joetjah 的回复,今天晚些时候再试一试,让您知道它是否有效!
  • @Apocalyptic 你是什么意思“真正的”getter 和 setter?您的上述代码将如何工作?
  • @user2233653 您可以像访问普通变量一样访问它。所以...public function set varName( value:DataType ):void {}public function get varName():DataType {}ClassName。然后声明一个 ClassName 对象并像这样访问 varName:var obj:ClassName = new ClassName(); obj.varName = "test"。见Step 13 in this Article
  • @JoetJah 我尝试了你的方法,但我一直收到一个错误“可能通过静态类型类未定义的方法。我也不会把 getter/setter 放在 mcStar 类中吗?因为那是速度变量是?对不起,我想我把那个信息漏掉了。然后我会在 keepFocusEngine(); mcStar.SetSpeed(10 + Math.random()*2);
猜你喜欢
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多