Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Перевод AS 1.0 в AS 3.0 (http://www.flasher.ru/forum/showthread.php?t=138682)

armastus 14.04.2010 03:21

Перевод AS 1.0 в AS 3.0
 
Вопрос такой появился: нашёл код на ActionScript 1.0 и надо перевезти в ActionScript 3.0, но так как я не знаю AS 1.0 вобще нисколько:(... может есть какие то программы-транскрипторы, конвертаторы и т.д., чтобы можно было автоматически перегнать код? Или соответсвующая литература по переходу (переводу) с AS 1.0 на AS 3.0. Спасибо.

P.S. AS 3.0 знаю тоже плоховато, перевод AS 1.0 в 3.0 нужен преимущественно с целью обучени AS 3.0

udaaff 14.04.2010 09:08

http://help.adobe.com/ru_RU/AS3LCR/F...migration.html
Программ естественно никаких нет и быть не может.

KiL33 14.04.2010 10:25

Выложите код, посмотрим.

Tahion 14.04.2010 11:14

Цитата:

Сообщение от udaaff (Сообщение 900411)
http://help.adobe.com/ru_RU/AS3LCR/F...migration.html
Программ естественно никаких нет и быть не может.

Вообще то есть. Я не буду искать пример и давать на него ссылку но то что они есть это точно

udaaff 14.04.2010 11:42

Цитата:

Сообщение от Tahion (Сообщение 900420)
Вообще то есть. Я не буду искать пример и давать на него ссылку но то что они есть это точно

Из AS2 (т.е. если у вас код на классх написан) в AS3 возможно. Даже находится много чего: http://www.google.com/search?hl=ru&n...=&oq=&gs_rfai=

Tahion 14.04.2010 13:02

ну смотря какой код был на АС1 если он прототипы писал то незнаю :). Ну а если просто набор функций то может быть.

armastus 14.04.2010 14:08

Код AS1/AS2:

//устанавливаем качество в "low"
_quality = "low";
//*Глобальные переменные*
//текущий уровень
var current_stage = 0;
//Колличесво ходов
var step_txt = 0;
//позиция игрока
var igrok_poz_x;
var igrok_poz_y;
//
//*Двумерные массивы с картой уровня*
//общий
var stage_arr = new Array(8);
//для мишеней
var stage_t_arr = new Array(8);
//
for (i=0; i<8; i++) {
        stage_arr[i] = new Array(8);
        stage_t_arr[i] = new Array(8);
}
//
//*грузим данные*
//Создаем объект
stageXML = new XML();
//подтягиваем наши уровни
stageXML.load("stages.xml");
//если загрузился - передаем управление функции is_loaded
stageXML.onLoad = is_loaded;
//игнорируем пробелы внутри XML
stageXML.ignoreWhite = true;
//кодировка на всякий случай
stageXML.useCodepage = true;
function is_loaded(success) {
        if (success) {
                //если загрузился файл
                //определяем количество уровней
                _root.stages_num = stageXML.childNodes.length;
                //рисуем текущий
                drawStage(current_stage);
        } else {
                //файл не загрузился
                trace("неудача");
        }
}
//
 
//Передаем функции номер уровня
function drawStage(num) {
        //временная переменная
        var tempString;
        //создаем клип, в котором будем все рисовать
        _root.createEmptyMovieClip("stage_mc", 1);
        //переместим его немного вправо-вниз
        stage_mc._x = stage_mc._y=10;
        //отобразим номер уровня
        level_txt = num+1;
        //обнуляем массив, ведь эта функция будет также использоваться для перерисовки
        for (i=0; i<8; i++) {
                for (j=0; j<8; j++) {
                        stage_arr[i][j] = 0;
                }
        }
        //построчно читаем уровень из XML и разбиваем строку на символы
        for (j=0; j<8; j++) {
                tempString = stageXML.childNodes[num].childNodes[j].childNodes+"";
                for (i=0; i<8; i++) {
                        //каждый символ заносим в массив
                        stage_arr[i][j] = tempString.charAt(i);
                }
        }
        //это колличество предметов в уровне
        b_incr = 0;
        //количество мишеней
        t_incr = 0;
        //начинаем рисовать
        for (i=0; i<8; i++) {
                for (j=0; j<8; j++) {
                        //попутно пустошим массив для мишеней
                        stage_t_arr[i][j] = "_";
                        //стена
                        if (stage_arr[i][j] == "w") {
                                stage_mc.attachMovie("wall", "wall_"+i+"_"+j, (i+1)*100+j, {_x:20*i, _y:20*j});
                        }
                        //предмет
                        if (stage_arr[i][j] == "b") {
                                b_incr++;
                                stage_mc.attachMovie("box", "box_"+b_incr, 2000+b_incr, {_x:20*i, _y:20*j});
                                //записываем в главный массив полное имя мувика
                                stage_arr[i][j] = "box_"+b_incr;
                        }
                        //если мишень
                        if (stage_arr[i][j] == "t") {
                                //переносим данные из главного массива в массив мишеней
                                stage_arr[i][j] = "_";
                                t_incr++;
                                stage_mc.attachMovie("target", "target_"+t_incr, 1000+t_incr, {_x:20*i, _y:20*j});
                                stage_t_arr[i][j] = "t";
                        }
                        //если игрок
                        if (stage_arr[i][j] == "m") {
                                stage_mc.attachMovie("igrok", "igrok_mc", 10000, {_x:20*i, _y:20*j});
                                //он у нас сам по себе - в массиве чистим после него
                                stage_arr[i][j] = "_";
                                //начальная позиция
                                igrok_poz_x = i;
                                igrok_poz_y = j;
                        }
                }
        }
}
 
//*Обработчик клавиатуры*
keyListener = new Object();
keyListener.onKeyDown = function() {
        //Вверх
        if (Key.getCode() == 38) {
                checkMove(0, -1);
                stage_mc.igrok_mc.gotoAndStop(1);
        }
        //Вниз
        if (Key.getCode() == 40) {
                checkMove(0, 1);
                stage_mc.igrok_mc.gotoAndStop(3);
        }
        //Влево
        if (Key.getCode() == 37) {
                checkMove(-1, 0);
                stage_mc.igrok_mc.gotoAndStop(4);
        }
        //Вправо
        if (Key.getCode() == 39) {
                checkMove(1, 0);
                stage_mc.igrok_mc.gotoAndStop(2);
        }
};
Key.addListener(keyListener);
//
//Двигаем персонажи
function checkMove(t_x, t_y) {
        //временные
        var str_t, str_t2;
        //что стоит на клетку вперед?
        str_t = stage_arr[igrok_poz_x+t_x][igrok_poz_y+t_y];
        //что что там на две клетки дальше?
        str_t2 = stage_arr[igrok_poz_x+t_x*2][igrok_poz_y+t_y*2];
        //если впереди игрока предмет и за ним пустое место
        if (str_t.substr(0, 1) == "b" and str_t2.substr(0, 1) == "_") {
                //двигаем игрока
                stage_mc.igrok_mc._x += 20*t_x;
                stage_mc.igrok_mc._y += 20*t_y;
                //двигаем предмет
                eval("stage_mc."+str_t)._x += 20*t_x;
                eval("stage_mc."+str_t)._y += 20*t_y;
                //освобождаем место в массиве
                stage_arr[igrok_poz_x+t_x][igrok_poz_y+t_y] = "_";
                //прописываем в массиве предмет на новом месте
                stage_arr[igrok_poz_x+t_x*2][igrok_poz_y+t_y*2] = str_t;
                //позиция игрока
                igrok_poz_x += t_x;
                igrok_poz_y += t_y;
                //счетчик ходов
                step_txt++;
                //проверка .. может уже все ок
                isComplete();
        } else {
                //если свободно впереди
                if (str_t.substr(0, 1) == "_") {
                        //двигаем игрока
                        stage_mc.igrok_mc._x += 20*t_x;
                        stage_mc.igrok_mc._y += 20*t_y;
                        //и его позицию меняем
                        igrok_poz_x += t_x;
                        igrok_poz_y += t_y;
                        //счетчик ходов
                        step_txt++;
                }
        }
        //остался случай, если впереди стена - тут мы просто ничего не трогаем
}
//проверяем: все ли предметы там, где нужно
function isComplete() {
        //временная
        var flag = true;
        //в t_incr хранится колличество мишеней в уровне
        for (i=1; i<t_incr+1; i++) {
                //определяем координату одного из предметов
                var b_x = stage_mc["box_"+i]._x/20;
                var b_y = stage_mc["box_"+i]._y/20;
                //в массиве смотрим: над целью ди он?
                if (stage_t_arr[b_x][b_y] == "t") {
                        //если там, то показываем перечёркнутый предмет предмет
                        stage_mc["box_"+i].gotoAndStop(2);
                } else {
                        //если нет - опускаем флаг, что уровень не пройден
                        flag = false;
                        stage_mc["box_"+i].gotoAndStop(1);
                }
        }
        //флаг поднят - уровень пройден
        if (flag) {
                //вызываем функцию перехода на седующий уровень
                levelUp();
        }
}
//переход на седующий уровень
function levelUp() {
 
        //если текущий уровень не последний
        if (current_stage<stages_num-1) {
                current_stage++;
        } else {
                //если последний - переход на первый
                current_stage = 0;
        }
        //перерисовка
        drawStage(current_stage);
        //пишем номер уровня в текстовом поле
        level_txt = current_stage+1;
        //обнуляем счетчик ходов
        step_txt = 0;
}

Вот код, как я понимаю сейчас нижнего подчёркивания вообще нет (например _x, _root)

KiL33 14.04.2010 18:17

Так у вас код во флашке написан. Здесь только переписывать с нуля.
Покажите свф, как там все выглядит, я попробую переписать на третий.
Только, если вам не к спеху, сейчас времени нет, а на выходных само-то:)

