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

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

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

Регистрация: Jun 2008
Сообщений: 23
Question Задать свойства динамически созданному мувиклипу

У меня создаются мувиклипы таким образом:
this.createEmptyMovieClip("bar"+i,this.getNextHighestDepth());

Теперь я хочу, чтобы их можно было перемещать.
Как задать для него событие onPress -> StartDrag?
Спасибо.


Последний раз редактировалось Noruen; 11.06.2009 в 01:10. Причина: Упростил код
Старый 11.06.2009, 01:26
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 2  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Код AS1/AS2:
var bar:MovieClip = this.createEmptyMovieClip("bar" + i, this.getNextHighestDepth());
bar.onPress = function():Void {
   this.startDrag();
};
 
bar.onRelease = function():Void {
   stopDrag(); // It is a global function
}
P. S. И избавляйтесь от привычки не ставить пробел после запятой, после и до знаков математических операций. Код становится сразу неопрятный.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.


Последний раз редактировалось dimarik; 11.06.2009 в 01:28.
Старый 11.06.2009, 01:29
Noruen вне форума Посмотреть профиль Отправить личное сообщение для Noruen Найти все сообщения от Noruen
  № 3  
Ответить с цитированием
Noruen

Регистрация: Jun 2008
Сообщений: 23
Спасибо, но проблема-то в большом количестве мувиков, я их не собираюсь в цикле перебирать, надо напрямую каждому при создании дать...

Добавлено через 1 минуту
i - переменная, изменяющаяся после создания каждого нового мувика.

Старый 11.06.2009, 01:32
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 4  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Гы. Ну в чем проблема-то? Для 10-ти мувиков:

Код AS1/AS2:
var bar:MovieClip;
 
for (var i:Number = 0; i < 10; i++) {
	bar = this.createEmptyMovieClip("bar" + i, this.getNextHighestDepth());
 
	bar.onPress = function():Void {
		this.startDrag();
	};
 
	bar.onRelease = function():Void {
		stopDrag(); // It is a global function
	};
}
Добавлено через 31 минуту
Цитата:
Сообщение от Noruen Посмотреть сообщение
i - переменная, изменяющаяся после создания каждого нового мувика.
Аха, я догадался, что i там не на масленницу смотрит.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 11.06.2009, 23:34
Noruen вне форума Посмотреть профиль Отправить личное сообщение для Noruen Найти все сообщения от Noruen
  № 5  
Ответить с цитированием
Noruen

Регистрация: Jun 2008
Сообщений: 23
Не работает, даже если сделать так, как, на мой взгляд, проще:

Код AS1/AS2:
this.createEmptyMovieClip("bar" + _global.i, this.getNextHighestDepth());
this["bar" + _global.i].onPress = function():Void {
trace ("yes");
}
Но, как писали Вы, загнав в переменную объект, тоже не выходит.

Цитата:
И избавляйтесь от привычки не ставить пробел после запятой, после и до знаков математических операций. Код становится сразу неопрятный.
Спасибо, буду иметь ввиду :-)

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

Регистрация: Jul 2007
Адрес: Гражданин Российской Федерации
Сообщений: 1,122
Отправить сообщение для KiL33 с помощью ICQ
Почему не работает..?
Вот так нагляднее
Код AS1/AS2:
var bar:MovieClip;
 
for (var i:Number = 0; i<10; i++) {
	bar = this.createEmptyMovieClip("bar"+i, this.getNextHighestDepth());
	bar.beginFill(0xFF0000);
	bar.moveTo(10,10);
	bar.lineTo(100,10);
	bar.lineTo(100,100);
	bar.lineTo(10,100);
	bar.endFill();
 
	bar.onPress = function():Void  {
		this.startDrag();
	};
 
	bar.onRelease = function():Void  {
		stopDrag();// It is a global function
	};
}

Старый 16.06.2009, 23:02
Noruen вне форума Посмотреть профиль Отправить личное сообщение для Noruen Найти все сообщения от Noruen
  № 7  
Ответить с цитированием
Noruen

Регистрация: Jun 2008
Сообщений: 23
Спасибо. Кажется, я понял, почему не выходит, я всё повесил на мувиклип...

Вообще, задача такова: рисoвать прямoугольники и пeрeтаскивать их.

Я сделал это примерно так:

Создал мувиклип "фон", которому прописываю следующий код:
Код AS1/AS2:
onClipEvent (enterFrame) {
 
if (_global.pres==1) {
invbar.clear();
invbar.lineStyle(1, 0x003366,40);
invbar.moveTo(m_x, m_y);
invbar.lineTo(_xmouse, m_y);
invbar.moveTo(_xmouse, m_y);
invbar.lineTo(_xmouse, _ymouse);
invbar.moveTo(_xmouse, _ymouse);
invbar.lineTo(m_x, _ymouse);
invbar.moveTo(m_x, _ymouse);
invbar.lineTo(m_x, m_y);
	}
}
 
on (press) {
	this.createEmptyMovieClip("invbar",this.getNextHighestDepth());
	m_x = _xmouse;
	m_y = _ymouse;
	_global.pres = 1;
}
 
