Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 02.11.2009, 13:03
rockerror вне форума Посмотреть профиль Отправить личное сообщение для rockerror Найти все сообщения от rockerror
  № 1  
Ответить с цитированием
rockerror
 
Аватар для rockerror

Регистрация: Jul 2009
Сообщений: 40
По умолчанию Нажатие кнопки и движение мувиков

Уважаемые Дамы и Господа флэшеры. Вновь наступил на похожие грабли...

Задача: есть 4 мувика (позже будет больше). На сцену влазит только 3 (так задумано). Нужно сделать 2 кнопки, чтобы перематывать мувики на сцене вправо и влево.

Как решал: создал 2 кнопки (далее описывать буду только левую, мотающую влево, ибо правая аналогична), которым присвоил код:

Код AS1/AS2:
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 минуту
Вынес код за пределы кнопки и чутка подправил, теперь он выглядит вот так:

Код AS1/AS2:
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 минут
Переписал вот так:
Код AS1/AS2:
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 минут
не помогло...

Старый 02.11.2009, 15:06
AzagThoth вне форума Посмотреть профиль Отправить личное сообщение для AzagThoth Найти все сообщения от AzagThoth
  № 2  
Ответить с цитированием
AzagThoth
 
Аватар для AzagThoth

блогер
Регистрация: Sep 2009
Сообщений: 309
Записей в блоге: 4
Отправить сообщение для AzagThoth с помощью ICQ
Если хочешь сделать плавно - тебе понадобится выделенная функция которая будет вызываться из событийного обработчика нажатия кнопки посредством setInterval после вызова блокируешь кнопку, по завершении определённого количества вызовов функции в вызываемой функции делаешь clearInterval и разблокируешь кнопку и всё будет как тебе надо) Надеюсь помог.

Старый 02.11.2009, 15:42
rockerror вне форума Посмотреть профиль Отправить личное сообщение для rockerror Найти все сообщения от rockerror
  № 3  
Ответить с цитированием
rockerror
 
Аватар для rockerror

Регистрация: Jul 2009
Сообщений: 40
Спасибо Гипербореец))))))) Пока не попробовал, то, что ты предложил, но... Нельза ли немного конкретнее, ну всмысле с примером кода? ибо у меня туго с золотым корнем и я еще не очень втыкаю в магию ActionScript)))

Попробовал через цикл, но где-то опять накосячил...

Код AS1/AS2:
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;
	}
};

Старый 02.11.2009, 15:54
AzagThoth вне форума Посмотреть профиль Отправить личное сообщение для AzagThoth Найти все сообщения от AzagThoth
  № 4  
Ответить с цитированием
AzagThoth
 
Аватар для AzagThoth

блогер
Регистрация: Sep 2009
Сообщений: 309
Записей в блоге: 4
Отправить сообщение для AzagThoth с помощью ICQ
В твоём случае должно быть как-то так:
Код AS1/AS2:
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;
};


Последний раз редактировалось AzagThoth; 02.11.2009 в 15:56.
Старый 02.11.2009, 16:02
fessor вне форума Посмотреть профиль Отправить личное сообщение для fessor Найти все сообщения от fessor
  № 5  
Ответить с цитированием
fessor

Регистрация: Oct 2009
Сообщений: 101
код не тестировал, плавное движение возможно либо нарисовать либо зациклить кадры со скриптом, либо использовать setInterval() и плавнее всего получается рисованное...
Код AS1/AS2:
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);
};

Старый 02.11.2009, 16:05
rockerror вне форума Посмотреть профиль Отправить личное сообщение для rockerror Найти все сообщения от rockerror
  № 6  
Ответить с цитированием
rockerror
 
Аватар для rockerror

Регистрация: Jul 2009
Сообщений: 40
Благодарю, пытаюсь вкурить...))

Добавлено через 3 минуты
стоп, второе это дополнение к первому или альтернатива?

Старый 02.11.2009, 16:21
Bitcoolman вне форума Посмотреть профиль Отправить личное сообщение для Bitcoolman Найти все сообщения от Bitcoolman
  № 7  
Ответить с цитированием
Bitcoolman

Регистрация: Sep 2009
Адрес: Челябинск
Сообщений: 43
альтернатива

Старый 02.11.2009, 17:22
rockerror вне форума Посмотреть профиль Отправить личное сообщение для rockerror Найти все сообщения от rockerror
  № 8  
Ответить с цитированием
rockerror
 
Аватар для rockerror

Регистрация: Jul 2009
Сообщений: 40
Протестил оба варианта. Оба рабочие, однако о плавности не идет и речи. КАждое смещение происходит примерно через секунду после предыдущего. С чем это связано? Можно ли обеспечить непрерывность движения?

Добавлено через 11 минут
С этим разобрался. работаю с первым вариантом, т.е. сейчас код выглядит вот так:
Код AS1/AS2:
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 минут
Хмхмхм... Еще немного переработал... как мне кажется в верном ключе... но проблему не решил....(((( Теперь все выглядит вот так:
Код AS1/AS2:
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 минут
хм в коде вместо &gt знак >

Добавлено через 1 час 13 минут
Ура! Друзья мои, всем огромное спасибо)) Довел код до необходимого результата!!! НО... Теерь кнопка срабатывает только после 2-х нажатий... Не могу понять почему... СЕйчас код выглядит вот так:

Код AS1/AS2:
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 минут
Хах))) Написал сообщение и понял))) Все ВСЕ ОК!!!))) ВСЕМ ОГРОМНОЕ СПАСИБО!!!

Рабочий код:

Код AS1/AS2:
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.
Данный код можно исполззовать для галереи)))

Старый 02.11.2009, 18:47
AzagThoth вне форума Посмотреть профиль Отправить личное сообщение для AzagThoth Найти все сообщения от AzagThoth
  № 9  
Ответить с цитированием
AzagThoth
 
Аватар для AzagThoth

блогер
Регистрация: Sep 2009
Сообщений: 309
Записей в блоге: 4
Отправить сообщение для AzagThoth с помощью ICQ
Код AS1/AS2:
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)
	}
}
Может так попробовать?
__________________
Играй. Это жизнь.
Всё повторяется. Играй.

Создать новую тему Ответ Часовой пояс GMT +4, время: 14:24.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
движение мувика

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 14:24.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.