PDA

Просмотр полной версии : загадочный глюк или я в OnClipEvent


Vrefr
29.05.2003, 23:50
Есть клип clip1, который должен, в зависимости от нажатия кнопок, перемещаться...
код клипа:

onClipEvent (enterFrame) {
if (_root.menumove == 1) {
if (_x>-290) {
_x -= 37;
_y += 5;
_xscale = 70;
_yscale = 70;
clip1.but.gotoAndStop(3);
}
} else if (_root.menumove == 2) {
xarmov = [-290, -280, -270, -200, -100, -50, -40, -10, -5, 0];
_x = xarmov[i++];
_xscale = 80;
_yscale = 80;
_root.logomenu.menu.gotoAndStop(2);

}
}

кнопка один говорит _root.menumove == 1
и клип замечательно перелетает до _х=-290 и уменьшается в размерах до _xscale = 70;
_yscale = 70;
,
кнопка два, которая находится в клипе clip1.but, которая говорит _root.menumove == 2
и клип перемещается на заданное ему место т.е. на _х=0 и увеличивается размерах до
_xscale = 80;
_yscale = 80;

снова нажимаю на кнопку один, клип снова перемещается на _х=-290,
и уменьшается в размерах до
_xscale = 70;
_yscale = 70;
я снова нажимаю на кнопку два и клип НИКУДА не перемещается, но в размерах увеличивается, что уже явно говорит, что он схавал что переменная _root.menumove изменилась на значение 2.
Но почему вдруг он перестает перемещаться???
ЧТо я уже напортачил??

Извините за длинное объяснение, но пытался поподробнее...
Спасибо за ответ!!! :confused:

iLoveYou
29.05.2003, 23:56
вот я щас должен сидеть и представлять, как там у тебя "раз-два".
сорс выложи, злодей :)

Usnul
30.05.2003, 00:28
че за изврат? :)

Vrefr
30.05.2003, 00:59
И зачем я столько объяснял... впрочем, следуя объяснениям глядите исходник...

Vrefr
30.05.2003, 01:02
а вот и он :)

Vrefr
30.05.2003, 20:23
ХЕЕЕЕЕЛП!!! Ауу!!!! :eek:
Неужели никто не знает?? ИЛи просто никто не смотрит ?:)
Глюк! Или я ступил! В любом случае как решить???
Мерси

Usnul
30.05.2003, 20:27
а мне просто лень :)

Vrefr
30.05.2003, 20:29
2Usnul: что с тобой случилось? То ты над людями издеваешься, то лень... с ума сбежал или ранний климакс?
Ну помогите же люди, я уже неделю над этим бьюсь..... :(

Vrefr
30.05.2003, 21:44
Лююююдди!!!!!!!!!!!!!
Вы где!!???
У меня уже крыша тихонько едет... может массивы так использовать нельзя??????
Неужели вымерли добрые самаритяне??

iLoveYou
30.05.2003, 22:28
Брррррр! Я только на сорс глянул - плёхо стало. Разобраться в этом можешь только ты. Но опыт мне подсказывает, что непорядок с переменной i.

DUDE
30.05.2003, 23:19
Лень объяснять в чём была причина, просто посмотри исправленный код. :)

если конечно я правильно понял как должна двигатся менюшка...

з.ы.: пользуйся trace(message); - помогает очень даже сдорово!!

DUDE
30.05.2003, 23:20
Блин глючит у меня нет, файл приложил - а он без файла вылез :)

iLoveYou
30.05.2003, 23:38
DUDE, мне черкани в двух словах - в чем там. а то так в лооом смотреть:)

DUDE
31.05.2003, 01:00
ну не логично построено движение меню т.е.:
туда всё правильно сделано а обратно я вообще не понял откуда и зачем там i++ и совершенно не понятно зачем так извращатся:
var = [600, 450, 300, 250, 150, 100, 50];
_x =var;
зачем это я вообще не понял :)

