Вход

Просмотр полной версии : Как остановить движение мувика as2


pekinessik
13.12.2012, 14:15
Добрый день. Есть мувик, который движется по оси y при нажатии на кнопку. Нужно сделать, чтобы он останавливался, когда достигнет определенной точки. Вот как я делаю, но он не останавливается:

on(release) {
onEnterFrame = function () {
slider._y = slider._y + 5;
if (slider._y == 50) delete slider.onEnterFrame;
}

Спасибо.

mooncar
13.12.2012, 14:20
У вас, получается, мувик slider внутри этой кнопки?
on(release)
{
onEnterFrame = function ()
{
slider._y = slider._y + 5;
trace(slider._y);

if (slider._y >= 50) delete onEnterFrame ;
}
}

Не пишите код на объектах - запутаетесь с областями видимости!
1. В вашем случае обработчик onEnterFrame назначается не на slider, а на саму кнопку.
2. В условии следует поставить "больше или равно", так как "равно" точно может и не быть.

pekinessik
13.12.2012, 14:23
slider отдельно, на главной сцене

mooncar
13.12.2012, 14:28
Тогда у вас при коде, который вы привели, мувик slider не должен быть виден, и движения вообще не должно происходить при нажатии:
on(release)
{
trace(slider); //undefined
}

В данном случае, раз уж вам так хочется использовать очень устраевшую запись кода на объекте, сделайте так:
on(release)
{
var sld:MovieClip = this._parent.slider;

sld.onEnterFrame = function ()
{
sld._y = sld._y + 5;

if (sld._y >= 50) delete sld.onEnterFrame ;
}
}

Добавлено через 4 минуты
А еще правильнее сделать так: записать код в кадре:
btn.onRelease = function ()
{
slider.onEnterFrame = sldOnEnterFrame;
};

function sldOnEnterFrame ()
{
this._y += 5; //this ссылается на slider, хотя можно записать вместо этого slider
if (this._y >= 50) delete this.onEnterFrame ;
}

где btn - имя кнопки на сцене

pekinessik
13.12.2012, 14:34
это код вообще не хочет у меня работать, объект стоит на месте при нажатии на кнопку

mooncar
13.12.2012, 14:38
Если вы о последнем коде, то должно быть так:
1. Код в кадре.
2. На сцене мувик с именем экземпляра slider
3. На сцене мувик или кнопка с именем экземпляра btn
См. пример

pekinessik
13.12.2012, 14:39
btn.onRelease = function ()
{
slider.onEnterFrame = sldOnEnterFrame;
};

function sldOnEnterFrame ()
{
this._y += 5; //this ссылается на slider, хотя можно записать вместо этого slider
if (this._y >= 50) delete this.onEnterFrame ;
}
Движение по оси y на 5px происходит, кода нажимаешь на кнопку 1 раз. 1 нажатие - 1 смещение на 5px

Добавлено через 2 минуты
все, заработало, БОЛЬШОЕ СПАСИБО!!!!!!!!!!!!!!!!!!!!

mooncar
13.12.2012, 14:54
Ну вот и отлично.
И насчет записи кода на объектах - так не делается уже лет 7-8, и на то много причин.

pekinessik
13.12.2012, 14:56
понятно, буду знать, спасибо!