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

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

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

Регистрация: Nov 2008
Сообщений: 894
Записей в блоге: 1
вы пишише на ас3, так и используте возможности этого языка, на данном этапе у вас ас2шный подход, так вы только больше гемороя получите.

Старый 21.10.2010, 12:36
Dr_Bra вне форума Посмотреть профиль Отправить личное сообщение для Dr_Bra Посетить домашнюю страницу Dr_Bra Найти все сообщения от Dr_Bra
  № 12  
Ответить с цитированием
Dr_Bra
 
Аватар для Dr_Bra

Регистрация: Nov 2008
Адрес: Moscow
Сообщений: 493
Отправить сообщение для Dr_Bra с помощью ICQ
как бы учусь, не в полной мере понимаю все возможности as3 и преимущества, если можно дайте более конкретный коммент.

сейчас у меня 3 класса:
Main
Food
Friend

а смысл такой: нужно перетаскивать еду на друзей, когда каждый друг получил кусочек – ура, пакшот, финальные титры!)

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

Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
Я в свое время реализовывал дрэгменеджер следующим образом:

Тот, на кого можно перетаскивать предмет реализует интерфейс IAccepter в котором, грубо говоря, есть метод dropHandler(object:IDraggableObject), который вызывается DragManager'ом.

DragManager — синглтон.

У DragManager'a регистрируются все объекты, которые хотят реагировать на перетаскивание на них объекта, и все объекты, которые должны быть перетаскиваемыми.

IAccepter'ов он подписывает, грубо говоря, на MOUSE_UP.
Перетаскивание IDraggableObject'ов рулит тот-же DragManager, startDtag(), stopDrag() и прочее.

Когда начинается перетаскивание, дрэгменеджер записывает ссылку на перетаскиваемый объект (_activeDraggableObject), и при срабатывании у IAccepter'а MOUSE_UP, вызывает функцию IAccepter.dropHandler, передавая в нее сохраненную ссылку на текущий перетаскиваемый объект.

IAccepter волен поступать с тем, что на него перетащили как ему вздумается, например диспатчить событие о том, что на него что-то перетащили

Естественно, описание упрощенное.
Возможно и не лучшее решение, но мне было с ним вполне комфортно и удобно жить
__________________
#flasher@irc.trg.ru:6667

Старый 21.10.2010, 13:00
Dr_Bra вне форума Посмотреть профиль Отправить личное сообщение для Dr_Bra Посетить домашнюю страницу Dr_Bra Найти все сообщения от Dr_Bra
  № 14  
Ответить с цитированием
Dr_Bra
 
Аватар для Dr_Bra

Регистрация: Nov 2008
Адрес: Moscow
Сообщений: 493
Отправить сообщение для Dr_Bra с помощью ICQ
Как считаете, обойтись без синглтона здесь возможно?

Я еще не накопил достаточно "маны"), не разу не использовал синглтон, поэтому для меня это сложновато.

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

Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
Цитата:
Сообщение от Dr_Bra Посмотреть сообщение
Как считаете, обойтись без синглтона здесь возможно?

Я еще не накопил достаточно "маны"), не разу не использовал синглтон, поэтому для меня это сложновато.
Ну синглтон он для удобства, чтобы можно было обратиться к нему из любого IAccepter'a и IDraggebleObject'a, но можно и пробрасывать ссылку на этот менеджер любому из них.
__________________
#flasher@irc.trg.ru:6667

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

Регистрация: Nov 2008
Адрес: Moscow
Сообщений: 493
Отправить сообщение для Dr_Bra с помощью ICQ
сейчас получается так:
мы схватили "еду", тащим ее на "друга", срабатывает метод over, но но 50 строка не выполняется
Код AS3:
TypeError: Error #1006: value is not a function.
	at com::Friend/over()[/Volumes/work/Projects/KFC/KFC-202477/banner_800x250/com/Friend.as:50]
Код AS3:
private function over(e:MouseEvent):void
		{
			if((this.root as Main).take == true)
			{				
				myTween = new Tween(this, "y", Strong.easeOut, _y, _y-70, 5, false);
				myTween.addEventListener(TweenEvent.MOTION_FINISH, tweenFinishd, false, 0, true);
				this.gotoAndStop(2);
 
				if((this.root as Main).cursor.hitTestObject(this))
				{	
					//  условие для 1-го кусочка
					if((this.root as Main).currentDragged == "f1_mc")
					{	
						piple = this.name;
						(this.root as Main).f1.alpha = 0;
 
						if(piple == "p1_mc")
						{
							trace((this.root as Main).currentDragged)//почему - то выводит сразу 2 одинаковых имени ("f1_mc" - этот объект был наведен на экземпляр Friend) 
							(this.root as Main).s1.alpha = 1;// ругается на эту строку
						}
					}
 
				}
 
			}
 
		}

Старый 21.10.2010, 13:54
nOobCrafter вне форума Посмотреть профиль Отправить личное сообщение для nOobCrafter Найти все сообщения от nOobCrafter
  № 17  