Vrefr
31.05.2003, 02:27
2DUDE:
спасибо тебе конечно за x<0 :)) Но меня как раз интересует именно изврат с точками :)
Потому как мне нужна определенная траектория.
ВОт прилагаю доработанный исходник, я было подумал и добавил myArray.lenth (как, кстати мне когда-то писал Sergey"iLoveYou") но что с ним, что без него.... все равно не пашет...
вот... ИЛи Вы в курсе какого-то более простого программного движения по траектории???
Спасибо

Vrefr
31.05.2003, 14:29
и тишина........ :(

Usnul
31.05.2003, 20:17
тебе чего нада? ты конкретно скажи, а то блин "нате исходу, гляньте что неработает, а я пока пойду покурю" :) если хочешь сделать движение по набору координат, так и скажи, или что с менюшкой с самой не так?

Suhoff
01.06.2003, 00:42
После того, как ты нажал на кнопку два и твой клип пробежал траекторию по _х, переменная i убегает далеко-далеко, т.к. _root.menumove так и остаётся равной двум ( пока не нажал, кнопку 1).... так что (один из вариантов) - сделай i глобальной и повесь на кнопку 2 дополнительный код
...
_root.i=0;
...

Должно заработать... (Правда не проверял.... )

Удачи... Suhoff

Vrefr
01.06.2003, 17:14
2Usnul: ты что думаешь, я тут фигней страдаю, нате мол парьтесь!!?? ДА у меня уже крышу тихонько срывает... я ж не программист (я лингвист) поэтому разбираюсь во всем с нуля и перед тем как написать на форум испробовал все что нашел! И только потом спрашиваю профессионалов! Блин...
:mad:
2Suhoff:
вот, спасибо что откликнулся, сейчас буду разбираться что ты написал... но что-то типа этого я и предполагал... огромное спасибо ;)

Usnul
01.06.2003, 21:15
мне 16 лет и я даже не лингвист :)

Vrefr
02.06.2003, 16:49
2USnul: снимаю шляпу! Но это не меняет дела и я от этого лучше разбираться в этом не стану :) Просто помни. что я сюда пишу только в последнем случае! :)
Кст, да мне нужно движение по координатам...

Nox Noctis
02.06.2003, 19:47
залез я в source2.fla и слегка офигел от способа доставать до правого уха левой пяткой :)
но товарисч Сухов мыслит в правильном направлении...

открываем source2.fla и заходим в скрипт который лежит на:
_root.logomenu.field
добавляем туда одну строчку: i = 0; сразу после строчки: if (_root.fieldmove == 1)
потом заходим в скрипт который лежит на:
_root.logomenu.menulogo
и добавляем туда одну строчку: i = 0; сразу после строчки: if (_root.menumove == 1)

...и о, чудо ! :)) сколько ни кликай по кнопкам - все работает одинаково... не факт что это все что нужно, но уже это достаточно положительный симптом :))

Usnul
03.06.2003, 01:01
ну вот, сказал бы раньше чего надо, и до Нокса бы дело не дошло... :)

Vrefr
04.06.2003, 12:15
NOx!!!! :) Хааааааа... я тут тихонько валяюсь :) и ржу под столом :) Изощренный способ поиздеваться :) А что не так? НУ в плане почему извращенный, просто если использовать обычное передвижение из серии
if(_x<41){_x+=5;}
то клип может перескочить за 41! Т.е. остановится не точно, если он приплюсует очередную 5-ку то будет 40, т.е. ему еще можно двигаться, а в результате он остановится не на 41 а на 45! :) вот я и попробовал этого избежать... видимо через ж., но другого способа не придумал...

Nox Noctis
04.06.2003, 12:47
чууувааак... я нихрена не понял что ты сказал, но ты достучался до моего сердца... ©
:)))))

Vrefr
04.06.2003, 13:16
:) сердце ? Эка я дал...
Ну что ж тут непонятного!
а) почему ты офигел от этого способа доставания до уха?
б) чтобы передвинуть объект А на точку Б, мы обычно делаем так:

