Просмотр полной версии : Перевод AS 1.0 в AS 3.0
armastus
14.04.2010, 03:21
Вопрос такой появился: нашёл код на 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
http://help.adobe.com/ru_RU/AS3LCR/Flash_10.0/migration.html
Программ естественно никаких нет и быть не может.
http://help.adobe.com/ru_RU/AS3LCR/Flash_10.0/migration.html
Программ естественно никаких нет и быть не может.
Вообще то есть. Я не буду искать пример и давать на него ссылку но то что они есть это точно
Вообще то есть. Я не буду искать пример и давать на него ссылку но то что они есть это точно
Из AS2 (т.е. если у вас код на классх написан) в AS3 возможно. Даже находится много чего: http://www.google.com/search?hl=ru&newwindow=1&client=opera&hs=k6b&rls=ru&q=convert+as2+to+as3&lr=&aq=f&aqi=&aql=&oq=&gs_rfai=
ну смотря какой код был на АС1 если он прототипы писал то незнаю :). Ну а если просто набор функций то может быть.
armastus
14.04.2010, 14:08
//устанавливаем качество в "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)
Так у вас код во флашке написан. Здесь только переписывать с нуля.
Покажите свф, как там все выглядит, я попробую переписать на третий.
Только, если вам не к спеху, сейчас времени нет, а на выходных само-то:)
armastus
15.04.2010, 01:02
KiL33 я отправил вам swf на эл. ящик, спасибо!
Боюсь, что KiL33 всё-таки fla нужен, а не swf.
armastus
15.04.2010, 02:58
Я всё отправил, fla тоже!
Кстати, udaaff спасибо за первую ссылку, очень полезная!
Нет, в прочем-то фла ни к чему, мне нужно было только посмотреть, что там происходит и всё. Ну да ладно, к понедельнику что-нибудь будет:)
Решил отписаться, чтобы не подумали, что я забил на эту тему. Не успел к сожалению дописать пример, у меня сейчас ремонт в квартире, время на баловство остается только ночью. Думаю допилить либо среди недели, либо ближе к выходным, что скорее всего.
armastus
19.04.2010, 18:21
Хорошо, спасибо, я тоже пытаюсь разобраться по мере своих возможностей...
Сегодня дописал основные движники. Хотел привязать ещё физ. движок АПЕ, чтобы коробки более-менее интересно можно было возить по сцене, но на это времени просто уже не хватает. Началась сессия и сейчас совершенно не до этого.
Поэтому решил выложить, что есть, потом будет время, допишу и подправлю тот хардкод, который на данный момент присутствует в коде.
Всё, больше ничего не хочу писать, уже третий час, хочу спать:)
http://www.greenglow.ucoz.ru/kil33/testGame.zip
UPD:
Персонажа не стал привязывать к сетке, это как бы скучно и, если в будущем немного напрячься с АПЕ, то будет вообще круто:)
armastus
02.05.2010, 22:57
Нда... я думал будет немного попроще :)
А для чего так много всяких разных файликов? которые на ява скрипте написаны
Буду смотреть, учиться, спасибо...
Программ естественно никаких нет и быть не может.
Ну тут можно поспорить..
Теоретически можно выгнать из байткода AS1-AS2 - байткод на AS3 (вернее из AVM1 в AVM2) - только нетривиальная задачка это..
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.