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

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

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

Регистрация: Jun 2010
Сообщений: 16
По умолчанию перетаскивание объектов с помощью мыши

Здравствуйте все =)

в общем есть 2 класса: главный в котором вычисляются все параметры объектов и добавляются в список отображения, и класс конструктор для объектов, в который передаются только параметры этих объектов, а конструктор на их основе создаёт 3 объекта частично накладываемых друг на друга.

мне нужно, чтобы по нажатию мыши на любой из этих 3 объектов и дальнейшему перемещению курсора (до отпускания кнопки), все 3 объекта перетаскивались.

искал в инете, наткнулся на такой код:
Код AS3:
// This code creates a drag-and-drop interaction using the mouse-following 
// technique. 
// circle is a DisplayObject (e.g. a MovieClip or Sprite instance). 
 
import flash.events.MouseEvent; 
 
var offsetX:Number; 
var offsetY:Number; 
 
// This function is called when the mouse button is pressed. 
function startDragging(event:MouseEvent):void 
{ 
    // Record the difference (offset) between where 
    // the cursor was when the mouse button was pressed and the x, y 
    // coordinate of the circle when the mouse button was pressed. 
    offsetX = event.stageX - circle.x; 
    offsetY = event.stageY - circle.y; 
 
    // tell Flash Player to start listening for the mouseMove event 
    stage.addEventListener(MouseEvent.MOUSE_MOVE, dragCircle); 
} 
 
// This function is called when the mouse button is released. 
function stopDragging(event:MouseEvent):void 
{ 
    // Tell Flash Player to stop listening for the mouseMove event. 
    stage.removeEventListener(MouseEvent.MOUSE_MOVE, dragCircle); 
} 
 
// This function is called every time the mouse moves, 
// as long as the mouse button is pressed down. 
function dragCircle(event:MouseEvent):void 
{ 
    // Move the circle to the location of the cursor, maintaining  
    // the offset between the cursor's location and the  
    // location of the dragged object. 
    circle.x = event.stageX - offsetX; 
    circle.y = event.stageY - offsetY; 
 
    // Instruct Flash Player to refresh the screen after this event. 
    event.updateAfterEvent(); 
} 
 
circle.addEventListener(MouseEvent.MOUSE_DOWN, startDragging); 
circle.addEventListener(MouseEvent.MOUSE_UP, stopDragging);
адаптировал этот код под свою программу и добавил trace-ров для отслеживания. но в итоге при нажатии и перемещении соответствующие сообщения в консоль выдаются, но никакого перемещения не происходит. подскажите как можно это исправить?

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

Регистрация: Jul 2007
Адрес: Гражданин Российской Федерации
Сообщений: 1,122
Отправить сообщение для KiL33 с помощью ICQ
на скорую руку, типа того

Код AS3:
package {
 
	import controls.CommonObjects;
 
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
 
	public class Main extends Sprite {
 
		private var cObject:CommonObjects;
		private var t:TextField;
 
		//CONSTRUCTOR
		public function Main() {
 
			init();
 
		}
		private function init():void {
 
			t = new TextField();
			t.border=true;
			t.autoSize = TextFieldAutoSize.LEFT;
			addChild(t);
 
			cObject = new CommonObjects();
			addChild(cObject);
 
			cObject.object1.addEventListener(MouseEvent.MOUSE_DOWN, dragObj1);
			cObject.object2.addEventListener(MouseEvent.MOUSE_DOWN, dragObj2);
			cObject.object3.addEventListener(MouseEvent.MOUSE_DOWN, dragObj3);
			cObject.object1.addEventListener(MouseEvent.MOUSE_UP, stopDragObj);
			cObject.object2.addEventListener(MouseEvent.MOUSE_UP, stopDragObj);
			cObject.object3.addEventListener(MouseEvent.MOUSE_UP, stopDragObj);
 
		}
 
		private function dragObj1(e:MouseEvent):void {
			cObject.startDrag()	
			t.text = "obj_1"
		}
		private function dragObj2(e:MouseEvent):void {
			cObject.startDrag()	
			t.text = "obj_2"
		}
		private function dragObj3(e:MouseEvent):void {
			cObject.startDrag()	
			t.text = "obj_3"
		}
		private function stopDragObj(e:MouseEvent):void {
			cObject.stopDrag()	
		}
	}//class
}//package
Код AS3:
package controls {
	import components.Box;
 
	import flash.display.Sprite;
 
	public class CommonObjects extends Sprite {
 
		public var object1:Box;
		public var object2:Box;
		public var object3:Box;
 
		public function CommonObjects(){
 
			init()
 
		}
 
		private function init():void {
 
			object1 = new Box();
			addChild(object1);
			object1.x = 0
 
			//Object2	
			object2 = new Box();
			addChild(object2);
			object2.y = object1.height+10;
 
			//Object3	
			object3 = new Box();
			addChild(object3);
			object3.y = object1.height + object2.y+10;
		}
 
	}//class
}//package
Код AS3:
package components {
 
	import flash.display.Sprite;
	import flash.events.MouseEvent;
 
	public class Box extends Sprite {
 
		//CONSTRUCTOR
		public function Box() {
 
		init();
 
		}
	private function init():void {
 
		var sBox:Sprite = new Sprite();
		sBox.graphics.beginFill(0x000000);
		sBox.graphics.drawRect(0, 0, 30, 30);
		sBox.graphics.endFill();
		addChild(sBox); 
	}
 
	}//class
}//package

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

Регистрация: Jun 2010
Сообщений: 16
да, объекты стали двигаться, спасибо. ещё вопрос возник... эти объекты добавляются в блоке for-each-in при обработке XML файла. и двигается только последний добавленный объект. как сделать чтобы любой из них был подвижным?

Старый 11.06.2010, 13:21
Хемуль вне форума Посмотреть профиль Отправить личное сообщение для Хемуль Найти все сообщения от Хемуль
  № 4  
Ответить с цитированием
Хемуль
Квач
 
Аватар для Хемуль

Регистрация: Sep 2006
Адрес: Украина, Киев
Сообщений: 1,526
Цитата:
Сообщение от AngelDeath Посмотреть сообщение
эти объекты добавляются в блоке for-each-in при обработке XML файла. и двигается только последний добавленный объект. как сделать чтобы любой из них был подвижным?
К сожалению, никто в мире не знает, что вы делаете с обьектами при загрузке XML. ^_^
Чтобы ответить вам на ваш вопрос, необходимо видеть код.
__________________
Да не нужно тебе читать документацию по Flash и AS от Adobe - ты слишком умён для этого

Старый 11.06.2010, 13:28
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 5  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Ну как же никто не знает. Сам топикстартер обязан знать)
Так вот, присоединять слушателя нужно в самом цикле. Как именно - ваше дело. Цикл выглядеть должен примерно так:
Код AS3:
for each (var child:XML in xml) {
	var object:ObjectClass = new ObjectClass();
	object.addEventListener("mouseDown", onMouseDown);
	addChild(object);
}
Добавлено через 22 минуты
Или вообще сделать метод перетаскивания в классе вашего объекта.
__________________
тут я

Старый 11.06.2010, 17:34
AngelDeath вне форума Посмотреть профиль Отправить личное сообщение для AngelDeath Найти все сообщения от AngelDeath
  № 6  
Ответить с цитированием
AngelDeath

Регистрация: Jun 2010
Сообщений: 16
да эту проблему уже смог решить, но все равно спасибо =)

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

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

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


 


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


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