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

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

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

Регистрация: Jan 2008
Сообщений: 15
По умолчанию Соединить точки линиями

Есть мини игра, где надо соединять объекты линиями. В некоторых случаях возникает ошибка.
Код:
ArgumentError: Error #2025: Предоставленный DisplayObject должен быть дочерним элементом вызывающего объекта.
	at flash.display::DisplayObjectContainer/removeChild()
	at quiz_fla::MainTimeline/makeThread()
Никак не могу разобраться, прошу помощи!
Код AS3:
function makeThread(e:MouseEvent) {
	// нажатие на объект из первого столбца
	var dot = e.currentTarget;
	if(dot.line) {
		removeChild(dot.line);
		dot.line = null;
		if(dot.line)
			dot.line.num2 = null;
 
	}
	addEventListener(Event.ENTER_FRAME, drawLine);
 
	function stopDrawing(e:MouseEvent) {
		// Повторное нажатие мыши
 
		for(var i:int = 0;i<dots2.length;i++) {
			if(dots2[i].hitTestPoint(mouseX,mouseY,true)) {
			// Если линия подведена к объекту из второго столбца
				if(dots2[i].line) {
					removeChild(dots2[i].line);
					dots2[i].line = null;
					if(dots2[i].line)
						dots2[i].line.num1 = null;
				}
				var newLine:MovieClip = sprite;
 
				dot.line = newLine;
				dots2[i].line = newLine;
				newLine.num1 = dot;
				newLine.num2 = dots2[i];
				lines.push(newLine);
				sprite = null;
				break;
			}
		}
		if(sprite) {
			removeChild(sprite);
			sprite = null;
		}
		removeEventListener(MouseEvent.MOUSE_DOWN, stopDrawing);
		removeEventListener(Event.ENTER_FRAME, drawLine);
	}
 
	function drawLine(e:Event) {
		if(sprite) {
			removeChild(sprite);
			sprite = null;
		}
		sprite = new MovieClip();
		sprite.graphics.lineStyle(4,0x003366,0.7);
		sprite.graphics.moveTo(dot.x+dot.width/2,dot.y+dot.height/2);
		sprite.graphics.lineTo(mouseX,mouseY);
 
		addChild(sprite);
		addEventListener(MouseEvent.MOUSE_DOWN, stopDrawing);
	}
}


Последний раз редактировалось iNils; 11.07.2013 в 13:35.
Старый 11.07.2013, 12:53
Snut вне форума Посмотреть профиль Отправить личное сообщение для Snut Посетить домашнюю страницу Snut Найти все сообщения от Snut
  № 2  
Ответить с цитированием
Snut
 
Аватар для Snut

Регистрация: Jun 2005
Адрес: Москва
Сообщений: 489
Отправить сообщение для Snut с помощью ICQ Отправить сообщение для Snut с помощью MSN Отправить сообщение для Snut с помощью Skype™
проверяй наличие sprite.parent или dot.line.parent
__________________
Работаю

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

Регистрация: Jan 2008
Сообщений: 15
Все, разобрался, поменял на
Код AS3:
if(dot.line) {
	removeChild(dot.line);
	dot.line.num2.line = null;
	dot.line = null;
}
и
Код AS3:
if(dots2[i].line) {
	removeChild(dots2[i].line);
	dots2[i].line.num1.line = null;
	dots2[i].line = null;
 
}

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

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

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


 


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


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