armastus 15.04.2010 01:02

KiL33 я отправил вам swf на эл. ящик, спасибо!

udaaff 15.04.2010 01:52

Боюсь, что KiL33 всё-таки fla нужен, а не swf.

armastus 15.04.2010 02:58

Я всё отправил, fla тоже!
Кстати, udaaff спасибо за первую ссылку, очень полезная!

KiL33 15.04.2010 08:05

Нет, в прочем-то фла ни к чему, мне нужно было только посмотреть, что там происходит и всё. Ну да ладно, к понедельнику что-нибудь будет:)

KiL33 18.04.2010 22:46

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

armastus 19.04.2010 18:21

Хорошо, спасибо, я тоже пытаюсь разобраться по мере своих возможностей...

KiL33 25.04.2010 00:38

Сегодня дописал основные движники. Хотел привязать ещё физ. движок АПЕ, чтобы коробки более-менее интересно можно было возить по сцене, но на это времени просто уже не хватает. Началась сессия и сейчас совершенно не до этого.
Поэтому решил выложить, что есть, потом будет время, допишу и подправлю тот хардкод, который на данный момент присутствует в коде.
Всё, больше ничего не хочу писать, уже третий час, хочу спать:)

http://www.greenglow.ucoz.ru/kil33/testGame.zip

UPD:
Персонажа не стал привязывать к сетке, это как бы скучно и, если в будущем немного напрячься с АПЕ, то будет вообще круто:)

armastus 02.05.2010 22:57

Нда... я думал будет немного попроще :)
А для чего так много всяких разных файликов? которые на ява скрипте написаны
Буду смотреть, учиться, спасибо...

Котяра 02.05.2010 23:10

Цитата:

Сообщение от udaaff (Сообщение 900411)
Программ естественно никаких нет и быть не может.

Ну тут можно поспорить..
Теоретически можно выгнать из байткода AS1-AS2 - байткод на AS3 (вернее из AVM1 в AVM2) - только нетривиальная задачка это..


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

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