..:: MX Studio Fóruns ::..: Fazer uma prova de simulado AS2 [RESOLVIDO] - ..:: MX Studio Fóruns ::..

Jump to content

Publicidade




ATENÇÃO

Para evitar posts desnecessários e que não influam para o andamento e desenvolvimento do fórum, clique aqui e leia todas as regras.
Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Fazer uma prova de simulado AS2 [RESOLVIDO]

#1 User is offline   Jose Ari Junior 

  • Group: Membros
  • Posts: 10
  • Joined: 15-March 10

Posted 11 December 2010 - 04:24 PM

olá pessoal, blz...

estou batendo cabeça co um projeto aqui, se alguem puder me ajudar...

estou fazendo um projeto tipo um simulado, com as questoes carregadas dentro de um movieclipe e do outro lado todas as opcoes de respostas.
eu fiz um clipe de filme com as letras A, B, C, D e E as letras sao tambem clipe pois ao clicar fica com um X no proximo frame e ao conferir as respostas nos proximos frames vai ficar verde se a resposta for certa ou vermelho se for errada.

estou batendo cabeca com o seguinte: eu carrego o movie e duplico tantas vezes for necessario:
totQuestoes = 15;
posX = 300;
poxY = 100;
for (i=1;i<=totQuestoes;i++) {

	posY=posY+35;
	duplicateMovieClip("/quest","quest"+i,i);
	setProperty("quest"+i,_x,posX);
	setProperty("quest"+i,_y,posY);
}

até aqui tudo bem, mas dentro dos movieclipes duplicados eu tenho o seguinte:
respA.onPress = respB.onPress = respC.onPress = respD.onPress = respE.onPress = function(){
	desmarcaTudo() //deseleciona tudo antes de selecionar a resposta
	this.gotoAndStop("marcada");
	trace(this._name);	
}


quanto à carregar as respostas corretas, nao tem problema, o que eu nao estou conseguindo é fazer para capturar o nome do movieclipe duplicado, pois la em cima ficou: quest1, quest2, quest3 ... quest15... o que eu peguei foi só o nome da letra clicada, no caso respA, respB, etc...

ai desse jeito nao dá pra saber qual a questao que foi clicada, somente a letra...

eu ja andei olhando no oráculo (google.. rsrs) mas o que eu encontrei foi muito quizz, mas nao serve pra mim

alguem tem alguma sugestao

This post has been edited by Jose Ari Junior: 11 December 2010 - 04:30 PM

0

#2 User is offline   RONYTORRES 

  • Group: Moderadores
  • Posts: 385
  • Joined: 07-December 06

Posted 13 December 2010 - 04:59 PM

Me diga uma coisa, esses movieclips das questões são carregador tudo na tela ao mesmo tempo e com relação aos botões de resposta, são apenas os 5 (A,B,C,D,E), em cada questão ou como funciona esses botões, serão duplicados também para cada questão? Não entendi isso direito, explica melhor, talvez eu possa te ajudar, pois desenvolvo muito esse tipo de atividade (Quiz), é bem próximo do que você precisa.
0

#3 User is offline   Jose Ari Junior 

  • Group: Membros
  • Posts: 10
  • Joined: 15-March 10

Posted 13 December 2010 - 10:53 PM

View PostRONYTORRES, on 13 December 2010 - 05:00 PM, said:

Me diga uma coisa, esses movieclips das questões são carregador tudo na tela ao mesmo tempo e com relação aos botões de resposta, são apenas os 5 (A,B,C,D,E), em cada questão ou como funciona esses botões, serão duplicados também para cada questão? Não entendi isso direito, explica melhor, talvez eu possa te ajudar, pois desenvolvo muito esse tipo de atividade (Quiz), é bem próximo do que você precisa.


cara é assim:
criei um mc com o nome respostas e instanciei ele como "quest". Dentro dele foi colocado mais 5 mc com as instancias respA, respB, respC, respD e respE. Eu criei movieclip pois tem 4 quadros cada um, ao clicar na primeira vez ele vai pro quadro 2 que fica a letra marcada com um X, se clicar novamente volta pro quadro 1 que corresponde a letra não marcada (sem o X). Os quadros 3 e 4 são pra mostrar ao usuario, quando fizer a verificacao das respostas, no quadro 3 mostra que a resposta foi correta (fica a letra com um verde no fundo), e no quadro 4 a resposta como errada (a letra com o quadro vermelho).

