ラジオボタンがあるステージからインスタンスを削除すると、インスタンスを再度作成すると、ラジオボタンが最後の選択を保持するため、ラジオボタンに問題があります。
(私はスペイン語でクラスを書きました。概念を特定するのに問題がある場合は、私に尋ねてください)
クラス ( crearPregunta.as または askQuestion.as )
package src.com.akkadian
{
import fl.controls.RadioButtonGroup;
import flash.display.DisplayObject;
import flash.display.MovieClip;
import flash.events.*;
import flash.events.MouseEvent;
import flash.net.*;
import flash.text.*;
import flash.utils.Timer;
import flash.xml.*;
import src.com.akkadian.manipularXML;
public class crearPregunta extends MovieClip
{
private static var _instance:crearPregunta = null;
private var xmlPath:String;
private var radioGroup1:RadioButtonGroup = new RadioButtonGroup("Questions");
private var xmlLoader:URLLoader = new URLLoader();
private var instanciaXML:manipularXML;
protected var time:Timer;
private var rs:String;
private var resp:XMLList;
private var re:XMLList;
private var pre:XMLList;
private var opSeleccionada:Number;
private var resultado:Boolean = false;
public function crearPregunta()
{
}
public static function getInstance():crearPregunta
{
if (_instance == null)
{
_instance = new crearPregunta();
}
return _instance;
}
private function generarContenido()
{
// Crea the XML instance from manipularXML class
this.instanciaXML = manipularXML.generarInstancia();
// Send the path of the file
this.xmlPath = "src/com/akkadian/preguntas.xml";
// Add the listener to proceed when the load is finished
xmlLoader.addEventListener(Event.COMPLETE, inXML);
xmlLoader.load(new URLRequest(this.xmlPath));
// adding a listener to the button sendResponse
enviarRespuesta.addEventListener(MouseEvent.CLICK, recibirRespuesta);
enviarRespuesta.buttonMode = true;
}
public function validarRespuesta(opcionSeleccionada:String):Boolean
{
// Option chosen
opSeleccionada = Number(opcionSeleccionada);
// Generate the content
generarContenido();
// Send the result
return resultado;
}
private function inXML(e:Event):void
{
// Add the radiobuttons to an Array
var radios:Array = [casoA, casoB, casoC];
// Obtain the data from the XML
var data = instanciaXML.obtenerInfo(e.target.data);
for each (var nodo:XML in data.pregunta)
{
if (nodo.@id == opSeleccionada)
{
// Keep the answer for the option chosen
resp = data.pregunta[opSeleccionada - 1].respuesta;
// Keep the value for the option chosen
re = data.pregunta[opSeleccionada - 1].respuesta.@valor;
// Keep the question
pre = data.pregunta[opSeleccionada - 1].@pre
// add the value of the question to the dinamic textfield
question.text = pre;
for (var u:uint = 0; u < radios.length; u++)
{
radios[u].group = radioGroup1;
radios[u].textField.multiline = true;
radios[u].textField.wordWrap = true;
radios[u].textField.width = 230;
radios[u].textField.height = 100;
radios[u].textField.autoSize = TextFieldAutoSize.LEFT;
// Add the answers to the labels
radios[u].label = resp[u];
// Add the answers to the values
radios[u].value = re[u];
}
}
}
}
private function recibirRespuesta(m:MouseEvent)
{
for each (var tre:XML in re)
{
// if the value of the answer is equal to the value stored
if (this.radioGroup1.selection.value == re)
{
// Save the result as true
this.resultado = true;
// Add the value of the answer to the textfield included on this Instance
result_txt.text = "Correcto";
}
else
{
// Save the result as false
this.resultado = false;
// Add the value of the answer to the textfield included on this Instance
result_txt.text = "Incorrecto";
}
}
// Add a function to create a timer
agregarTimer();
}
private function agregarTimer()
{
// Setup the timer
time = new Timer(1000, 1);
time.addEventListener(TimerEvent.TIMER_COMPLETE, cerrarTimer);
time.start();
}
private function cerrarTimer(t:TimerEvent)
{
// Just for information, I verify which are the instances that at present ran in the Main instance
Main.Instancia.obtenerNombreHijos();
// Remove the instance askQuestion from the Main
Main.Instancia.removeChildAt(2);
// I certify that the instance is deleted
Main.Instancia.obtenerNombreHijos();
// I change the instance of the xml class to null
instanciaXML = null;
}
}
}
結果:今何が起きている?
- ユーザーはトリビアを実行します。最初に、開始オプションを選択します (オプションのグリッドが作成されます)。
- ユーザーは 1 つのオプションを選択します ( askQuestion インスタンスが作成されます)。
- ユーザーがラジオボタンからオプションを選択すると (結果は result_txt.text に表示されます)
- タイマーが実行されます
- Main クラスからインスタンス ( askQuestion ) を削除します。
- ユーザーが別のオプションを選択した場合、質問と回答は正しく表示されますが、ラジオボタンは以前に選択されたオプションを保持し、result_txt.text はこの選択の結果を示します。選択を行う必要がないため、これは間違っています。
私はこれから別の状況を持っています.. 私はこれを持っています: 静的インスタンス a (ここではインスタンス c が作成されます) 静的インスタンス b (ここでは操作の結果です。このインスタンスは結果が取得されると削除されます) インスタンス c (結果は表示されます)インスタンスbからインスタンスcに情報を送信するには、インスタンスがインスタンスaで作成された場合にどうすればよいですか