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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.07.2008, 15:38
Dear.D вне форума Посмотреть профиль Отправить личное сообщение для Dear.D Найти все сообщения от Dear.D
  № 1  
Ответить с цитированием
Dear.D

Регистрация: May 2008
Сообщений: 66
По умолчанию рисование мувика курсором

В ролике кликаю мышью и не отпуская правой кнопки двигаю. Надо в этот момент нарисовать прямоугольник так, чтобы после onRelease вместо прямоугольника на сцене остался мувик. Ниже код которым я пытаюсь рисовать мувик, но не могу допереть, как удалять промежуточные линии (во время MouseMove должен оставаться один прямоугольник и растягиваться)
Код:
this.createEmptyMovieClip("mc_mc", this.getNextHighestDepth());
mc_mc.lineStyle(0, 0, 0);
mc_mc.beginFill(0, 0);
mc_mc.moveTo(0, 0);
mc_mc.lineTo(550, 0);
mc_mc.lineTo(550, 400);
mc_mc.lineTo(0, 400);
mc_mc.lineTo(0, 0);
mc_mc.endFill();
mc_mc.onPress = function() {
	var x = this._xmouse, y = this._ymouse;
	this.createEmptyMovieClip("create_mc", this.getNextHighestDepth());
	this.onMouseMove = function() {
		var dx = this._xmouse, dy = this._ymouse;
		this.create_mc.lineStyle(2, 0, 100);
		this.create_mc.moveTo(x, y);
		this.create_mc.lineTo(dx, y);
		this.create_mc.lineTo(dx, dy);
		this.create_mc.lineTo(x, dy);
		this.create_mc.lineTo(x, y);
	};
};
mc_mc.onRelease = mc_mc.onReleaseOutside=function () {
	this.create_mc.removeMovieClip();
};

Старый 10.07.2008, 16:03
olexandr вне форума Посмотреть профиль Отправить личное сообщение для olexandr Посетить домашнюю страницу olexandr Найти все сообщения от olexandr
  № 2  
Ответить с цитированием
olexandr
 
Аватар для olexandr

Регистрация: Aug 2007
Адрес: Ukraine, Kyiv
Сообщений: 643
Отправить сообщение для olexandr с помощью ICQ Отправить сообщение для olexandr с помощью MSN Отправить сообщение для olexandr с помощью Skype™
Код:
this.onMouseDown = function() {
	var sub:MovieClip = this.createEmptyMovieClip('sub'+this.getNextHighestDepth(), this.getNextHighestDepth());
	sub._x = this._xmouse;
	sub._y = this._ymouse;
	this.onMouseMove = function() {
		sub.clear();
		sub.lineStyle(2,0,100);
		sub.moveTo(0,0);
		sub.lineTo(0,this._ymouse-sub._y);
		sub.lineTo(this._xmouse-sub._x,this._ymouse-sub._y);
		sub.lineTo(this._xmouse-sub._x,0);
		sub.lineTo(0,0);
	};
};
this.onMouseUp = function() {
	delete this.onMouseMove;
};
__________________
сайт, vk

Старый 10.07.2008, 16:44
Dear.D вне форума Посмотреть профиль Отправить личное сообщение для Dear.D Найти все сообщения от Dear.D
  № 3  
Ответить с цитированием
Dear.D

Регистрация: May 2008
Сообщений: 66
круто, спасибо.
А я не знал, что для onMouseDown не нужен объект в виде клипа.

А как мне убить рисовалку, когда надо перетащить нарисованный мувик?
Еще, прежде чем нарисованный мувик станет драгабельным нужен один клик, как от этого избавиться?
Код:
this.onMouseDown = function() {
	for (i=1; i<200; i++) {
		this["sub"+i].onPress = function() {
			this.startDrag();
		};
		this["sub"+i].onRelease = this["sub"+i].onReleaseOutside=function () {
			stopDrag();
		};
	}
	var N = 1+this.getNextHighestDepth();
	var nam:String = "sub"+N;
	var sub:MovieClip = this.createEmptyMovieClip(nam, this.getNextHighestDepth());
	sub._x = this._xmouse;
	sub._y = this._ymouse;
	this.onMouseMove = function() {
		sub.clear();
		sub.lineStyle(2, 0, 100);
		sub.beginFill(0x0000FF, 50);
		sub.moveTo(0, 0);
		sub.lineTo(0, this._ymouse-sub._y);
		sub.lineTo(this._xmouse-sub._x, this._ymouse-sub._y);
		sub.lineTo(this._xmouse-sub._x, 0);
		sub.lineTo(0, 0);
		sub.endFill();
	};
};
this.onMouseUp = function() {
	delete this.onMouseMove;
};
А может так, зажимаю shift + onMouseDown - рисую, просто onMouseDown - перетаскиваю.
Или отловить, что курсор над мувиком, тогда надо отключить рисовалку. Как?


