Animate制作拖拽多选填空题

写在前面

感谢这两篇文章救了老命,虽然之前从来没用过Animate,靠第一篇学会了怎么用,靠第二篇解决了下一个问题。

  1. Animate/Flash如何制作拖拽填空题(AS3)
  2. Flash 拖放实例_cnicfhnui的博客-CSDN博客_flash拖拽实例

问题描述

需要做一个填空题,将选项拖拽到对应的目标下


最初展示图

希沃白板

首先想通过最简单的方法,利用希沃白板。可惜希沃白板可提供功能非常简陋,超级分类看似符合要求,然而希沃白板中的超级分类是将答案像丢垃圾一样丢进对应的项目上,并且对选项的边框形状无法自定义。还有一个很麻烦的问题是将ppt导入希沃白板中,ppt的格式会发生很大变化,尤其有特殊字体,特殊字体无法导入。
而使用希沃白板进行排版,远不如在slide插件加持下的Powerpoint使用舒服,况且ppt已经做好,只差这一个内容未完成,动画只占1页篇幅,内容有限,所以不考虑使用。


课堂活动

Animate 2021制作拖拽填空题

如何制作拖曳填空题

根据 Animate/Flash如何制作拖拽填空题(AS3) ,可以做出如下填空题,遇到的问题是,根据这篇文章给出的代码,只能实现将空与答案的一一对应。拿“阿长”举例来说,如果按照空与答案对应来做,实际展示中会遇到,“阿长”本可以放在绍兴对应的五个空中任意一个,而操作中如果没有放在设置的那个空的位置上,其他四个空放入都会提示错误,答案返回原位置。

拖拽填空题

代码如下

import flash.utils.Timer;
import flash.geom.Point;

var mc_index:int=0;
var mc_count:int=4; %0-3共四个答案mc0,mc1,mc2,mc3
var right_id:int=0;%正确答案标号
var tempx:Number=0;
var tempy:Number=0;
var posAry:Array=new Array();
var timer:Timer=new Timer(20);
for(var i:int=0;i<mc_count;i++)
{
  this["mc"+i].addEventListener(MouseEvent.MOUSE_DOWN,StartDragEvent);
  this["mc"+i].addEventListener(MouseEvent.MOUSE_UP,StopDragEvent);
  posAry.push(new Point());
  posAry[i].x=this["mc"+i].x;%记录拖拽答案的原位置以便返回
  posAry[i].y=this["mc"+i].y;
}
timer.addEventListener(TimerEvent.TIMER,FollowMouseEvent);
function StartDragEvent(e:MouseEvent):void
{
  var obj:MovieClip=e.currentTarget as MovieClip;
  var t:int=int(obj.name.slice(2));
  mc_index=t;
  tempx=this.mouseX-obj.x;
  tempy=this.mouseY-obj.y;
  timer.start();
  this.setChildIndex(obj,this.numChildren-1);
}
function FollowMouseEvent(e:TimerEvent):void
{
  this["mc"+mc_index].x=this.mouseX-tempx;
  this["mc"+mc_index].y=this.mouseY-tempy;
}
function StopDragEvent(e:MouseEvent):void
{
  var obj:MovieClip=e.currentTarget as MovieClip;
  var t:int=int(obj.name.slice(2));
  timer.stop();
  if(obj.hitTestObject(p_mc)==true&&t==right_id)%p_mc为空的标号
  {
    obj.x=p_mc.x;
    obj.y=p_mc.y; %如果对应,则停留在该位置上
  }
  else
  {
    obj.x=posAry[t].x; %如果不对,返回原位置
    obj.y=posAry[t].y;
  }
}

将答案拖到对应区域内

想法一

考虑用语句判断一个答案可放在五个位置中任意一个都是正确,写了半天没写对,着急用选择再找方案。

想法二

根据Flash 拖放实例_cnicfhnui的博客-CSDN博客_flash拖拽实例
可以判断答案是否到达目标区域,判断到达,则松开鼠标,位置保留;不到达,则回到拖拽之前的位置。
尝试了一下,也失败了。不知道为什么松开鼠标不会留在原地,答案一直粘在鼠标上,头疼。

想法三

结合一、二,判断答案是否在目标区域,在,则答案会跑到设定的空的位置;不在,则回到拖拽之前的位置。
完美实现想要的效果,由于实在太晚了,不想动脑写循环了,考虑到就10个元素,就偷懒不动脑直接复制粘贴判断了。哪天再做的时候再考虑吧。

开始改的时候遇到两个问题:

  1. 画面闪烁。解决方案:背景和内容在两个图层,合并图层后没有问题,不知道是什么导致的,理论上应该分开图层不会有问题的。
  2. 回答错误后不会回到原位置,而是回到了p_cm0的位置。解决方案:最初只判断了有没有到目标区域,而没有将位置信息t修改到对应的地方,所以只存了一个地点。

import flash.utils.Timer;
import flash.geom.Point;

var mc_index:int=0;
var mc_count:int=10;
var right_id0:int=0;
var right_id1:int=1;
var right_id2:int=2;
var right_id3:int=3;
var right_id4:int=4;
var right_id5:int=5;
var right_id6:int=6;
var right_id7:int=7;
var right_id8:int=8;
var right_id9:int=9;%有时间再想怎么改
var tempx:Number=0;
var tempy:Number=0;
var posAry:Array=new Array();
var timer:Timer=new Timer(20);
for(var i:int=0;i<mc_count;i++)
{
  this["mc"+i].addEventListener(MouseEvent.MOUSE_DOWN,StartDragEvent);
  this["mc"+i].addEventListener(MouseEvent.MOUSE_UP,StopDragEvent);
  posAry.push(new Point());
  posAry[i].x=this["mc"+i].x;
  posAry[i].y=this["mc"+i].y;
}
timer.addEventListener(TimerEvent.TIMER,FollowMouseEvent);
function StartDragEvent(e:MouseEvent):void
{
  var obj:MovieClip=e.currentTarget as MovieClip;
  var t:int=int(obj.name.slice(2));
  mc_index=t;
  tempx=this.mouseX-obj.x;
  tempy=this.mouseY-obj.y;
  timer.start();
  this.setChildIndex(obj,this.numChildren-1);
}
function FollowMouseEvent(e:TimerEvent):void
{
  this["mc"+mc_index].x=this.mouseX-tempx;
  this["mc"+mc_index].y=this.mouseY-tempy;
}
function StopDragEvent(e:MouseEvent):void
{
  var obj:MovieClip=e.currentTarget as MovieClip;
  var t:int=int(obj.name.slice(2));
  timer.stop();
  if(this.hotspot_mc0.hitTestObject(mc0)&&t==right_id0)%有时间再改
  {
    obj.x=p_mc0.x;
    obj.y=p_mc0.y;
  }
    else if(this.hotspot_mc0.hitTestObject(mc1)&&t==right_id1)
  {
    obj.x=p_mc1.x;
    obj.y=p_mc1.y;
  }
  else if(this.hotspot_mc0.hitTestObject(mc2)&&t==right_id2)
  {
    obj.x=p_mc2.x;
    obj.y=p_mc2.y;
  }
  else if(this.hotspot_mc0.hitTestObject(mc3)&&t==right_id3)
  {
    obj.x=p_mc3.x;
    obj.y=p_mc3.y;
  }
  else if(this.hotspot_mc0.hitTestObject(mc4)&&t==right_id4)
  {
    obj.x=p_mc4.x;
    obj.y=p_mc4.y;
  }
  else if(this.hotspot_mc1.hitTestObject(mc5)&&t==right_id5)
  {
    obj.x=p_mc5.x;
    obj.y=p_mc5.y;
  }
  else if(this.hotspot_mc2.hitTestObject(mc6)&&t==right_id6)
  {
    obj.x=p_mc6.x;
    obj.y=p_mc6.y;
  }
  else if(this.hotspot_mc2.hitTestObject(mc7)&&t==right_id7)
  {
    obj.x=p_mc7.x;
    obj.y=p_mc7.y;
  }
  else if(this.hotspot_mc3.hitTestObject(mc8)&&t==right_id8)
  {
    obj.x=p_mc8.x;
    obj.y=p_mc8.y;
  }
  else if(this.hotspot_mc3.hitTestObject(mc9)&&t==right_id9)
  {
    obj.x=p_mc9.x;
    obj.y=p_mc9.y;
  }
  else
  {
    obj.x=posAry[t].x;
    obj.y=posAry[t].y;
  }
}

效果展示

效果展示

效果展示不知道为什么图片就很小。

导入ppt

导入的时候发现一个很绝望的问题,flash现在基本不支持了😭😭😭😭😭😭😭😭😭😭😭要比较完美没差错的话,与其安装一个插件,不如导出exe。
导出exe还找了一下教程,😩
Ctrl+Shift+f12,勾选win放映文件,然后发布,就可以发布exe文件。实在是无奈之举。
找怎么发布的时候才发现,Animate支持HTML5和Javascript,我。。。。。我Javascript也没学好,好吧😩。
下次研究研究可不可以向插入HTML5的动画来实现。
希沃白板是指望不上了。
最后,当然是希望没有下次了。


发布设置

勾选win放映文件
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355

推荐阅读更多精彩内容