if(objectA._x<точки Б){

objectA._x+=5;
}
таким образом объект А будет двигаться пока его _х не будет больше точки Б, но поскольку объект А движется с шагом 5 пикселей, то он попросту может проскочить точку Б на несколько пикселей, а если увеличить этот шаг скажем до 35, то он существенно проскакивает!
Как этого избежать? Используя перебор значений массива, который в данном случае является координатой х.
вот.. :) вроде так!

Usnul
04.06.2003, 21:16
а знаешь, это и вправду не так умно :) ...

DUDE
04.06.2003, 23:05
А знаешь, есть такой прикол: надо клип ставить таким образом
чтоб у тебя не перескакивало :)
Т.е.: если у тебя шаг 5 пикселей, а нужно быть например на 34 пикселе, то надо ставить твой ролик (который двигается),
в руте на либо на -1 пиксель, либо 11, либо 21 и т.д. Тогда ничего перескакивать не будет, мною проверено :D

iLoveYou
05.06.2003, 00:55
еще одна мудрость. чтобы не перескакивало, надо использовать моушн твин. тогда точно не перескочит.

Vrefr
05.06.2003, 15:27
2Usnul & Serge: вы как обычно советчики просто суперские!
2Dude: спасибо.... но а если мне нужно именно та скорость которая не сочетается?
Вы можете не альтернативу давать. а объяснить почему массив нецелесообразен и как делать точно?

Usnul
06.06.2003, 01:35
ну ты не кипятись. просто нужно прощитывать расстояние оставшиеся до достижения точки по обеим осям, и если оно меньше "шага",то добавлять его, а не "шаг", андэстэндэбл?

Vrefr
06.06.2003, 13:56
2Usnul: чем дальше, тем больше я сомневаюсь в твоем возрасте :) ну или ты вундеркинд :) ЧТо в переводе с немецкого: удивительный ребенок.
Ну хорошо, это понятно, ну а если траектория не просто прямо или по-диагонали. а скажем объект движется по петле. а доходя до конца петли по ней же возвращается назад?

uri-uri
06.06.2003, 15:04
Задавай уравнение движения параметрически и не парься. Параметром может являться время, может шаг (скажем 1/100 пути).
В общем виде это выглядит так:
_x=f1(t)
_y=f2(t)
t={0...1} - параметр
f1, f2 - функции

Тогда можно извращаться, как угодно (в смысле двигаться по любой кривой) и всегда при t=1 окажешся точно в конце пути.
А "параметрические уравнения" можно нарыть поиском в том же yandex.

Vrefr
06.06.2003, 15:59
о, да, параметрические... осталось еще выяснить что это и пройти курс программирования и высшей математики... :(

iLoveYou
07.06.2003, 00:14
Vrefr, я уже,честно говоря, забыл, что те нужно - как-то отошли от темы. Напомни, а? :)
А то что я советы вредные даю - так это не со зла. Обещаю, постараюсь помочь.

Usnul
07.06.2003, 03:21
по петле? это запросто :)
_root.massx=[10,20,30,40,50,40,30,20,10]
_root.massy=[100,90,80,90,100,110,120,110,100]
_root.speed=30
_root.nextposition=0
_root.thisx=0
_root.thisy=90
_root.mc._x=_root.thisx
_root.mc._y=_root.thisy
mc.onEnterFrame=function(){
if(_root.mc._x!=_root.massx[_root.NextPosition] and _root.mc._y!=_root.massy[_root.NextPosition]){
_root.mc._x+=(_root.massx[_root.NextPosition]-_root.thisx)/_root.speed
_root.mc._y+=(_root.massy[_root.NextPosition]-_root.thisy)/_root.speed
}
else{
if(_root.nextposition<_root.massx.length and _root.nextposition<_root.massy.length){
_root.thisx=_root.mc._x
_root.thisy=_root.mc._y
_root.nextposition+=1
}
else{
trace("end of coordinats Array")
}
}
}
вот написал, не обижайся что не пашет, но зато дает представление :) я его почти полчаса писал :( и вдабавок спать хочется, короче не серчай :) завтра будет время, разберусь :)