2015-12-05 2 views
0

Я новичок в ActionScript, поэтому я не уверен, что проблема с моим кодом.Actionscript 3 - Drag and Drop игра с обратной связью, только один объект работает

Я создаю игру Flash/ActionScript, где дети будут перетаскивать различные продукты питания на пирамиду пищи - современную. Все элементы перетаскиваются, однако только первый элемент (banana_mc) создает обратную связь. Я понятия не имею, почему это происходит, и нет ошибок компилятора.

Мой ActionScript выглядит следующим образом:

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; 

    } 
} 

} 

Если кто-то может помочь мне, я бы очень признателен! Это часть задания на этой неделе (не для кодирования), поэтому мне действительно нужно быстрое решение, если это возможно ...

ответ

0

Ваши операторы коммутатора настроены на поиск точной строки, указанной вашим именем объекта. Итак, корпус имеет значение :) Либо сделайте item.objName.toLocalLowercase(), измените имя своего объекта, чтобы включать только строчные буквы, или измените ваш случай, чтобы он соответствовал всем именам вашего объекта, заглавными буквами, за исключением бананов.

+0

я редактировал код и поместить его обратно в вышеприведенном фрагменте кода. Но это все еще не работает, и теперь банановый объект тоже не работает. Я также получаю эту ошибку, когда я перетаскиваю объект: TypeError: Ошибка # 1006: значение не является функцией. \t at healthyeating2_fla :: MainTimeline/mouseRelease() –

+0

Не могли бы вы проверить «разрешить отладку» для меня? Если вы используете Adobe Flash CS, это меню в меню> публикация настроек> расширенные настройки. Я не могу сказать, что вызывает вашу проблему в это время, но это поможет. Вы также можете удалить функцию toLocalLowercase(), поскольку все имена вашего объекта имеют строчные буквы. Кроме того, отличной функцией, которая поможет, будет инструмент отладки. Если вы используете adobe flash cs, нажмите cntrl + ** shift ** + enter, чтобы войти в режим отладки. Ваш тестовый swf остановится и покажет строку, откуда исходит ошибка, а также текущие значения, которые она обрабатывает, которые могут быть связаны с ней. – quantomworks

+0

Я снова изменил код и вставил его выше. Однако отладка ничего не делает. Он не показывает ошибок в коде. Теперь некоторые объекты производят обратную связь, а некоторые - нет. Но обратная связь в любом случае неверна. Помог ли вам по электронной почте файл проекта? –

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 для ясности ...