Pull to refresh
27
potapenko @potapenkoread⁠-⁠only

User

Send message
столько людей видели банер и не заметили. Спасибо, Комрад!
К модераторам: Очень просим не переводить этот пост в раздел «мероприятия». Новость о выходе Realaxy ActionScript Editor действительно событие в мире флэш разработчиков и действительно относится к flash-платфоме, а не к безликим «мероприятиям».

К тому же люди не могут зайти по ссылке на новость.
Мы будем выгонять код AS3 (+расширения) в JS. В модуле проекта будет возможность указать таргет платформы и если это будет unity3d то AS3 классы будут генериться в strict JS со структурой принятой в Unity3d. Мы будем парсить библиотеки unity3d и в редакторе они будут выглядить почти так же как AS3 библиотеки. Плюс мы расширим фукнционал редактора unity3d и можно будет создавать «скрипты» типа RASE и по двойному клику переходить на них.
Так же мы хотим сделать поддержку Unity3d дебагера.
Цель — писать код для Unity3d проектов не на JS (понятно, что ест C# и VS, но он под виндоус), а на AS3, плюс наши языковые расширения.
Работать с AIR будет в ближайшее время. Думаю, что через неделю мы сделаем билд с этой возможностью.
Релиз намечен на октябрь. 1.1 будет в ноябре и мы хотели бы сконцентрироваться на дебагере и на поддержке unity3d. Плюс html5/js генерация.
Думаю, что визуальный редактор мы сможем сделать только к лету. Не раньше.
В смысле нужно нажать кнопку и ответить в пределах 10 секунд. Поэтом нужно было бы вычислять оставшееся время на ответ. Проще просто вставить провеку в данную точку.
Вначале имено так сделал, но тааймер то не отключается в этом случае. Все в пределах 10 секунд должно быть. Вот и зарефакторил :) Но 100 процентов за соответсвие игровым правилам в примере не могу отвечать :)
Зря все же сюда кинул, лучше в виде картинки, хабр не отформатировал отступы почемуто
Сгенеренный код «кто хочет стать миллионером»

