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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Закрытая тема
Старый 13.04.2013, 22:15
kaliban92 вне форума Посмотреть профиль Отправить личное сообщение для kaliban92 Найти все сообщения от kaliban92
  № 1  
kaliban92
[+3 14.04.13]

Регистрация: Apr 2013
Сообщений: 14
По умолчанию As2 -> As3, проблемы с преобразованием кода

Привет ребята.


Есть исходник as2 ( выдранный декомпилером )

На сцене много много мувиклипов, на каждом висит код:
********
Итого, не получается добиться того же эффекта что и оригинале. Несколько дней пробую по разному, но результат совершенно не похож на нужный.

Моих знаний as3 видимо не хватает, подскажите что не так с кодом ?
Заранее спасибо за любой ответ.
Вложения
Тип файла: swf нужный эффект.swf (38.2 Кб, 64 просмотров)
Тип файла: swf Лучшее что получилось у меня (1).swf (1.5 Кб, 50 просмотров)


Последний раз редактировалось mooncar; 14.04.2013 в 10:48.
Старый 13.04.2013, 23:02
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 2  
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Есть подозрения на неверную точку начала отсчета координат мыши. в AS3 координаты мыши могут быть как глобальными, на весь стейдж, так и локальными, на мувиклип. Глобальная координата считается от верхнего левого угла стейджа, а локальная от верхнего левого угла (или точки привязки, поправьте если кто точно знает) мувиклипа. У вас скорее всего координата мыши считается локально, у каждого шарика в отдельности.

Могу предложить следующее - заменить слушатель события EnterFrame на MouseMove, при этом сам слушатель насильно привязывать к stage, тогда координаты точно будут абсолютными.
Код AS3:
package 
{
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.MouseEvent;
 
 
 
    public class MC extends MovieClip
    {
        var homex:int;
        var homey:int;
        var magnet:int;
        var x0:int;
        var y0:int;
        var x1:int;
        var y1:int;
 
        var distancex:int;
        var distancey:int;
        var distance:int;
 
        var powery:int;
        var powerx:int;
 
        var forcex:int;
        var forcey:int;
        public function MC()
        {
            this.addEventListener(Event.ADDED_TO_STAGE,addS);
            /*Переносим регистрацию обработчика в слушатель добавления на сцену (нужно слушать именно там, так как только там узнаем ссылку на stage*/
 
 
 
        }
 
        function addS(e:Event):void
        {
            homex=this.x;
            homey=this.y;
            magnet=5000;
           //Слушатель добавляем после получения ссылки на stage (после добавления на экран) и именно на stage, а не на this.
            stage.addEventListener(MouseEvent.MOUSE_MOVE, mousePosition);
        }
 
 
        //Для приличия поменяем название обработчика
        function mousePosition(e:MouseEvent):void
        {
            x0=this.x;// КООРДИНАТЫ В ДАННОМ КАДРЕ
            y0=this.y;
            x1=mouseX;// КООРДИНАТЫ МЫШИ
            y1=mouseY;
            /*
             *Как вариант можно написать
             x1 = stage.mouseX;
             y1 = stage.mouseY;
            */
            distancex=x1-x0;// РАСТОЯНИЕ МЕЖДУ КУРСОРОМ И this ПО       Х И У
            distancey=y1-y0;
 
            distance=Math.sqrt(distancex*distancex+distancey*distancey);//ДИАГОНАЛЬ 
            powerx=this.x-distancex/distance*magnet/distance;
            powery=this.y-distancey/distance*magnet/distance;
            forcex = (forcex + (homex - x0) / 2) / 1.660000;
            forcey = (forcey + (homey - y0) / 2) / 1.660000;
            this.x=powerx+forcex;
            this.y=powery+forcey;
        }
    }
}
Хотя вполне возможно что не придется возиться с проверкой события на stage, а просто поменять две строчки
Код AS3:
x1=mouseX;// КООРДИНАТЫ МЫШИ
y1=mouseY;
на
Код AS3:
x1=stage.mouseX;// КООРДИНАТЫ МЫШИ
y1=stage.mouseY;
Но тогда есть вероятность получения ошибки нулевой ссылки если обработчик нового кадра начнет выполняться раньше добавления на сцену. В общем событие MouseMove или EnterFrame лучше регистрировать по добавлению на сцену, в вашей addS(e);

Попробуйте и так и так, отпишитесь о результатах)

Старый 14.04.2013, 00:21
kaliban92 вне форума Посмотреть профиль Отправить личное сообщение для kaliban92 Найти все сообщения от kaliban92
  № 3  
kaliban92
[+3 14.04.13]

Регистрация: Apr 2013
Сообщений: 14
Спасибо огромное, за помощь.

Частично получилось(после нескольких десятков попыток), координаты определятся правильно. Всей логики уже не упомню, т.е сам не понимаю как работает, но работает ))

