Actionscript 3 - 带有反馈的拖放游戏,只有一个对象正常工作

时间:2015-12-05 21:28:37

标签: actionscript-3 flash actionscript

我是Actionscript的新手,所以我不确定我的代码存在什么问题。

我正在创建一个Flash / Actionscript游戏,孩子们可以将不同的食物拖放到食物金字塔上 - 现代食物。拖放所有项目,但只有第一项(banana_mc)创建反馈。我不知道为什么会这样,并且没有编译器错误。

我的动作如下:

    banana_mc.objName = "banana";
banana_mc.initX = banana_mc.x;
banana_mc.initY = banana_mc.y;
banana_mc.val = 0;

bread_mc.objName = "bread";
bread_mc.initX = bread_mc.x;
bread_mc.initY = bread_mc.y;
bread_mc.val = 0;

broccoli_mc.objName = "broccoli";
broccoli_mc.initX = broccoli_mc.x;
broccoli_mc.initY = broccoli_mc.y;
broccoli_mc.val = 0;

burger_mc.objName = "burger";
burger_mc.initX = burger_mc.x;
burger_mc.initY = burger_mc.y;
burger_mc.val = 0;

carrot_mc.objName = "carrot";
carrot_mc.initX = carrot_mc.x;
carrot_mc.initY = carrot_mc.y;
carrot_mc.val = 0;

cheese_mc.objName = "cheese";
cheese_mc.initX = cheese_mc.x;
cheese_mc.initY = cheese_mc.y;
cheese_mc.val = 0;

chips_mc.objName = "chips";
chips_mc.initX = chips_mc.x;
chips_mc.initY = chips_mc.y;
chips_mc.val = 0;

corn_mc.objName = "corn";
corn_mc.initX = corn_mc.x;
corn_mc.initY = corn_mc.y;
corn_mc.val = 0;

eggplant_mc.objName = "eggplant";
eggplant_mc.initX = eggplant_mc.x;
eggplant_mc.initY = eggplant_mc.y;
eggplant_mc.val = 0;

egg_mc.objName = "egg";
egg_mc.initX = egg_mc.x;
egg_mc.initY = egg_mc.y;
egg_mc.val = 0;


banana_mc.buttonMode = true;
bread_mc.buttonMode = true;
broccoli_mc.buttonMode = true;
burger_mc.buttonMode = true;
carrot_mc.buttonMode = true;
cheese_mc.buttonMode = true;
chips_mc.buttonMode = true;
corn_mc.buttonMode = true;
eggplant_mc.buttonMode = true;
egg_mc.buttonMode = true;

banana_mc.addEventListener(MouseEvent.MOUSE_DOWN, mousePress);
banana_mc.addEventListener(MouseEvent.MOUSE_UP, mouseRelease);
bread_mc.addEventListener(MouseEvent.MOUSE_DOWN, mousePress);
bread_mc.addEventListener(MouseEvent.MOUSE_UP, mouseRelease);
broccoli_mc.addEventListener(MouseEvent.MOUSE_DOWN, mousePress);
broccoli_mc.addEventListener(MouseEvent.MOUSE_UP, mouseRelease);
burger_mc.addEventListener(MouseEvent.MOUSE_DOWN, mousePress);
burger_mc.addEventListener(MouseEvent.MOUSE_UP, mouseRelease);
carrot_mc.addEventListener(MouseEvent.MOUSE_DOWN, mousePress);
carrot_mc.addEventListener(MouseEvent.MOUSE_UP, mouseRelease);
cheese_mc.addEventListener(MouseEvent.MOUSE_DOWN, mousePress);
cheese_mc.addEventListener(MouseEvent.MOUSE_UP, mouseRelease);
chips_mc.addEventListener(MouseEvent.MOUSE_DOWN, mousePress);
chips_mc.addEventListener(MouseEvent.MOUSE_UP, mouseRelease);
corn_mc.addEventListener(MouseEvent.MOUSE_DOWN, mousePress);
corn_mc.addEventListener(MouseEvent.MOUSE_UP, mouseRelease);
eggplant_mc.addEventListener(MouseEvent.MOUSE_DOWN, mousePress);
eggplant_mc.addEventListener(MouseEvent.MOUSE_UP, mouseRelease);
egg_mc.addEventListener(MouseEvent.MOUSE_DOWN, mousePress);
egg_mc.addEventListener(MouseEvent.MOUSE_UP, mouseRelease);

//Mouse Events

function mousePress(event:MouseEvent):void {
    var item:MovieClip = MovieClip(event.target);
    item.startDrag();

    var topPos:uint = this.numChildren - 1;
    this.setChildIndex(item, topPos);
}