Последний раз редактировалось Dear.D; 11.07.2008 в 11:50.
Старый 10.07.2008, 18:20
olexandr вне форума Посмотреть профиль Отправить личное сообщение для olexandr Посетить домашнюю страницу olexandr Найти все сообщения от olexandr
  № 4  
Ответить с цитированием
olexandr
 
Аватар для olexandr

Регистрация: Aug 2007
Адрес: Ukraine, Kyiv
Сообщений: 643
Отправить сообщение для olexandr с помощью ICQ Отправить сообщение для olexandr с помощью MSN Отправить сообщение для olexandr с помощью Skype™
>> А я не знал, что для onMouseDown не нужен объект в виде клипа.
Так ведь мы пишем в руте, а рут тоже является мувиком

>> Или отловить, что курсор над мувиком, тогда надо отключить рисовалку
Именно так!

p.s. Кстати, на форуме запрещено создавать несколько сообщений подряд. Объедините их!
__________________
сайт, vk

Старый 11.07.2008, 11:37
Dear.D вне форума Посмотреть профиль Отправить личное сообщение для Dear.D Найти все сообщения от Dear.D
  № 5  
Ответить с цитированием
Dear.D

Регистрация: May 2008
Сообщений: 66
Совсем не понял, как здесь присваиваются имена клипам.
Рисую первый клип, по идее N = 1+свободная глубина (0). Когда этот клип пытаюсь перетаскивать trace выдает имя sub100. В коде не создается клип с таким именем. Как так?
Как следствие, последующие разы рисуются клипы с неизвестными мне именами, поэтому их не получается таскать.
Код:
function drawMovie() {
	var N:Number = 1+this.getNextHighestDepth();
	var nam:String = "sub"+N;
	var sub:MovieClip = this.createEmptyMovieClip(nam, this.getNextHighestDepth());
	sub._x = this._xmouse;
	sub._y = this._ymouse;
	this.onMouseMove = function() {
		sub.clear();
		sub.lineStyle(2, 0, 100);
		sub.beginFill(0x0000FF, 50);
		sub.moveTo(0, 0);
		sub.lineTo(0, this._ymouse-sub._y);
		sub.lineTo(this._xmouse-sub._x, this._ymouse-sub._y);
		sub.lineTo(this._xmouse-sub._x, 0);
		sub.lineTo(0, 0);
		sub.endFill();
	};
}
this.onMouseDown = function() {
	for (i=1; i<=100; i++) {
		this["sub"+i].onPress = function() {
			delete this._parent.onMouseMove;
			this.startDrag();
			trace(this);
		};
		this["sub"+i].onRelease = this["sub"+i].onReleaseOutside=function () {
			stopDrag();
		};
		drawMovie();
	}
};
this.onMouseUp = function() {
	delete this.onMouseMove;
};

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

