Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash 如何在movieclip类中更改movieclips文本字段?_Flash_Actionscript 3_Actionscript - Fatal编程技术网

Flash 如何在movieclip类中更改movieclips文本字段?

Flash 如何在movieclip类中更改movieclips文本字段?,flash,actionscript-3,actionscript,Flash,Actionscript 3,Actionscript,我的图书馆里有一个叫做mcLeaderboarditem的电影剪辑。我已经为它生成了一个类来管理文本字段 最简单的方法是创建类的子类,并使用如下点语法(documentclass)管理内容属性: 这对我来说很容易,但我想管理类中的数据,这样我就可以向其中添加传统文本(前缀/后缀/操作)。 我已经创建了几个私有属性:rank、displayname和score,并在mcLeaderboardItem中使用documentClass的getter和setter来更改它们。 如果我在类中修改lblRa

我的图书馆里有一个叫做mcLeaderboarditem的电影剪辑。我已经为它生成了一个类来管理文本字段

最简单的方法是创建类的子类,并使用如下点语法(documentclass)管理内容属性:

这对我来说很容易,但我想管理类中的数据,这样我就可以向其中添加传统文本(前缀/后缀/操作)。 我已经创建了几个私有属性:rank、displayname和score,并在mcLeaderboardItem中使用documentClass的getter和setter来更改它们。 如果我在类中修改lblRank.text并对其进行跟踪,我会看到它确实修改了lblRank.text,但从编译器离开类的那一刻起,它将再次获取movieclip中标签的默认值。 除非我选择上面代码块中的解决方案。 mcLeaderboardItem类别的代码:

package com.cleversprite.memorygame.ui 
{

import flash.display.MovieClip;

public class mcLeaderboardItem extends MovieClip 
{

    //VARIABLES
    //------------------------------------------------
    private var _rank:int;
    private var _displayname:String;
    private var _score:int;


    //PROPERTIES
    //------------------------------------------------
    public function get rank():int
    {
        return _rank;
    }

    public function set rank(v:int):void
    {
        _rank = v;
    }

    public function get displayname():String
    {
        return _displayname;
    }

    public function set displayname(v:String):void
    {
        _displayname = v;
    }

    public function get score():int
    {
        return _score;
    }

    public function set score(v:int):void
    {
        _score = v;
    }


    //CONSTRUCTOR
    //------------------------------------------------
    public function mcLeaderboardItem() 
    {
        super();
        init();
    }

    public function init():void
    {

        lblRank.text = String(_rank);
        lblDisplayname.text= _displayname;
        lblScore.text= String(_score);

    }
}
有人知道我做错了什么吗? 也许会因为疲劳而变得愚蠢。 或者有没有其他方法来做我想做的事


Thanx提前。

您正在从类构造函数调用
init
,这意味着它在您的任何数据变量有机会被设置之前运行并设置所有文本字段(通过从父类调用setter)。所以它只是将所有文本字段的文本设置为空

所以,
您可以在setter中为该项目的相应文本字段设置文本,或者在
mcleadboarderItem
上设置数据后从父类调用init

大概是这样的:

var leaderBoard:mcLeaderboardItem = new mcLeaderboardItem();
leaderBoard.rank = someRank;
leaderBoard.displayname = someName;
leaderBoard.init();
addChild(leaderBoard);

如果您希望setter在每次调用时更改文本字段,那么仅在
init
中设置一次文本是不够的。您必须在每个setter中设置文本。像这样重写您的类应该可以:

public class mcLeaderboardItem extends MovieClip 
{
    public function mcLeaderboardItem() 
    {
       // These will set the initial text of the text fields now.
       rank = 0;
       displayname = "Default";
       score = 0;
    }

    public function get rank():int
    {
        return (lblRank.text as int);
    }

    public function set rank(v:int):void
    {
        lblRank.text = v;
    }

    public function get displayname():String
    {
        return lblDisplayname.text;
    }

    public function set displayname(v:String):void
    {
        lblDisplayname.text = v;
    }

    public function get score():int
    {
        return (lblScore.text as int);
    }

    public function set score(v:int):void
    {
        lblScore.text = v;
    }
}

你的documentclass看起来像什么?你有一个
stop()在其中,以便代码只运行一次?通常,当你改变一个值时,它不应该仅仅切换回原来的值……我不确定这个问题。设置
排名
显示名称
得分
属性时,是否希望文本字段更新?@code确实,这是我想做的。出于某种原因,他总是将其设置为默认值,除非我像上面第一个代码块那样编写代码。@pkyeck我的documentclass中的代码看起来像我问题中的第一个代码块。Soo,如下所示:
var-leaderItem:mcLeaderboardItem=new-mcLeaderboardItem();leaderItem.lblBank.text=“第二”;addChild(leaderItem)THx以获取帮助,伙计。目前,我自己已经找到了一个解决方案,在我的DocumentClass中设置属性后执行init函数。也许你的解决方案更有效。稍后我会尝试。Cadin和我的解决方案之间的功能区别在于,在更改排行榜后,您只需调用
init
函数(也许应该称为
update
)。使用任何你觉得舒服的!Init()是我总是在构造函数中调用的基本方法。因此,在我看来,创建另一个函数updateData()很不错;-)我可能会给我的选举人发电子邮件,想知道他希望我做什么(他给我分数,这样他的意见就是法律;-))小心使用公共初始化功能;构造函数是用来填补这个角色的。另外,在将来,如果您的问题是针对某个类的,请确保用“家庭作业”标记它。是的,我已将init函数设置为私有,并使用updateFields()方法更新字段。“家庭作业”标签在哪里?我不明白“家庭作业”和classesHi有什么关系,谢谢你的回答。但我早就知道了,因为有人跟你说了同样的话。干杯如果答案正确,你仍然应该接受其中一个答案。或者发布你自己的答案并接受它。这可能对将来的其他人有所帮助。
public class mcLeaderboardItem extends MovieClip 
{
    public function mcLeaderboardItem() 
    {
       // These will set the initial text of the text fields now.
       rank = 0;
       displayname = "Default";
       score = 0;
    }

    public function get rank():int
    {
        return (lblRank.text as int);
    }

    public function set rank(v:int):void
    {
        lblRank.text = v;
    }

    public function get displayname():String
    {
        return lblDisplayname.text;
    }

    public function set displayname(v:String):void
    {
        lblDisplayname.text = v;
    }

    public function get score():int
    {
        return (lblScore.text as int);
    }

    public function set score(v:int):void
    {
        lblScore.text = v;
    }
}