function mouseRelease(event:MouseEvent):void {
    var item:MovieClip = MovieClip(event.target);
    item.stopDrag();

    switch (item.objName) {
        case "banana" :
            if (bottom_mc.hitTestObject(item)) {
                updateShape(item, bottom_mc);

            } else {
                info_txt.text ="WRONG!";

            }
            break;
        case "bread" :
            if (third_mc.hitTestObject(item)) {
                updateShape(item, third_mc);

            } else {
                info_txt.text ="WRONG!";

            }
            break;
        case "broccoli" :
            if (bottom_mc.hitTestObject(item)) {
                updateShape(item, bottom_mc);
            } else {
                info_txt.text ="WRONG!";

            }
            break;
            case "burger" :
            if (top_mc.hitTestObject(item)) {
                updateShape(item, top_mc);

            } else {
                info_txt.text ="WRONG!";

            }
            case "carrot" :
            if (bottom_mc.hitTestObject(item)) {
                updateShape(item, bottom_mc);

            } else {
                info_txt.text ="WRONG!";

            }
            case "cheese" :
            if (second_mc.hitTestObject(item)) {
                updateShape(item, second_mc);

            } else {
                info_txt.text ="WRONG!";

            }
            case "chips" :
            if (top_mc.hitTestObject(item)) {
                updateShape(item, top_mc);

            } else {
                info_txt.text ="WRONG!";

            }
            case "corn" :
            if (bottom_mc.hitTestObject(item)) {
                updateShape(item, bottom_mc);

            } else {
                info_txt.text ="WRONG!";

            }
        default :
            ; ;
    }
    function updateShape(item:MovieClip, bin:MovieClip):void {


    item.visible = true;
    info_txt.text ="CORRECT!";

    item.val = 1;
    resetShapes();
}

function resetShapes() {
    if ((banana_mc.val == 1)&& (bread_mc.val == 1) && (broccoli_mc.val == 1) &&(burger_mc.val == 1) &&(carrot_mc.val == 1) &&(cheese_mc.val == 1) &&(chips_mc.val == 1) &&(corn_mc.val == 1) &&(eggplant_mc.val == 1) &&(egg_mc.val == 1)){

        banana_mc.x = banana_mc.initX;
        banana_mc.y = banana_mc.initY;
        bread_mc.x = bread_mc.initX;
        bread_mc.y = bread_mc.initY;
        broccoli_mc.x = broccoli_mc.initX;
        broccoli_mc.y = broccoli_mc.initY;
        burger_mc.x = burger_mc.initX;
        burger_mc.y = burger_mc.initY;
        carrot_mc.x = carrot_mc.initX;
        carrot_mc.y = carrot_mc.initY;
        cheese_mc.x = cheese_mc.initX;
        cheese_mc.y = cheese_mc.initY;
        chips_mc.x = chips_mc.initX;
        chips_mc.y = chips_mc.initY;
        corn_mc.x = corn_mc.initX;
        corn_mc.y = corn_mc.initY;
        eggplant_mc.x = eggplant_mc.initX;
        eggplant_mc.y = eggplant_mc.initY;
        egg_mc.x = egg_mc.initX;
        egg_mc.y = egg_mc.initY;


        banana_mc.visible= true;
        bread_mc.visible= true;
        broccoli_mc.visible= true;
        burger_mc.visible= true;
        carrot_mc.visible= true;
        cheese_mc.visible= true;
        chips_mc.visible= true;
        corn_mc.visible= true;
        eggplant_mc.visible= true;
        egg_mc.visible= true;


        banana_mc.val= 0;
        bread_mc.val= 0;
        broccoli_mc.val= 0;
        burger_mc.val= 0;
        carrot_mc.val= 0;
        cheese_mc.val= 0;
        chips_mc.val= 0;
        corn_mc.val= 0;
        eggplant_mc.val= 0;
        egg_mc.val= 0;

    }
}

}

如果有人能帮助我,我真的很感激!它本周是作业的一部分(不是编码),所以如果可能我真的需要一个快速的解决方案......

2 个答案:

答案 0 :(得分:0)

您的switch语句配置为查找对象名称指定的确切字符串。套管问题:) 要么使用item.objName.toLocalLowercase(),要将对象的名称更改为仅包含小写字母,要么更改您的大小写以匹配除了banana之外的所有对象的所有对象的名称。

答案 1 :(得分:0)

减少代码量只是一个有用的提示...

在你底部的function updateShape(item:MovieClip, bin:MovieClip):void,你有:

resetShapes();可能会更好resetShapes( item );

如果你提供一个函数参数( aka 函数参数),那么当你运行resetShapes时,它只需要处理当前点击的项目(作为函数参数提供),这样你就可以只是简单地写...

function resetShapes ( in_item : MovieClip ) : void
{
    if( in_item.val == 1)
    {
        in_item.x = in_item.initX;
        in_item.visible = true;
        in_item.val = 0;
    }
}

同样在您的function mouseRelease(event:MouseEvent):void底部,default : ; ;这可能会在您尝试编译时导致问题,因此修复或删除它。你想用这个命令做什么?如果我们理解您的代码或逻辑,那么给您的建议会更容易。

为了清晰起见,请检查此 Switch/Case tutorial article