bem... ao inicar o filme eu duplico os mc "quest":
for (i=1;i<=_root.totQuestoes;i++) {

	posY=posY+35;
	duplicateMovieClip("/quest", "quest"+i, i);
	setProperty("quest"+i,_x,posX);
	setProperty("quest"+i,_y,posY);

	var c:MovieClip = this["quest"+i]
	c.respA.onPress = c.respB.onPress = c.respC.onPress = c.respD.onPress = c.respE.onPress = function(){
		c.desmarcaTudo(); //dentro tem essa funcao que retorna todos os 5 mc para o 1. frame
		c.gotoAndStop("marcaca"); //frame 2
		trace(this._name); //retorna o nome da letra que foi clicada.
	}
}
//aqui é que tá dando um erro... somente o ultimo botao é que funciona, os outros nao funcionam ...

entao o que eu quero... como foi criado varios mc´s (quest1, quest2, quest3, etc...)
queria que ao clicar em cada questX me retornasse o nome desse mc clicado, e dentro desse mc me retornasse em qual letra foi clicada.

eu até encontrei uma solucao, não é a mais ideal, só que pra isso eu criei 60 vezes (que é mais ou menos quantas questoes vai ser cada prova) a funcao de clique das respostas, que ficou assim:
function MarcaResposta(mc, t) {
	if (t._currentframe == 2) {
		t.gotoAndStop("desmarcada");
	} else {
		mc.desmarcaTudo();
		t.gotoAndStop("marcada");
	}
	questao = substring(mc,Length(mc),1);
	trace("q = " + questao + " => " + t._name); //me retorna a questao e em qual letra foi clicada
}

quest1.respA.onPress = quest1.respB.onPress = quest1.respC.onPress = quest1.respD.onPress = quest1.respE.onPress = function() {
	MarcaResposta(quest1, this);
}

