Текст кнопки отображается за счет того, какой ответ был нажат - PullRequest
0 голосов
/ 05 апреля 2011

Код работает нормально, но проблема, с которой я столкнулся, заключается в том, что текстовое поле, в котором предполагается использовать кнопки ответа, находится позади самой кнопки ... однако, если я изменю две строки кода вокруг, код подтверждения ответа не определяет, какой ответ был нажат (возвращается неопределенный). Это бесит!

Найдите строку "// ВСТАВЬТЕ ЗДЕСЬ." Если я возьму строку, "var answerField: TextField = createText (answer, answerFormat, answerSprite, 0,0,450);" и вместо этого, он возвращает правильные ответы (не возвращает неопределенный), но я больше не вижу текст. Я также включил функцию createText.

Идеи? * * 1005

    private function askQuestion()
    {
        trace("asking question...");

        // prepare new question sprite
        qBox = new QuestionBox();
        questionSprite = new Sprite();
        gameSprite.addChild(qBox);
        gameSprite.addChild(questionSprite);
        qBox.x = 240;
        qBox.y = 45;

        // create text field for question
        var question:String = dataXML.item[questionNum].question;
        questionField = createText(question,questionFormat,questionSprite,120,30,250);

        // create sprite for answers, get correct answer and shuffle all
        correctAnswer = dataXML.item[questionNum].answers.answer[0];
        trace("----" + correctAnswer + "----");
        answers = shuffleAnswers(dataXML.item[questionNum].answers);

        // put each answer into a new sprite with a circle icon
        answerSprites = new Sprite();

        for (var i:int=0; i<answers.length; i++)
        {
            trace("generating answers...");
            switch (i)
            {
                case 0 :
                    column = 135;
                    row = 150;
                    break;
                case 1 :
                    column = 135;
                    row = 260;
                    break;
                case 2 :
                    column = 340;
                    row = 150;
                    break;
                case 3 :
                    column = 340;
                    row = 260;
                    break;
            }
            var answer:String = answers[i];
            var answerSprite:Sprite = new Sprite();
            //INSERT HERE
            var button:Button = new Button();

            answerSprite.x = column;
            answerSprite.y = row;

            // make it a button;
            answerSprite.addChild(button);
            var answerField:TextField = createText(answer,answerFormat,answerSprite,0,0,450);
            answerSprite.addEventListener(MouseEvent.CLICK,clickAnswer);
            answerSprite.buttonMode = true;
            answerSprites.addChild(answerSprite);
        }
        trace("answers generated!");
        questionSprite.addChild(answerSprites);
        trace("question asked!");
        trace(":::awaiting user input:::");
    }

функция createText:

public function createText(text:String, tf:TextFormat, sprite:Sprite, x,y: Number, width:Number):TextField
    {
        var tField:TextField = new TextField();
        tField.x = x;
        tField.y = y;
        tField.width = width;
        tField.wordWrap = true;
        tField.multiline = true;
        tField.selectable = false;
        tField.defaultTextFormat = tf;
        tField.text = text;
        sprite.addChild(tField);
        return tField;
    }

Ответы [ 2 ]

0 голосов
/ 07 апреля 2011

Мне нужно было дать кнопке имя, а затем использовать это имя для идентификации кнопки.

0 голосов
/ 06 апреля 2011

Вы вставляете answerSprite.addChild(button); ПОСЛЕ того, как вы выполняете вызов этого метода.

Попробуй поставить это ВЫШЕ ВСТАВКУ ЗДЕСЬ, и все будет хорошо.

т.е.

        var answerSprite:Sprite = new Sprite();
        var button:Button = new Button();
        // make it a button;
        answerSprite.addChild(button);
        var answerField:TextField = createText(answer,answerFormat,answerSprite,0,0,450);
            answerSprite.x = column;
            answerSprite.y = row;
...