on (release) {
	if (_global.pres==1) {
		new_m_x = _xmouse;
		new_m_y = _ymouse;
		_global.pres=0;
		invbar.clear();
		this.createEmptyMovieClip("bar" + _global.i, this.getNextHighestDepth());
 
		with (this["bar" + _global.i]) {
			lineStyle(2, 0x003366,100);
			moveTo(m_x, m_y);
			lineTo(new_m_x, m_y);
			moveTo(new_m_x, m_y);
			lineTo(new_m_x, new_m_y);
			moveTo(new_m_x, new_m_y);
			lineTo(m_x, new_m_y);
			moveTo(m_x, new_m_y);
			lineTo(m_x, m_y);
		}
		_global.i++;
	}
}
А в основной кадр добавляю объявление переменной:
Код AS1/AS2:
_global.i = 0;
invbar - это прямоугольник, который будет каждый раз перерисовываться от Press'a до Release'a.
bar - прямоугольник, который будет нарисован после Release'a

Я так понимаю, из-за недостатка знаний AS я всё выкрутил очень нехорошо. Но ведь события типа "onClipEvent (enterFrame)" можно прикрепить лишь к мувику.. И мне пришлось на него весь код вешать. Как это можно оптимизировать?
Спасибо.

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

Регистрация: Jul 2007
Адрес: Гражданин Российской Федерации
Сообщений: 1,122
Отправить сообщение для KiL33 с помощью ICQ
Код AS1/AS2:
i = 0;
function lineCreate() {
	invbar.clear();
	invbar.lineStyle(1,0x003366,40);
	invbar.moveTo(m_x,m_y);
	invbar.lineTo(_xmouse,m_y);
	invbar.moveTo(_xmouse,m_y);
	invbar.lineTo(_xmouse,_ymouse);
	invbar.moveTo(_xmouse,_ymouse);
	invbar.lineTo(m_x,_ymouse);
	invbar.moveTo(m_x,_ymouse);
	invbar.lineTo(m_x,m_y);
}
bg.onPress = function() {
	_root.createEmptyMovieClip("invbar",this.getNextHighestDepth());
	_root.onMouseMove = lineCreate;
	m_x = _xmouse;
	m_y = _ymouse;
};
 
bg.onRelease = function() {
	i++;
	new_m_x = _xmouse;
	new_m_y = _ymouse;
	invbar.clear();
	var line_c:MovieClip=_root.createEmptyMovieClip("bar"+i,i);
	delete _root.onMouseMove;
	with (line_c) {
		lineStyle(2,0x003366,100);
		moveTo(m_x,m_y);
		lineTo(new_m_x,m_y);
		moveTo(new_m_x,m_y);
		lineTo(new_m_x,new_m_y);
		moveTo(new_m_x,new_m_y);
		lineTo(m_x,new_m_y);
		moveTo(m_x,new_m_y);
		lineTo(m_x,m_y);
	}
};

Старый 17.06.2009, 11:36
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 9  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
_root выкиньте оттуда.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 17.06.2009, 12:29
KiL33 вне форума Посмотреть профиль Отправить личное сообщение для KiL33 Найти все сообщения от KiL33
  № 10  
Ответить с цитированием
KiL33
 
Аватар для KiL33

Регистрация: Jul 2007
Адрес: Гражданин Российской Федерации
Сообщений: 1,122
Отправить сообщение для KiL33 с помощью ICQ
Цитата:
Сообщение от dimarik Посмотреть сообщение
_root выкиньте оттуда.
Откуда?
От сель, что ли?
Код:
_root.createEmptyMovieClip("invbar",this.getNextHighestDepth());
Тогда invbar будет в bg создаваться, нафиг это надо?
Думаю так надо было.
Код AS1/AS2:
var i:Number = 0;
var oneBigMovie:MovieClip = lines_mc.createEmptyMovieClip("oneBigMovie", 998);
function lineCreate() {
	invbar.clear();
	invbar.lineStyle(1,0x003366,40);
	invbar.moveTo(m_x,m_y);
	invbar.lineTo(_xmouse,m_y);
	invbar.lineTo(_xmouse,_ymouse);
	invbar.lineTo(m_x,_ymouse);
	invbar.lineTo(m_x,m_y);
	var_w = invbar._width;
	var_h = invbar._height;
}
bg.onPress = function() {
	_root.createEmptyMovieClip("invbar",this.getNextHighestDepth());
	this.onMouseMove = lineCreate;
	m_x = _xmouse;
	m_y = _ymouse;
	i++;
	};
bg.onRelease = function() {
	new_m_x = _xmouse;
	new_m_y = _ymouse;
	invbar.clear();
	var line_c:MovieClip = oneBigMovie.createEmptyMovieClip("bar"+i, i);
	line_c._x = new_m_x;
	line_c._y = new_m_y;
	delete this.onMouseMove;
	with (line_c) {
		lineStyle(2,0x003366,100);
		beginFill(0xFF0000,50);
		lineTo(var_w,0);
		lineTo(var_w,var_h);
		lineTo(0,var_h);
		endFill();
	}
	line_c.onPress = function() {
		this.startDrag();
	};
	line_c.onRelease = function() {
		this.stopDrag();
	};
};

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

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

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


 


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


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