quest2.respA.onPress = quest2.respB.onPress = quest2.respC.onPress = quest2.respD.onPress = quest2.respE.onPress = function() {
	MarcaResposta(quest2, this);
.
.
.

quest60.respA.onPress = quest60.respB.onPress = quest60.respC.onPress = quest60.respD.onPress = quest60.respE.onPress = function() {
	MarcaResposta(quest60, this);

}


o problema agora é comparar as respostas marcadas com o gabarito.
O gabarito está num array e vem de um xml:
var resultado = links.childNodes[1].childNodes[0].attributes.valor; //A;C;D;E;B;A;B;D;C;A;B;A;E;C
	gab_array = resultado.split(";");
	gab_length = gab_array.length;
	
	for(i=0;i<gab_length;i++){
		texto.htmlText += gab_array[i] + "<br>";
		//gab_array[i].gotoAndPlay("_off";
		//trace(gab_array[i]);
	}


pois é... quero saber como eu vou passar pelo palco por esses movieclipes duplicados, pegar o nome de cada um, ver qual mc que ta dentro dele está como marcado (frame 2) e comparar com a resposta do gabarito que tá no array.... :blink: :huh:
0

#4 User is offline   RONYTORRES 

  • Group: Moderadores
  • Posts: 385
  • Joined: 07-December 06

Posted 15 December 2010 - 08:47 AM

Bom dia! José Ari, baseado na sua explicação, fiz um esqueminha aqui e acho que deve ser o que você precisa.

//Vetor para identificar as alternativas.
var alternativas:Array = new Array("A","B","C","D");
//Vetor para armazenar as alternativas escolhidas.
var respostas:Array = new Array();
//Vetor com o gabarito, você pode fazer como estava querendo, criar ele a partir do xml.
var gabarito:Array = new Array("A","B","C","D","A","B","C","D","A","B","C","D","A","B","C","D","A","B","C","D") ;

//Laço que vai colocar no palco as questões de acordo o tamanho do gabarito.
for (i = 0; i<gabarito.length; i++) {
	//preencho o vetor respostas, com todos os índices, como nulo.
	respostas[i] = null;
	//carrego da biblioteca para o palco os movieclip de questões
	var Questoes:MovieClip = this.attachMovie("questao", "questao"+i, i);
	//Coloco no campo pergunta uma "descrição", você pode aqui, puxar isso de um XML, fica mais dinâmico.
	Questoes.pergunta.text = "Pergunta"+(i+1);
	//Crio uma propriedade "id" para o mc Questão, pois vou precisar saber esse valor qdo marcar a resposta na questão
	Questoes.id = i;
	//Aqui reduzi um pouco para caber no meu palco 800x600 as 20 questões, fica a seu critério
	Questoes._xscale = Questoes._yscale = 45;
	//Aqui faço o posicionamento das questões no eixo X, o valor 4 indica que vai ter  4 colunas, e eu pego o resto da divisão por 4
	//e posiciono o primeiro mc na posição 10 na coordenada X do palco, e com 10 pixel de distância entre uma questão e a próxima
	Questoes._x = (i%4)*(Questoes._width+10)+10;
	//A mesma coisa é feita com o posicionamento das questões no eixo Y, lembrando ainda que o valor 4, indica que vou ter 4 colunas
	//de perguntas, isso pode ser mudado e vc deixa da forma que achar mais conveniente.
	//Outra coisa, a distância entre os mc de questões, é controlada por esse valor 10 que estão dentro dos parenteses, tanto no Y, como
	//no X, o outro valor 10, corresponde onde eles iniciarão seu posicionamento no palco.
	Questoes._y = Math.floor(i/4)*(Questoes._height+10)+10;
	//Laço para identificar as alternativas de cada questão
	for (j = 0; j<alternativas.length; j++) {
		//crio para cada alternativa uma propriedade letra, que recebe o valor do vetor alternativas, vai servir para mim saber qual a letra que
		//eu selecionei naquela questão.
		Questoes["resp"+alternativas[j]].letra = alternativas[j];
		//crio também uma outra propriedade "id" que irá controlar qual item foi marcado para desmarcar os outros
		Questoes["resp"+alternativas[j]].id = j;
		//função onPress...rissss
		Questoes["resp"+alternativas[j]].onPress = function() {
			//Ao pressionar a alternativa, chamo a função MarcaResposta, passando alguns parâmetro, tipo:
			//a propriedade "id" da alternativa marcada;
			//a propriedade "id" da questão;
			//e a propriedade "letra" da alternativa marcada
			MarcaResposta(this.id, this._parent.id, this.letra);
		}
	}
}

//Função que fará o tratamento das alternativas marcadas em cada questão.
function MarcaResposta(resposta, pergunta, letraSelect) {
	//Laço para percorrer as alternativas da questão escolhida
	for (i=0; i<alternativas.length; i++) {
		//Testo se o valor i é diferente do parâmetro 'resposta (id da alternativa)', isso indica que, não sendo aquela alternativa clicada
		if (i != resposta) {
			//então, desmarque, ou seja, mando para o frame "desmarcado"
			_root["questao"+pergunta]["resp"+alternativas[i]].gotoAndStop("desmarcado");
		} else {
			//i sendo igual ao parâmetro resposta, então indica que eu cliquei naquela alternativa, considerando isso, mando para o frame "marcado"
			_root["questao"+pergunta]["resp"+alternativas[i]].gotoAndStop("marcado");
			//adiciono no vetor respostas, no índice correspondente a questão escolhida, a letra marcada.
			respostas[pergunta] = letraSelect;			
		}
	}
	//Na sequência, testo se todas as questões foram respondidas, chamado a função confereMarcadas que fará esse tratamento
	if (confereMarcadas()) {
		//Se foram todas marcadas, faço outro teste, para conferir, chamado a função confereSimulado que fará também o tratamento
		trace("SIMULADO COMPLETADO");
		if (confereSimulado()) {
			//Se estiver tudo certo, dou os parabéns, daqui pra frente fica por sua conta e risco.....risssss
			trace("PARABÉNS, VOCÊ ACERTOU TUDO");
		} else {
			//Senão, dou outro aviso, aqui também fica a seu critério, como vai dar sequência.
			trace("VOCÊ NÃO ACERTOU  TUDO");
		}
	} else {
		//Se o usuário ainda não completou todo o simulado, acho opcional ficar dando algum aviso, mas pra todo caso, fica aí uma opção
		//trace("Simulado incompleto");
	}
}

//Função de tratameto, para verificar se todas as questões foram respondidas
function confereMarcadas():Boolean {
	//variável de controle como true
	var certo = true;
	//laço que irá percorrer se o vetor respostas, tem algum índice com o valor nulo
	for (i = 0; i<gabarito.length; i++) {
		if (respostas[i] == null) {
			//Se encontrar algum valor nulo no vetor respostas, altera o valor da variável de controle como false
			certo = false;
		}
	}
	//Testa a variável de controle, se for true, retorna true, caso contrário retorna false
	if (certo) {
		return true;
	} else {
		return false;
	} 
}

//Função de tratamento, para verificar o resultado do simulado, essa função só é chamada se a função anterior retornar 'true'
function confereSimulado():Boolean {
	//variável de controle como true
	var certo = true;
	//laço vai verificar se as respostas são diferentes do gabarito.
	for (i = 0; i<gabarito.length; i++) {
		if (respostas[i] != gabarito[i]) {
			//se alguma resposta não for igual, altera o valor da variável de controle como false
			certo = false;
			//manda a timeline do mc resposta errada para o frame "errado"
			_root["questao"+i]["resp"+respostas[i]].gotoAndStop("errado");
		} else {
			//caso contrário, se for igual ao gabarito, mada a timeline do mc resposta para o frame "certo".
			_root["questao"+i]["resp"+respostas[i]].gotoAndStop("certo");
		}
	}
	//Testa a variável de controle, se for true, retorna true, caso contrário retorna false
	if (certo) {
		return true;
	} else {
		return false;
	} 
}
//========================================FIM======================================================


Deixei o código bem comentado para facilitar o entendimento

Se precisar dar uma olhada no FLA, pegue nesse link:

SIMULADO.FLA
0

#5 User is offline   Jose Ari Junior 

  • Group: Membros
  • Posts: 10
  • Joined: 15-March 10

Posted 16 December 2010 - 11:22 AM

cara, valeu é mais ou menos isso mesmo que eu quero...
já tinha tambem pensado em colocar o gabarito mesmo em array...
esse teu exemplo vai me ser bastante util... mas nao era bem assim as opcoes com as perguntas... as provas vou carregar numa janela, elas estavam em PDF e eu tive que converter pra swf, usei o flashpaper...e do lado de cada prova as opcoes de respostas numa outra janela...
mas esse seu exemplo ficou show... valew mesmo...
ainda nao vou fechar o topico, quando eu terminar de fazer o meu vou postar aqui
0

#6 User is offline   Jose Ari Junior 

  • Group: Membros
  • Posts: 10
  • Joined: 15-March 10

Posted 19 November 2011 - 04:24 AM

E ae Rony blz... eu consgui fazer o simulado pegando como exemplo seu arquivo, valew mesmo...
No CD ficou show de bola, agora eu criei uma versao pra web.
Agora me surgiu uma outra questão: no CD carrega instantaneo, beleza, agora na web algumas provas têm 1.2 megas e até algumas com 2MB
As provas eu usei o flaspaper pra converter de PDF pra SWF então nao tem como eu incorporar um loader dentro das provas.
Elas são carregadas dentro do palco principal com o loadMovie. Será que tem como eu fazer um "Aguarde... carregando..." pra esses arquivos que estao sendo carregados??

Dá uma olhada: http://www.unisfera....id=6&Itemid=164

mais uma vez, agradeço mesmo... (Coloquei até um crédito lá pra vc....)
0

#7 User is offline   IAMDIX 

  • Group: Membros
  • Posts: 39
  • Joined: 20-August 11

Posted 19 November 2011 - 10:01 AM

José,

aqui ta carregando bem rapido ,......minha net é 1 mega
0

#8 User is offline   Jose Ari Junior 

  • Group: Membros
  • Posts: 10
  • Joined: 15-March 10

Posted 21 November 2011 - 10:10 AM

View PostIAMDIX, on 19 November 2011 - 10:01 AM, said:

José,

aqui ta carregando bem rapido ,......minha net é 1 mega


cara, valew, depois que vc postou eu fui testar numa net menos veloz e percebi que os arquivos swf criados pelo flashpaper já vêm com esses loader... :lol:

a prova (leia-se o arquivo) vai aparecendo a medida que vai carregando, e ainda nao tinha notado isso... :rolleyes:

mas valew mesmo... agora ficou show.... :D :P
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic


Similar Topics Collapse

  Topic Forum Started By Stats Last Post Info
New Replies F 430
<br<br><br>Falta do que fazer
Galeria CDR Edu_Gaijutis 
  • 7 Replies
  • 7081 Views
New Replies Site ajuda a fazer retoques em fotografias Notícias Notícias 
  • 0 Replies
  • 354 Views
New Replies Ajuda para selecionar layout
Gostaria de uma ajuda com a escolha...
Avaliação Cl3m4 
  • 8 Replies
  • 1195 Views
New Replies Twitter prova que não é preciso ser jovem para ter sucesso Notícias Notícias 
  • 0 Replies
  • 150 Views
New Replies Form em Tabelas????
Espaço ao criar form dentro de uma....
Dreamweaver walter 
  • 3 Replies
  • 1097 Views
New Replies Ajuda Com Código - Alguem sabe fazer isso?
Como faz isso?
Dreamweaver Dawson Design 
  • 2 Replies
  • 400 Views
New Replies cfoutput cascateado
como fazer? (URGENTE)
ColdFusion victorhcf 
  • 4 Replies
  • 1144 Views
New Replies FORMULÁRIO QUE ENVIA DADOS PARA TXT...
Sei que é possível, mas não sei como fazer...........haeheah
PHP Márcio 
  • 1 Reply
  • 971 Views

Publicidade




1 User(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)