Просмотр полной версии : Нажатие кнопки и движение мувиков
rockerror
02.11.2009, 13:03
Уважаемые Дамы и Господа флэшеры. Вновь наступил на похожие грабли...
Задача: есть 4 мувика (позже будет больше). На сцену влазит только 3 (так задумано). Нужно сделать 2 кнопки, чтобы перематывать мувики на сцене вправо и влево.
Как решал: создал 2 кнопки (далее описывать буду только левую, мотающую влево, ибо правая аналогична), которым присвоил код:
var n:Number = _root.event1._x
on (release) {
if(_root.event1._x > n-300) {
_root.event1._x -=10;
_root.event2._x -=10;
_root.event3._x -=10;
_root.event4._x -=10;
}
}
n-300 ибо ширина мувика 300 и надо чтобы весь ряд мувиков сдвигался влево/вправо ровно на ширину 1 мувика. Однако признаков жизнеспособности при тестировании у кода не обнаружил... Где я накорсячил и как это попроавить?
Добавлено через 41 минуту
Вынес код за пределы кнопки и чутка подправил, теперь он выглядит вот так:
var n:Number = _root.event1._x
this.but_left.onRelease = function () {
if(_root.event1._x > n - 300) {
_root.event1._x -=10;
_root.event2._x -=10;
_root.event3._x -=10;
_root.event4._x -=10;
}
}
Двигаться стало, НО!!! Задача предполагала плавное движение на ширину мувика с "шагом" 10... А пока происходит только перемещение на 10 и все... надо как-то зациклить процесс...
Добавлено через 44 минуты
Подозреваю, что я сравниваю координату саму с собой... как мне получить координату х мувика в начале движения, зафиксировать это значение сравнивать новые координаты именно с ней???...
Добавлено через 53 минуты
Хмм... Есть кто живой тут????
Добавлено через 56 минут
Переписал вот так:
var n = _root.event1._x - 300;
this.but_left.onRelease = function() {
if (_root.event1._x> n) {
_root.event1._x -= 10;
_root.event2._x -= 10;
_root.event3._x -= 10;
_root.event4._x -= 10;
}
};
Добавлено через 56 минут
не помогло...
AzagThoth
02.11.2009, 15:06
Если хочешь сделать плавно - тебе понадобится выделенная функция которая будет вызываться из событийного обработчика нажатия кнопки посредством setInterval после вызова блокируешь кнопку, по завершении определённого количества вызовов функции в вызываемой функции делаешь clearInterval и разблокируешь кнопку и всё будет как тебе надо) Надеюсь помог.
rockerror
02.11.2009, 15:42
Спасибо Гипербореец))))))) Пока не попробовал, то, что ты предложил, но... Нельза ли немного конкретнее, ну всмысле с примером кода? ибо у меня туго с золотым корнем и я еще не очень втыкаю в магию ActionScript)))
Попробовал через цикл, но где-то опять накосячил...
this.but_left.onRelease = function() {
for (var n = _root.event1._x-300; _root.event1._x>n; _root.event1._x -= 10) {
_root.event2._x -= 10;
_root.event3._x -= 10;
_root.event4._x -= 10;
}
};
AzagThoth
02.11.2009, 15:54
В твоём случае должно быть как-то так:
var i:Number=0;
var timer:Number=null;
var Врубить:String=null;
function Подвинься():Void{
_root.event2._x -= 10;
_root.event3._x -= 10;
_root.event4._x -= 10;
if(i<30){
i++;
}
else{
i=0;
clearInterval(time);
eval(Врубить).enabled=true;
}
updateAfterEvent();
}
this.but_left.onRelease = function() {
timer=setInterval(Подвинься,600);
this.enabled=false;
Врубить=''+this;
};
код не тестировал, плавное движение возможно либо нарисовать либо зациклить кадры со скриптом, либо использовать setInterval() и плавнее всего получается рисованное...
walk = function(a:Number){
if(_root.event1._x > -300){
_root.event1._x += a
_root.event2._x += a;
_root.event3._x += a;
_root.event4._x += a;
}else{
clearInterval(tmp)
}
}
this.but_left.onRelease = function() {
tmp = setInterval (walk,10000,-10);
};
rockerror
02.11.2009, 16:05
Благодарю, пытаюсь вкурить...))
Добавлено через 3 минуты
стоп, второе это дополнение к первому или альтернатива?
Bitcoolman
02.11.2009, 16:21
альтернатива
rockerror
02.11.2009, 17:22
Протестил оба варианта. Оба рабочие, однако о плавности не идет и речи. КАждое смещение происходит примерно через секунду после предыдущего. С чем это связано? Можно ли обеспечить непрерывность движения?
Добавлено через 11 минут
С этим разобрался. работаю с первым вариантом, т.е. сейчас код выглядит вот так:
var i:Number=0;
var timer:Number=null;
var vkl:String=null;
function dvig():Void{
_root.event2._x -= 10;
_root.event3._x -= 10;
_root.event4._x -= 10;
if(i<30){
i++;
}
else{
i=0;
clearInterval(time);
eval(vkl).enabled=true;
}
updateAfterEvent();
}
this.but_left.onRelease = function() {
timer=setInterval(dvig,8);
this.enabled=false;
vkl=''+this;
};
Все круто, но есть один единственный косяк... сместившись на ширину одного мувика, процессия не останавливается, она продолжает двигаться дальше... Ширина 1 мувика - 300... не могу разобраться... Хелп ми плиз...
Добавлено через 27 минут
Хмхмхм... Еще немного переработал... как мне кажется в верном ключе... но проблему не решил....(((( Теперь все выглядит вот так:
var i:Number = _root.event1._x;
var time:Number = null;
var vkl:String = null;
function dvig():Void {
if (i>-300) {
_root.event1._x -= 10;
_root.event2._x -= 10;
_root.event3._x -= 10;
_root.event4._x -= 10;
} else {
clearInterval(time);
eval(vkl).enabled = true;
}
updateAfterEvent();
}
this.but_left.onRelease = function() {
timer = setInterval(dvig, 8);
this.enabled = false;
vkl = ''+this;
};
Добавлено через 29 минут
хм в коде вместо > знак >
Добавлено через 1 час 13 минут
Ура! Друзья мои, всем огромное спасибо)) Довел код до необходимого результата!!! НО... Теерь кнопка срабатывает только после 2-х нажатий... Не могу понять почему... СЕйчас код выглядит вот так:
this.but_left.onPress = function() {
tmp = setInterval (walk,1,-10);
walk = function(){
if(_root.event1._x < 50){
_root.event1._x += 3;
_root.event2._x += 3;
_root.event3._x += 3;
_root.event4._x += 3;
}else{
_root.event1._x -= 0;
_root.event2._x -= 0;
_root.event3._x -= 0;
_root.event4._x -= 0;
clearInterval(tmp)
}
}
};
Добавлено через 1 час 16 минут
Хах))) Написал сообщение и понял))) Все ВСЕ ОК!!!))) ВСЕМ ОГРОМНОЕ СПАСИБО!!!
Рабочий код:
walk1 = function(){;
if(_root.event1._x < 50){;
_root.event1._x += 3;
_root.event2._x += 3;
_root.event3._x += 3;
_root.event4._x += 3;
}else{;
_root.event1._x -= 0;
_root.event2._x -= 0;
_root.event3._x -= 0;
_root.event4._x -= 0;
clearInterval(tmp);
};
};
this.but_left.onPress = function() {
tmp = setInterval(walk1, 1, -10);
};
walk2 = function(){;
if(_root.event1._x > -250){;
_root.event1._x -= 3;
_root.event2._x -= 3;
_root.event3._x -= 3;
_root.event4._x -= 3;
}else{;
_root.event1._x -= 0;
_root.event2._x -= 0;
_root.event3._x -= 0;
_root.event4._x -= 0;
clearInterval(tmp);
};
};
this.but_right.onPress = function() {
tmp = setInterval(walk2, 1, -10);
};
P.S.
Данный код можно исполззовать для галереи)))
AzagThoth
02.11.2009, 18:47
this.but_left.onPress = function() {
tmp = setInterval (walk,1);
};
walk = function(){
if(_root.event1._x < 50){
_root.event1._x += 3;
_root.event2._x += 3;
_root.event3._x += 3;
_root.event4._x += 3;
}else{
_root.event1._x -= 0;
_root.event2._x -= 0;
_root.event3._x -= 0;
_root.event4._x -= 0;
clearInterval(tmp)
}
}
Может так попробовать?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.