Код:
Код AS3:
package 
{
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.MouseEvent;
 
	public class Part extends MovieClip
	{
		var homeX:int;
		var homeY:int;
		var magnet:int;
		var x0:int;
		var y0:int;
		var x1:int;
		var y1:int;
 
		var distancex:int;
		var distancey:int;
		var distance:int;
 
		var powery:int;
		var powerx:int;
 
		var forcex:int;
		var forcey:int;
 
		public function Part()
		{
			this.addEventListener(Event.ADDED_TO_STAGE,addS);
		}
 
		function addS(e:Event):void
		{
			homeX=this.x;
			homeY=this.y;
			magnet=5000;
			//Слушатель добавляем после получения ссылки на stage (после добавления на экран) и именно на stage, а не на this.
			this.addEventListener(Event.ENTER_FRAME, ent_frame);
		}
 
 
		//Для приличия поменяем название обработчика
		function ent_frame(e:Event):void
		{
 
 
 
 
			x0=this.x;
			y0=this.y;
			x1=stage.mouseX;
			y1=stage.mouseY;
 
 
 
			distancex=x1-x0;
			distancey=y1-y0;
 
			distance=Math.sqrt(distancex*distancex+distancey*distancey);
 
			powerx=this.x-distancex/distance*magnet/distance;
			powery=this.y-distancey/distance*magnet/distance;
 
			forcex = (forcex + (homeX - x0) / 2) / 1.660000;
			forcey = (forcey + (homeY - y0) / 2) / 1.660000;
 
			this.x=powerx+forcex;
			this.y=powery+forcey;
 
 
		}
	}
}
Но, осталась 2я проблема. Объекты не возвращаются на свои места. Т.е они не образуют прямую линию какой она была в начале, а смещаются на пару пикселей.
Это очень странно, т.к нигде в коде(вроде как) homeX и homeY не изменяются.

Приведу оригинальный эффект, и то что получилось у меня, для наглядности.
Вложения
Тип файла: swf нужный эффект.swf (38.2 Кб, 12 просмотров)
Тип файла: swf то что получилось у меня.swf (1.5 Кб, 20 просмотров)

Старый 14.04.2013, 00:53
strangedk вне форума Посмотреть профиль Отправить личное сообщение для strangedk Найти все сообщения от strangedk
  № 4  
strangedk
 
Аватар для strangedk

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
Цитата:
Сообщение от kaliban92 Посмотреть сообщение
Привет ребята.
Есть исходник as2 ( выдранный декомпилером )
Я думаю что на этом можно остановиться. Я терпеть не могу когда люди вместо того чтобы думать головой, просто воруют код.
__________________
adobe AS3 manual

Старый 14.04.2013, 01:45
kaliban92 вне форума Посмотреть профиль Отправить личное сообщение для kaliban92 Найти все сообщения от kaliban92
  № 5  
kaliban92
[+3 14.04.13]

Регистрация: Apr 2013
Сообщений: 14
Во первых, этот алгоритм публичен, его неоднократно выкладывали на разные форумы, а автор использовал в своем блоге, в котором значится, что все что нужно, что бы получить исходник - написать ему. У меня не получилось отправить ему сообщения в google+(не умею пользоваться этим сервисом), поэтому и пошел на это. По твоему я преступление совершил ?

Во вторых,лично ты не разу не пользовался чужим кодом ? Не использовал чужие ресурсы ( картинки, фотографии, не качал с торрентов и.т.д ) ?

P.S Я терпеть не могу, когда туповатые лицемеры, вместо того что бы думать головой, обвиняют других в том, в чем виноваты не меньше, а возможно и больше, чем тот кого они обвиняют.

Старый 14.04.2013, 08:17
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 6  
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
kaliban92, правила читали? Несмотря на то, что вы не можете воспользоваться google+`ом для того, чтобы спросить автора об исходнике (удивительно, но "не умею пользоваться этим сервисом"), вы умудрились декомпилировать (а вот это получилось успешно!) и теперь в ас3 переводите, наплевав на какое-либо уважение к чужому труду, по-сути, украв.

Цитата:
Во первых, этот алгоритм публичен, его неоднократно выкладывали на разные форумы
— ну так напишите код as3 с нуля, раз алгоритм публичен. Только и можете, что декомпилировать, а потом десятки раз пытаться запустить и подправить, чтоб работало, не разбираясь с сутью.

Вот и получается абсолютно верное замечание:
Цитата:
Я терпеть не могу когда люди вместо того чтобы думать головой, просто воруют код.
— Вы и головой не думаете (алгоритмы же публичны) и код своровали ( разрешения не спросили, декомпилировали ).
__________________
hauts.ru

Старый 14.04.2013, 08:26
kaliban92 вне форума Посмотреть профиль Отправить личное сообщение для kaliban92 Найти все сообщения от kaliban92
  № 7  
kaliban92
[+3 14.04.13]

Регистрация: Apr 2013
Сообщений: 14
Черт возьми, еще один святоша ))

Господа, вы на линуксе с пеленок сидели ? Или может все винду-лицензию пользовали ? Не качали с торрентов ? Не передавали музыку с телефонов в былые времена ?

Вы, уважаемый Hauts, так же как и предыдущий обвинитель, ворюги не меньше моего. Вот только мне, хватает здравого смысла, не упрекать других. Программисты, а бревно в глазу у себя разглядеть не можете.

Я смеюсь в голос ))) Меня поражает степень вашего лицемерия.

p.s. Google+ я открыл тогда в первый раз, т.к других контактов автора я не увидел. А разбираться что да как(пусть даже 5 минут) мне было лень.

p.s.s С исходником я разобрался, все работает. Нужно было изменить тип на Number, и инициализировать начальными значениями.

Старый 14.04.2013, 10:42
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 8  
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Тема нарушает правила форума.
__________________
тут я

Старый 14.04.2013, 10:47
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 9  
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
На форуме запрещается обсуждение кода, полученного в результате декомпиляции.
Закрыто.

PS. К прочим участникам - прошу воздержаться от флуда по поводу нарушений.
Все меры так или иначе будут приянты.
__________________
Идите первым!

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

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

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


 


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


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