Ответить с цитированием
nOobCrafter

Регистрация: Nov 2008
Сообщений: 894
Записей в блоге: 1
в вашем случае роль манагера может выполнять класс Main т.к. логика по контролю перетягиваемых обьектом описана там. Вам просто расказали про универсальный подход, а делать вы можете как вам удобнее.

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

Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
Цитата:
Сообщение от Dr_Bra Посмотреть сообщение
сейчас получается так:
мы схватили "еду", тащим ее на "друга", срабатывает метод over, но но 50 строка не выполняется
Код AS3:
TypeError: Error #1006: value is not a function.
	at com::Friend/over()[/Volumes/work/Projects/KFC/KFC-202477/banner_800x250/com/Friend.as:50]
Я описал логику с намеком на то, что может все стоит переписать с чистого листа?
По вашим кускам кода не понятно что у вас там происходит, и откуда взялась ошибка. Попробуйте выложить архив с вашими исходниками, может будет не лень посмотреть
__________________
#flasher@irc.trg.ru:6667

Старый 21.10.2010, 14:36
Dr_Bra вне форума Посмотреть профиль Отправить личное сообщение для Dr_Bra Посетить домашнюю страницу Dr_Bra Найти все сообщения от Dr_Bra
  № 19  
Ответить с цитированием
Dr_Bra
 
Аватар для Dr_Bra

Регистрация: Nov 2008
Адрес: Moscow
Сообщений: 493
Отправить сообщение для Dr_Bra с помощью ICQ
проблема в классе Friend, не могу правильно задать условие и обратиться к нужным объектам на сцене.
Немного объясню что в fla:
кусочек курицы f1_mc перетаскиваем на самого левого "кудрявого" друга.
этот кусок должен исчезнуть, "кудрявый" друг перестать реагировать на ROLL_OVER и внутри друга должен появиться красный пар (s1.alpha = 1)

архив тут: http://***********/19875011

Добавлено через 24 минуты
я вот так вот переделал класс Friend
Код AS3:
package com
{
	import com.Food;
	import com.Main;
 
	import fl.transitions.Tween;
	import fl.transitions.TweenEvent;
	import fl.transitions.easing.*;
 
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.MouseEvent;
 
	public class Friend extends MovieClip
	{
		private static var _y:int;
		private var myTween:Tween;
 
		public function Friend()
		{
			this.addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init (e:Event):void
		{	
			_y = this.y;
			this.addEventListener(MouseEvent.ROLL_OVER, over, false, 0, true);			
		}
 
		private function over(e:MouseEvent):void
		{
			if((this.root as Main).take == true)
			{				
				myTween = new Tween(this, "y", Strong.easeOut, _y, _y-70, 5, false);
				myTween.addEventListener(TweenEvent.MOTION_FINISH, tweenFinishd, false, 0, true);
				this.gotoAndStop(2);
 
				if((this.root as Main).cursor.hitTestObject(this))
				{	
					switch((this.root as Main).currentDragged)
					{
						case "f1_mc":
							(this.root as Main).piple = this.name;
							(this.root as Main).f1.alpha = 0;
							stopFriend();
							break;
 
						case "f2_mc":
							(this.root as Main).piple = this.name;
							(this.root as Main).f2.alpha = 0;
							stopFriend();
							break;
 
						case "f3_mc":
							(this.root as Main).piple = this.name;
							(this.root as Main).f3.alpha = 0;
							stopFriend();
							break;				
					}
				}
			}
		}
 
		private function tweenFinishd(e:TweenEvent):void
		{
			myTween = new Tween(this, "y", Strong.easeIn, this.y, _y, 5, false);
			myTween.addEventListener(TweenEvent.MOTION_FINISH, shutUp, false, 0, true);
		}
 
		private function shutUp(e:TweenEvent):void
		{
			this.gotoAndStop(1);
		}
 
		public function stopFriend():void
		{			
			this.removeEventListener(MouseEvent.ROLL_OVER, over);
			(this.root as Main).num ++;
			//trace((this.root as Main).num)
 
			if((this.root as Main).num == 3)
			{
				trace("!!!!!!!!!!!!!!!!!!!!!")
				(this.root as Main).allRight();// эх запустить бы этотметод!!!
 
			}			
		}
	}
}
но тут не получается вызвать метод allRight в Main, ну и забил пока на пар

Добавлено через 1 час 54 минуты
а есть какой - нибудь другой способ вызвать метод
Код AS3:
(this.root as Main).allRight();
может не совсем правильный, но что бы заработало?)

Добавлено через 4 часа 13 минут
нужно было завести статическое свойство и через него обращаться
типо:
Код AS3:
//в главном классе 
		public static var instanc:Main;
//...
			instanc = this;
и из дополнительного обращаться так:
Код AS3:
Main.instanc.allRight();

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

Теги
function , public , static

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

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


 


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


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