|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
[+3 14.04.13]
Регистрация: Apr 2013
Сообщений: 14
|
As2 -> As3, проблемы с преобразованием кода
Привет ребята.
Есть исходник as2 ( выдранный декомпилером ) На сцене много много мувиклипов, на каждом висит код: ******** Итого, не получается добиться того же эффекта что и оригинале. Несколько дней пробую по разному, но результат совершенно не похож на нужный. Моих знаний as3 видимо не хватает, подскажите что не так с кодом ? Заранее спасибо за любой ответ. Последний раз редактировалось mooncar; 14.04.2013 в 10:48. |
|
|||||
Есть подозрения на неверную точку начала отсчета координат мыши. в AS3 координаты мыши могут быть как глобальными, на весь стейдж, так и локальными, на мувиклип. Глобальная координата считается от верхнего левого угла стейджа, а локальная от верхнего левого угла (или точки привязки, поправьте если кто точно знает) мувиклипа. У вас скорее всего координата мыши считается локально, у каждого шарика в отдельности.
Могу предложить следующее - заменить слушатель события EnterFrame на MouseMove, при этом сам слушатель насильно привязывать к stage, тогда координаты точно будут абсолютными. 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; } } } на Но тогда есть вероятность получения ошибки нулевой ссылки если обработчик нового кадра начнет выполняться раньше добавления на сцену. В общем событие MouseMove или EnterFrame лучше регистрировать по добавлению на сцену, в вашей addS(e); Попробуйте и так и так, отпишитесь о результатах) |
|
|||||
[+3 14.04.13]
Регистрация: Apr 2013
Сообщений: 14
|
Спасибо огромное, за помощь.
Частично получилось(после нескольких десятков попыток), координаты определятся правильно. Всей логики уже не упомню, т.е сам не понимаю как работает, но работает )) Код: 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; } } } Это очень странно, т.к нигде в коде(вроде как) homeX и homeY не изменяются. Приведу оригинальный эффект, и то что получилось у меня, для наглядности. |
|
|||||
Я думаю что на этом можно остановиться. Я терпеть не могу когда люди вместо того чтобы думать головой, просто воруют код.
__________________
adobe AS3 manual |
|
|||||
[+3 14.04.13]
Регистрация: Apr 2013
Сообщений: 14
|
Во первых, этот алгоритм публичен, его неоднократно выкладывали на разные форумы, а автор использовал в своем блоге, в котором значится, что все что нужно, что бы получить исходник - написать ему. У меня не получилось отправить ему сообщения в google+(не умею пользоваться этим сервисом), поэтому и пошел на это. По твоему я преступление совершил ?
Во вторых,лично ты не разу не пользовался чужим кодом ? Не использовал чужие ресурсы ( картинки, фотографии, не качал с торрентов и.т.д ) ? P.S Я терпеть не могу, когда туповатые лицемеры, вместо того что бы думать головой, обвиняют других в том, в чем виноваты не меньше, а возможно и больше, чем тот кого они обвиняют. |
|
|||||
блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
|
kaliban92, правила читали? Несмотря на то, что вы не можете воспользоваться google+`ом для того, чтобы спросить автора об исходнике (удивительно, но "не умею пользоваться этим сервисом"), вы умудрились декомпилировать (а вот это получилось успешно!) и теперь в ас3 переводите, наплевав на какое-либо уважение к чужому труду, по-сути, украв.
Цитата:
Вот и получается абсолютно верное замечание: Цитата:
__________________
hauts.ru |
|
|||||
[+3 14.04.13]
Регистрация: Apr 2013
Сообщений: 14
|
Черт возьми, еще один святоша ))
Господа, вы на линуксе с пеленок сидели ? Или может все винду-лицензию пользовали ? Не качали с торрентов ? Не передавали музыку с телефонов в былые времена ? Вы, уважаемый Hauts, так же как и предыдущий обвинитель, ворюги не меньше моего. Вот только мне, хватает здравого смысла, не упрекать других. Программисты, а бревно в глазу у себя разглядеть не можете. Я смеюсь в голос ))) Меня поражает степень вашего лицемерия. p.s. Google+ я открыл тогда в первый раз, т.к других контактов автора я не увидел. А разбираться что да как(пусть даже 5 минут) мне было лень. p.s.s С исходником я разобрался, все работает. Нужно было изменить тип на Number, и инициализировать начальными значениями. |
|
|||||
Модрон-ветеринар
|
На форуме запрещается обсуждение кода, полученного в результате декомпиляции.
Закрыто. PS. К прочим участникам - прошу воздержаться от флуда по поводу нарушений. Все меры так или иначе будут приянты.
__________________
Идите первым! |
Часовой пояс GMT +4, время: 09:52. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|