Как изменить текстовые поля movieclips из класса movieclip? - PullRequest
0 голосов
/ 23 декабря 2011

В моей библиотеке есть мувиклип с именем mcLeaderboarditem.Я создал класс для управления текстовыми полями.

Самый простой способ - создать дочерний элемент класса и управлять свойствами содержимого с помощью синтаксиса с точкой следующим образом (documentclass):

var leaderItem:mcLeaderboardItem = new mcLeaderboardItem();
leaderItem.lblRank.text = "2nd";
addChild(leaderItem);

Это облегчит мне задачу,но я хочу управлять данными в классе, чтобы я мог добавить дополнительный текст к нему (префикс / суффикс / манипуляции).Я создал несколько приватных свойств: rank, displayname и score и изменил их, не используя documentClass с помощью методов получения и установки в mcLeaderboardItem.Если я изменяю lblRank.text в классе и отслеживаю его, я вижу, что он изменил lblRankt.text, но с того момента, как компилятор выходит из класса, он снова принимает значение метки по умолчанию в мувиклипе.Если только я не выберу решение в блоке кода выше.Код класса 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);

    }
}

Кто-нибудь видит, что я делаю неправильно?Вероятно, это будет что-то глупое из-за усталости.Или есть другой способ сделать то, что я пытаюсь сделать?

Спасибо заранее.

Ответы [ 2 ]

0 голосов
/ 24 декабря 2011

Если вы хотите, чтобы установщики изменяли текстовые поля при каждом вызове, недостаточно просто установить текст один раз в пределах init. Вы должны будете установить текст в каждом сеттере. Переписать ваш класс, как это должно работать:

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;
    }
}
0 голосов
/ 23 декабря 2011

Вы вызываете init из конструктора класса, что означает, что он запускается и устанавливает все текстовые поля, прежде чем какая-либо из ваших переменных данных получит возможность установить (вызывая сеттеры из родительского класса). Так что это просто установка текста для всех этих текстовых полей на ноль.

Итак,
Вы можете либо установить текст для соответствующего текстового поля внутри установщика для этого элемента, либо просто вызвать init из родительского класса ПОСЛЕ того, как вы установили данные для mcLeaderboardItem.

Примерно так:

var leaderBoard:mcLeaderboardItem = new mcLeaderboardItem();
leaderBoard.rank = someRank;
leaderBoard.displayname = someName;
leaderBoard.init();
addChild(leaderBoard);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...