package eventsFlow{

import mx.controls.Button;
import com.realaxy.actionScript.eventsFlow.util.EventsFlowContext;
import flash.utils.setTimeout;
import com.realaxy.actionScript.eventsFlow.util.EventQuery;
import flash.events.MouseEvent;
import flash.utils.Dictionary;
import com.realaxy.actionScript.collections.util.CollectionsLanguageUtil;
import flash.display.Sprite;

public class MillionaireGame extends Sprite {
private var errorFlag : Boolean ;
private var cancelFlag : Boolean ;
private var friendButton : Button ;
private var answerButton : Button ;
private var phoneButton : Button ;
public function MillionaireGame( ){
millionaire();
}
public function millionaire ( ) : void {
var __eventFlowUniqueId : int = EventsFlowContext.newFlow("1066125970159108107");
var __eventsFlowThis : MillionaireGame = this;
// millionaire game start
// expire(10000)
var counter_1066125970159109905 : int = EventsFlowContext.getBlockExecutedCount(__eventFlowUniqueId);
setTimeout( function ( ) : void {
if ( EventsFlowContext.getBlockExecutedCount(__eventFlowUniqueId) == counter_1066125970159109905 ) {
EventsFlowContext.destroyCurrentQueryListeners(__eventFlowUniqueId);
EventsFlowContext.executeNextCodeBlock(__eventFlowUniqueId);
{
EventsFlowContext.exit(__eventFlowUniqueId, "loose");
return ;
}
}
}, 10000);
EventsFlowContext.addCodeBlock(__eventFlowUniqueId, function ( ) : void {
{
EventsFlowContext.setNewQuery(__eventFlowUniqueId, new EventQuery("1684146993529417500", new Array(new EventQuery("1066125970159110632", new Array(new EventQuery("1066125970159193039", new Array(), com.realaxy.actionScript.eventsFlow.util.EventsQueryStrategy.CATCH), new EventQuery("1066125970159207118", new Array(), com.realaxy.actionScript.eventsFlow.util.EventsQueryStrategy.CATCH)), com.realaxy.actionScript.eventsFlow.util.EventsQueryStrategy.OR)), com.realaxy.actionScript.eventsFlow.util.EventsQueryStrategy.COMPOSITE));
(EventsFlowContext.catchEvent(__eventFlowUniqueId, friendButton, "click", function ( event_a0a0a0a1a0a6a0 : MouseEvent ) : void {
try {
var count_a0a0a0b0a0g0a : int = EventsFlowContext.getBlockExecutedCount(__eventFlowUniqueId);
{
EventsFlowContext.jump(__eventFlowUniqueId, "callToFriend");
return ;
}
} finally {
if ( count_a0a0a0b0a0g0a == EventsFlowContext.getBlockExecutedCount(__eventFlowUniqueId) ) {
EventsFlowContext.executeQueryById(__eventFlowUniqueId, "1066125970159193039");
}
}
}, "7581117113012050904", "1684146993529417500"), null);
(EventsFlowContext.catchEvent(__eventFlowUniqueId, answerButton, "click", function ( event_a1a0a0a1a0a6a0 : MouseEvent ) : void {
try {
var count_b0a0a0b0a0g0a : int = EventsFlowContext.getBlockExecutedCount(__eventFlowUniqueId);
if ( validateAnswer() ) {
{
EventsFlowContext.exit(__eventFlowUniqueId, "win");
return ;
}
}else{
EventsFlowContext.exit(__eventFlowUniqueId, "loose");
return ;
}
} finally {
if ( count_b0a0a0b0a0g0a == EventsFlowContext.getBlockExecutedCount(__eventFlowUniqueId) ) {
EventsFlowContext.executeQueryById(__eventFlowUniqueId, "1066125970159207118");
}
}
}, "7581117113012050911", "1684146993529417500"), null);
return ;
}
}, "");
EventsFlowContext.addCodeBlock(__eventFlowUniqueId, function ( ) : void {

{
EventsFlowContext.jump(__eventFlowUniqueId, "callToFriend");
return ;
}
EventsFlowContext.executeNextCodeBlock(__eventFlowUniqueId);
}, "");
EventsFlowContext.addCodeBlock(__eventFlowUniqueId, function ( ) : void {
// state: callToFriend

// expire(30000)
var counter_1066125970159230851 : int = EventsFlowContext.getBlockExecutedCount(__eventFlowUniqueId);
setTimeout( function ( ) : void {
if ( EventsFlowContext.getBlockExecutedCount(__eventFlowUniqueId) == counter_1066125970159230851 ) {
EventsFlowContext.destroyCurrentQueryListeners(__eventFlowUniqueId);
EventsFlowContext.executeNextCodeBlock(__eventFlowUniqueId);
{
EventsFlowContext.exit(__eventFlowUniqueId, "loose");
return ;
}
}
}, 30000);
{
EventsFlowContext.setNewQuery(__eventFlowUniqueId, new EventQuery("1684146993529417506", new Array(new EventQuery("1684146993529417503", new Array(new EventQuery("1066125970159230867", new Array(), com.realaxy.actionScript.eventsFlow.util.EventsQueryStrategy.CATCH)), com.realaxy.actionScript.eventsFlow.util.EventsQueryStrategy.AND)), com.realaxy.actionScript.eventsFlow.util.EventsQueryStrategy.COMPOSITE));
(EventsFlowContext.catchEvent(__eventFlowUniqueId, phoneButton, "click", function ( event_a0a0a0f0b0a0i0a : MouseEvent ) : void {
EventsFlowContext.executeQueryById(__eventFlowUniqueId, "1066125970159230867");
}, "1066125970159230867", "1684146993529417506"), null);
return ;
}
}, "callToFriend");
EventsFlowContext.addCodeBlock(__eventFlowUniqueId, function ( ) : void {
{
EventsFlowContext.jump(__eventFlowUniqueId, "answer");
return ;
}

{
EventsFlowContext.jump(__eventFlowUniqueId, "answer");
return ;
}
EventsFlowContext.executeNextCodeBlock(__eventFlowUniqueId);
}, "");
EventsFlowContext.addCodeBlock(__eventFlowUniqueId, function ( ) : void {
// state: answer

if ( validateAnswer() ) {
{
EventsFlowContext.exit(__eventFlowUniqueId, "win");
return ;
}
}else{
EventsFlowContext.exit(__eventFlowUniqueId, "loose");
return ;
}
EventsFlowContext.exit(__eventFlowUniqueId, null);
}, "answer");
EventsFlowContext.executeNextCodeBlock(__eventFlowUniqueId);
}
public function validateAnswer ( ) : Boolean {
return false ;
}
}
}
Сгенеренный код для «бесконечного цикла» link
Сгенеренный код для композитного события link
Ну работать с таким кодом можно.
Но я все же бы обязал предоставлять исходники Realaxy. Кроме сгенеренных.
Вдруг новый разработчик предпочтет поддерживать продукт на том инструменте на котором делался изначально.
Это тоже самое что у flex брать сгенеренный mxml-компилятором AS код.
Кстати меня мучают смутные сомнения. Если есть какие мысли по этому поводу — буду благодарен.
В fold передается два параметра :)
За основу был взят язык collections из MPS.
Я работаю с ним уже несколько лет и он мне больше и больше нравится.
Плюс кто привыкнет к AS3 коллекциям, легко сможет читать MPS код.
Поэтому методы из AS3 collections и их поведение скопировано из него.
Плюс добавлены свои фичи. и выкинули лишнее.
спасибо, поправил :) Писал несколько в спешке.
Выгоняется в массив функций и обычных обработчиков событий. Завтра-послезавтра, покажу пример сгенеренного кода.
Визуальный не скоро. Но mxml есть.

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity