我在这里做一个简单的真假拖拽游戏。
我将舞台上的所有对象制作为影片剪辑:
问题(q1,q2,q3),用户可以在回答后转到下一个问题,跳过问题并返回回答之前未回答的问题。
当用户返回回答之前未回答的问题时,我遇到了问题。
假设用户跳过问题2然后正确回答问题3。 用户返回回答问题2.当用户拖动错误以放弃目标时,响应将显示“oui”影片剪辑,说明这是正确的答案。好像它带有回答问题3的记忆。
import flash.display.MovieClip;
import flash.events.MouseEvent;
oui.visible = false;
non.visible = false;
q1.visible = true;
q2.visible = false;
q3.visible = false;
q1Match.visible = true;
q2Match.visible = false;
q3Match.visible = false;
q1a1.visible = true;
q1a2.visible = true;
q2a1.visible = false;
q2a2.visible = false;
q3a1.visible = false;
q3a2.visible = false;
back_btn.visible = false;
var num:int = 0;
nx_btn.addEventListener(MouseEvent.CLICK, nextQuestion);
function nextQuestion(event:MouseEvent):void{
switch (num){
case 0:
oui.visible = false;
non.visible = false;
q1.visible = false;
q1Match.visible = false;
q1a1.visible = false;
q1a2.visible = false;
q2.visible = true;
q2Match.visible = true;
q2a1.visible = true;
q2a2.visible = true;
back_btn.visible = true;
back_btn.buttonMode = true;
break;
case 1:
oui.visible = false;
non.visible = false;
q2Match.visible = false;
q2.visible = false;
q2a1.visible = false;
q2a2.visible = false;
q3.visible = true;
q3Match.visible = true;
q3a1.visible = true;
q3a2.visible = true;
break;
case 2:
oui.visible = false;
non.visible = false;
q3.visible = false;
q3Match.visible = false;
q3a1.visible = false;
q3a2.visible = false;
gotoAndStop(3);
break;
}
num++;
}
back_btn.addEventListener(MouseEvent.CLICK, prevQuestion);
function prevQuestion(event:MouseEvent):void{
switch (num){
case 0:
oui.visible = false;
non.visible = false;
back_mc.visible = false;
break;
case 1:
oui.visible = false;
non.visible = false;
q2.visible = false;
q2Match.visible = false;
q2a1.visible = false;
q2a2.visible = false;
q1.visible = true;
q1Match.visible = true;
q1a1.visible = true;
q1a2.visible = true;
back_mc.visible = false;
break;
case 2:
oui.visible = false;
non.visible = false;
q3.visible = false;
q3Match.visible = false;
q3a1.visible = false;
q3a2.visible = false;
q2.visible = true;
q2Match.visible = true;
q2a1.visible = true;
q2a2.visible = true;
back_mc.visible = true;
back_mc.buttonMode = true;
break;
}
num--;
}
var dragArray:Array = [q1a1, q1a2, q2a1, q2a2, q3a1, q3a2];
var matchArray:Array = [q1Match, q2Match, q3Match];
var currentClip:MovieClip;
var startX:Number;
var startY:Number;
for(var i:int = 0; i < dragArray.length; i++) {
dragArray[i].buttonMode = true;
dragArray[i].addEventListener(MouseEvent.MOUSE_DOWN, item_onMouseDown);
function item_onMouseDown(event:MouseEvent):void {
currentClip = MovieClip(event.currentTarget);
startX = currentClip.x;
startY = currentClip.y;
addChild(currentClip);
currentClip.startDrag();
stage.addEventListener(MouseEvent.MOUSE_UP, stage_onMouseUp);
}
function stage_onMouseUp(event:MouseEvent):void {
stage.removeEventListener(MouseEvent.MOUSE_UP, stage_onMouseUp);
currentClip.stopDrag();
var index:int = dragArray.indexOf(currentClip);
var matchClip:MovieClip = MovieClip(matchArray[index]);
oui.visible = false;
non.visible = false;
if(q1a1.hitTestObject(q1Match)) {
q1a1.x = q1Match.x;
q1a1.y = q1Match.y;
q1a1.removeEventListener(MouseEvent.MOUSE_DOWN, item_onMouseDown);
q1a2.removeEventListener(MouseEvent.MOUSE_DOWN, item_onMouseDown);
q1a1.buttonMode = false;
q1a2.buttonMode = false;
oui.visible = true;
non.visible = false;
}
if(q1a2.hitTestObject(q1Match)){
q1a2.x = startX;
q1a2.y = startY;
non.visible = true;
oui.visible = false;
}
if(q2a2.hitTestObject(q2Match)) {
q2a2.x = q2Match.x;
q2a2.y = q2Match.y;
q2a1.removeEventListener(MouseEvent.MOUSE_DOWN, item_onMouseDown);
q2a2.removeEventListener(MouseEvent.MOUSE_DOWN, item_onMouseDown);
q2a1.buttonMode = false;
q2a2.buttonMode = false;
oui.visible = true;
non.visible = false;
}
if(q2a1.hitTestObject(q2Match)){
q2a1.x = startX;
q2a1.y = startY;
non.visible = true;
oui.visible = false;
}
if(q3a2.hitTestObject(q3Match)) {
q3a2.x = q3Match.x;
q3a2.y = q3Match.y;
q3a1.removeEventListener(MouseEvent.MOUSE_DOWN, item_onMouseDown);
q3a2.removeEventListener(MouseEvent.MOUSE_DOWN, item_onMouseDown);
q3a1.buttonMode = false;
q3a2.buttonMode = false;
oui.visible = true;
non.visible = false;
}
if(q3a1.hitTestObject(q3Match)){
q3a1.x = startX;
q3a1.y = startY;
non.visible = true;
oui.visible = false;
}
}
请帮忙! T_T
答案 0 :(得分:0)
var index:int = dragArray.indexOf(currentClip);
var matchClip:MovieClip = MovieClip(matchArray[index]);
这意味着matchArray
和dragArray
应该具有相同的长度,而您有matchArray
长度为3且dragArray
长度为6。首先,更改matchArray
对此:
var matchArray:Array = [q1Match, q1Match, q2Match, q2Match, q3Match, q3Match];
然后您的数组匹配来自答案集的匹配集的正确剪辑。
实际错误来自您的代码在拖动它以匹配a3q2
之后没有将q3match
返回到原始位置,而是将其放在q3match
上方。然后,当您处理MOUSE_UP
事件时,您的代码按顺序执行,第二个问题被错误地回答并且non
变得可见,但是下一组语句检查第三个问题将被回答,它是已经正确回答 - oui
变得可见。
要解决此问题,您只需检查currentClip
和matchClip
的冲突,以便仅检查当前问题。然后你需要匹配currentClip
以确定此剪辑给出的答案是正确还是错误,如果正确,让它超过匹配剪辑,如果错误,则将其放回。请注意,如果您停止拖动currentClip
但未将其放在匹配剪辑上,则ouinon
不会返回其位置,这可能会破坏您的程序(不一定如此)。
修复代码的最佳方法是为Boolean
数组匹配dragArray
匹配false
数据,以获取正确/错误答案的值 - true
错误,{ {1}}是对的。在你的情况下,数组将是这样的:
var ouinon:Array = [true, false, true, false, false, true];
然后,当您检测到碰撞时,检查您已收到的ouinon
处的index
元素,并根据其结果进行操作。
if (ouinon[index]) {
currentClip.x=matchClip.x;
currentClip.y=matchClip.y;
oui.visible=true;
non.visible=false;
} else {
currentClip.x=startX;
currentClip.y=startY;
non.visible=true;
oui.visible=false;
}
将其替换为6 if
,而不是替换所有这些event.target
,并查看如何仅对{{1}}派生的数据进行操作。