注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

清风的博客

我为人人,人人为我。

 
 
 

日志

 
 

动态更新载入选择题  

2014-03-12 21:17:23|  分类: 【flash教程】 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
         目标:是做一个题目和答案能在flash外部更新的选择题,根据要求,能够随机更新10个题目,而且是不重复的更新;其次,在没有选择的时候给出错误提示,在选择了答案的时候,能给出正确的答案提示,这个就象是网页的动态更新一样。
        构思:能外部更新当然是用数据库最好了,可是我不会那么高级的flash操作,我就用了txt的更新,而且,貌似效果还不错,呵呵;那么随机怎么实现呢?当然是用radom()咯,不重复的更新就用数组了,这样的教程闪吧里面有大把,大家随便搜索就能找到,最后是怎么去操作的问题:我在文档里面用了两个按钮,不是同时出现,而是交替出现,一个是“提交”,一个是“next(下一题)”,“提交”负责侦测题目答案有没有被选,选了之后给出正确答案,“next”就进行更新,当选择做了10题(题目数量可以更换,但是,很可惜,我的水平只能做到在flash里面换,不怎么智能,呵呵)后给出结束提示。
        1、制作(由于我是在学flash两个月后做了这个文件,水平有限所以过程很复杂和繁琐,请见谅):
需要有好几个动态文本,一个用来链接题目,命名qq变量qq,四个用来链接答案命名aa,bb,cc,dd变量依次aa,bb.cc.dd,至于为什么要用双写不用单个字母,是因为你可以这样做好多个选择题的样本,比如q1,q2,q3,q4...这样就有了唯一的标示码,同理,a1,a2,a3,a4...也就可以对应于同一的题目了(q1对应的答案就是a1,b1,c1,d1),答案的命名rusult变量就用了rr,还有一个用来表示出错的动态文本(就是当没有选择题目答案时给提示的文本,不知道为什么我用单独的动态文本没有链接出来,所以我就用了MC,命名notice2,其中的动态文本我命名outtext,变量也是outtext,顺便提一下,有做另外两个notice的MC,“notice1”是刚开始时提示操作的,“notice”时结束时的提示),另外需要四个checkbox,分别命名A,B,C,D对应放在aa,bb,cc,dd前面,什么意思大家当然明白,嘿嘿,相关参数initial value=false,label placement=right,为了美观,我在checkbox后面重新写了ABCD的标签,因为用flash自带的我觉得小,然后把这四个字母做成一个叫select的MC,这样能控制最后没了题目字母能消失,最后就是前面说的两个按钮了“提交”命名answer,“next”命名next。
2、在时间轴第一帧写下如下代码:
stop();
system.usecodepage = true;//正确显示中文
fscommand("fullscreen", 1);//全屏显示
x = 12; //以下是随机数组,先定义题目的数量
array1 = new Array(); //按顺序存入array1
for (i=1; i<=x; i++) {
array1[i-1] = i;
}
array2 = new Array(); //打乱顺序,并存入另一个数组array2,现在每次按按钮只要顺序调用array2中的数据就可以了
m = x;
for (n=0; n<11; n++) {
j = random(m);
temp = array1[j];
array1[j] = array1[0];
array1[0] = temp;
array2[n] = array1.shift();
m--;
trace(array2[n]);
}
cl = 0; //存储点击次数的变量
setProperty(_root.A, _visible, 0);//定义开始时ABCD的checkbox不可见
setProperty(_root.B, _visible, 0);
setProperty(_root.C, _visible, 0);
setProperty(_root.D, _visible, 0);
setProperty(_root.answer, _visible, 0);//“提交”按钮不可见
setProperty(_root.select, _visible, 0);//有“ABCD”字母的MC不可见
setProperty(_root.notice, _visible, 0);//结束时的提示不可见
setProperty(_root.notice2, _visible, 0);//没有选择题目答案时的提示不可见
3、“next”按钮的代码:
on (release) {
setProperty(_root.next, _visible, 0);//“next”按钮不可见,就是点击了自己后,自己消失
setProperty(_root.answer, _visible, 1);//“提交”按钮可见
_root.A.setValue(0);//以下是txt的载入
_root.B.setValue(0);
_root.C.setValue(0);
_root.D.setValue(0);
myload = new LoadVars();// 载入语句
myload.load("/quize1.txt");//载入的txt文件名
myload.onLoad = function(ok) {
if (ok) {
qq = eval("myload.q"+_root.array2[_root.cl]);//载入随机的数字,这里是“q*”,*是通配符,就是q1,q2,q3或者q4,是随机算出来的结果
aa = eval("myload.a"+_root.array2[_root.cl]);//答案a载入的当然就是对应的“a*”了
bb = eval("myload.b"+_root.array2[_root.cl]);//b,c,d同上
cc = eval("myload.c"+_root.array2[_root.cl]);
dd = eval("myload.d"+_root.array2[_root.cl]);
rr = eval("myload.r"+_root.array2[_root.cl]);
}
if (_root.cl<_root.x) {
_root.cl++;//判断点击次数,cl在帧中已经定义了
}
if (_root.cl<12) {//当点击了小于12次,就是选了10个题目后,因为刚开始时next是可见的,所以点击11次实际是选了10个题目
setProperty(_root.answer, _visible, 1);
setProperty(_root.select, _visible, 1);
setProperty(_root.A, _visible, 1);
setProperty(_root.B, _visible, 1);
setProperty(_root.C, _visible, 1);
setProperty(_root.D, _visible, 1);
setProperty(_root.notice1, _visible, 0);
setProperty(_root.result, _visible, 0);
} else {
setProperty(_root.next, _visible, 0);
setProperty(_root.notice, _visible, 1);
setProperty(_root.select, _visible, 0);
setProperty(_root.answer, _visible, 0);
setProperty(_root.A, _visible, 0);
setProperty(_root.B, _visible, 0);
setProperty(_root.C, _visible, 0);
setProperty(_root.D, _visible, 0);
}
};
} (注意,这里每次做完一题,点击了提交后,next都可见,每次点击了next后他自身都会不可见,是为了方便再次进行随机并且不重复的运算)
4、“提交”按钮的代码:(注意,刚开始提交是不可见的,当点了next后才可见)
on (release) {
if (_root.A.getValue() == 0 && _root.B.getValue() == 0 && _root.C.getValue() == 0 && _root.D.getValue() == 0) {//if的判断语句,当ABCD都没有选择时给予提示
setProperty(_root.notice2, _visible, 1);
_root.notice2.outtext = "请正确选择答案";
_root.wrong = new sound(_root);//以下三句时声音的控制
_root.wrong.attachsound("wrong");
_root.wrong.start();
}
if (_root.A.getValue() == 1 || _root.B.getValue() == 1 || _root.C.getValue() == 1 || _root.D.getValue() == 1) {//当ABCD有一个被选时执行以下语句
setProperty(_root.result, _visible, 1);//给出答案语句
setProperty(_root.answer, _visible, 0);//“提示”按钮不可见了
setProperty(_root.next, _visible, 1);//“next”按钮此时可见了
_root.right = new sound(_root);
_root.right.attachsound("right");
_root.right.start();
}
}
5、最后,关于“quize1.txt”的制作,这一步也是很重要的,语法如下:
q1=题目1
&r1=题目1正确答案是:B
&a1=题目1答案A;
&b1=题目1答案B;
&c1=题目1答案C;
&d1=题目1答案D。
&q2=题目2:
&r2=题目2正确答案是:C
&a1=题目2答案A;
&b1=题目2答案B;
&c1=题目2答案C;
&d1=题目2答案D。
&q3=.......
需要注意的是,题目(也就是q*)的数量请多于10个,这样在随机的时候才不会出现空值,因为先前定义了选择题的数量,其次,除了q1前不用“&”外,都要用“&”,这个是用来判断一句话是否完结的标志,最后,注意不要多余的空格,除非你希望他出现在你的swf文档中。
当你成功后,你会发现,用动态文本做出来的文字会很难看,怎么办呢?需要在fla文档中对动态文本进行设置——格式化字符,在动态文本的变量旁边有个字符选项,你可以在里面指定格式化的范围,但是,格式化后swf文件会很大(中文字符太多了:( )!!也许你的fla文档只有不到200k而swf文档却有20M!怎么办呢??我也不知道,呵呵,这是个双刃剑~~
结束了,不知道大家有没懂呢?水平不足,请大家海涵,也希望有高手能更进一步修正,先大家去练吧,等几天我才发出我的源文件,因为实践是最好的老师,那么关于更新选择题我想现在就很清楚了,只需要在txt文档中更新文字就行了,哈哈,爽吧,可千万要小心出错哦,因为那玩意儿太细致了,我想对于我们男生不出这个错很难,当然,也可以在word里面编辑存为txt就行了,祝愿大家都能成功。
  评论这张
 
阅读(67)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017