блогер
Регистрация: Nov 2007
Адрес: Киев
Сообщений: 557
Записей в блоге: 2
Как это не создается?
Этот цикл:
Код:
for (i=1; i<=100; i++) {
создает вам сотню мувиков сразу.

Старый 11.07.2008, 12:52
Dear.D вне форума Посмотреть профиль Отправить личное сообщение для Dear.D Найти все сообщения от Dear.D
  № 7  
Ответить с цитированием
Dear.D

Регистрация: May 2008
Сообщений: 66
В том то и дело, что мувики создаются createEmptyMovieClip, не важно, что эта функция внутри цикла. К тому же переменная i никак не связана с созданием новых имен, я ее ввел, чтобы отловить уже созданные мувики (иначе просто не знаю как к ним обращаться).
Мой мозг не выдерживает, я уже запутался

Мож где почитать, тыкните пальцем.


Последний раз редактировалось Dear.D; 11.07.2008 в 12:57.
Старый 11.07.2008, 13:09
crazyone вне форума Посмотреть профиль Отправить личное сообщение для crazyone Найти все сообщения от crazyone
  № 8  
Ответить с цитированием
crazyone
 
Аватар для crazyone

блогер
Регистрация: Nov 2007
Адрес: Киев
Сообщений: 557
Записей в блоге: 2
Цитата:
В том то и дело, что мувики создаются createEmptyMovieClip, не важно, что эта функция внутри цикла.
Как это неважно? Эта функция у вас вызывается сто раз, вот она и создает сто мувиков.

Цитата:
К тому же переменная i никак не связана с созданием новых имен, я ее ввел, чтобы отловить уже созданные мувики (иначе просто не знаю как к ним обращаться).
Ну, она-то не связана, но getNextHighestDepth() связана с количеством занятых глубин в флешке, т.е. с количеством мувиков, которые уже созданы.

Зачем вам этот цикл вообще?
Сделайте так, и не морочьте себе голову:
Код:
function drawMovie() {
	var N:Number = 1+this.getNextHighestDepth();
	var nam:String = "sub"+N;
	var sub:MovieClip = this.createEmptyMovieClip(nam, this.getNextHighestDepth());
	sub._x = this._xmouse;
	sub._y = this._ymouse;
	this.onMouseMove = function() {
		sub.clear();
		sub.lineStyle(2, 0, 100);
		sub.beginFill(0x0000FF, 50);
		sub.moveTo(0, 0);
		sub.lineTo(0, this._ymouse-sub._y);
		sub.lineTo(this._xmouse-sub._x, this._ymouse-sub._y);
		sub.lineTo(this._xmouse-sub._x, 0);
		sub.lineTo(0, 0);
		sub.endFill();
	};
        return sub;
}
this.onMouseDown = function() {
      		var mc=drawMovie();
		mc.onPress = function() {
			delete this._parent.onMouseMove;
			this.startDrag();
			trace(this);
		};
		mc.onRelease = this["sub"+i].onReleaseOutside=function () {
			stopDrag();
		};
};
this.onMouseUp = function() {
	delete this.onMouseMove;
};
Если я правильно понял, что вы хотите сделать.

Старый 11.07.2008, 13:44
Dear.D вне форума Посмотреть профиль Отправить личное сообщение для Dear.D Найти все сообщения от Dear.D
  № 9  
Ответить с цитированием
Dear.D

Регистрация: May 2008
Сообщений: 66
Да, все так. А как удалить ненарисованный мувик?

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

блогер
Регистрация: Nov 2007
Адрес: Киев
Сообщений: 557
Записей в блоге: 2
Чтобы удалить нарисованый мувик, вам нужно иметь на него ссылку.
Нужно ее где-нибудь сохранить.
Я не совсем понимаю ваши задачи, попробуйте что-то в этом роде:
Код:
var rectangles:Array=new Array();
function drawMovie() {
	var N:Number = 1+this.getNextHighestDepth();
	var nam:String = "sub"+N;
	var sub:MovieClip = this.createEmptyMovieClip(nam, this.getNextHighestDepth());
	sub._x = this._xmouse;
	sub._y = this._ymouse;
	this.onMouseMove = function() {
		sub.clear();
		sub.lineStyle(2, 0, 100);
		sub.beginFill(0x0000FF, 50);
		sub.moveTo(0, 0);
		sub.lineTo(0, this._ymouse-sub._y);
		sub.lineTo(this._xmouse-sub._x, this._ymouse-sub._y);
		sub.lineTo(this._xmouse-sub._x, 0);
		sub.lineTo(0, 0);
		sub.endFill();
	};
        rectangles.push(sub);
        return sub;
}
this.onMouseDown = function() {
      		var mc=drawMovie();
		mc.onPress = function() {
			delete this._parent.onMouseMove;
			this.startDrag();
			trace(this);
		};
		mc.onRelease = this["sub"+i].onReleaseOutside=function () {
			stopDrag();
		};
                
};
this.onMouseUp = function() {
	delete this.onMouseMove;
};

function deleteMovie(){
    rectangles.pop().removeMovieClip();
}
Тогда в массиве rectangles у вас будут содержаться ссылки на созданные мувики. Функция deleteMovie() будет удалять последний созданный клип.

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

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

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


 


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


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