2013-11-24 4 views
1

Я написал код ActionScript 3 для перемещения объекта, когда другой объект близок. Я использую flash cs5.5 Проблема в том, что когда я добавил код для перемещения этого объекта только один раз, код перестанет работать правильно. Возможно, проблема заключается не в самом коде, а в объектах или экземплярах объектов, но я ничего не изменил. Я получаю все следы, которые вы можете видеть в коде, но когда я закрываю «магнит» до «маятника», маятник не вращается, как он.Перемещение объекта не работает, но у меня нет ошибок

import flash.events.MouseEvent; 
import flash.events.Event; 

var angle:Number = 0; //angle for rotation of object "pendulum" 
var rotate:Number = 45; // value to multiple to calculate rotation 

//global variable 
var moved_once: int=0; //variable for checking the first move of the object 

function move_pendulum(e:Event):void{ 

    trace("hit"); //to check if enters the function 
pendulum1.rotation = Math.sin(angle) * rotate; //execute rotation 
angle +=0.3; //increase angle for next rotation 
trace("hit2"); //to check if the function ends 
} 

magnet1.addEventListener(MouseEvent.MOUSE_DOWN, start_magnet); //for start dragging //object "magnet" 
magnet1.addEventListener(MouseEvent.MOUSE_UP, stop_magnet); //for stop dragging //object "magnet" 


function start_magnet(event:MouseEvent):void{ 

    magnet1.startDrag(); //start dragging of object "magnet" 

    //check if the two objects are close enough 
    if(magnet1.x >pendulum1.x && (magnet1.x-pendulum1.x)<100){ 
     trace("range detect"); 
    //check if it is the first time which the two objects are close enough 
    if(moved_once==0){ 
     trace("called move"); 
     move_pendulum(event); //call function for rotating object "rotation" 
     moved_once++; //increase counter for not rotating again 
      }          
                  } 

              }//end of function             

function stop_magnet(event:MouseEvent):void{ 

    magnet1.stopDrag(); //stop dragging of object 
    trace("stopped"); 
    } 

У меня нет никаких ошибок или еще чего-либо. Что происходит не так? Я ничего не вижу.

+0

Сказать, что код перестает работать должным образом, немного расплывчато. Что происходит ? Вы получаете следы? Если вы не получаете трассировку «обнаружение диапазона», вы должны начать там. Правильно ? – prototypical

+0

@prototypical Да, спасибо. Я добавил эту информацию в описание. Я получил все следы, но у меня не было движения, как это было раньше. – Dchris

+0

нет движения чего? магнит или маятник? На основе вашего кода маятник вообще перестанет двигаться, если это условие EVER true и больше не начнет двигаться. Функция move_pendulum находится там, где угол увеличивается. – prototypical

ответ

0

Это ваша проблема:

if(moved_once==0){ 
move_pendulum(event); //call function for rotating object "rotation" 
moved_once++; //increase counter for not rotating again 
} 

Вы проверяете значение глобальной переменной moved_once, если его 0, то при перемещении маятника, а затем увеличивают moved_once. После этой точки move_once = 1 и условие (move_once == 0) больше никогда не будет истинным.
Добавьте к тому, что единственное время, которое вы называете move_pendulum angle = 0 (и sin (0) = 0 и 0 * rotate = 0), никуда не денется.
Если вы всегда хотите, чтобы маятник двигался, тогда удалите, если полностью. Если вы хотите, чтобы маятник двигался, если вы, например, перетаскиваете магнит, тогда вам все равно лучше заменить move_once на bool.

Смежные вопросы