И снова о Monkey. Ставим точки над "И"
“Что, снова?”, — спросите вы, и будете правы. Темы, касающиеся Monkey, стали появляться лишком часто, отчасти по моей вине. Что ж, данным постом я бы хотел завершить эту эпопею, и надеюсь, у меня это получится.
Для начала позвольте представиться. Меня зовут, Артур. Я активный участник англоязычного сообщества Monkey и являюсь автором порта flixel под Monkey, а также рантайм-патча Mojo HTML5 GL. Также, администрирую русскоязычное сообщество посвященное этому языку. Мое знакомство с Monkey началось за некоторое время до его появления. За, почти, два года, я изучил все особенности языка вдоль и поперек, поэтому позвольте мне рассказать вам о полученном опыте. Так, что же такое Monkey? Monkey является языком программирования следующего поколения от Blitz Research. Главной отличительной особенностью данного языка в том, что в отличии от всех предыдущих, Monkey является транслируемым языком. Из вики: “Транслятор — программа или техническое средство, выполняющее трансляцию программы. Трансляция программы — преобразование программы, представленной на одном из языков программирования, в программу на другом языке, эквивалентную по результатам выполнения первой.” На данный момент, официально поддерживается трансляция в следующие языки программирования: С++, C#, Java, JavaScript и ActionScript. Неофициально: BlitzMax и Phyton. Что это значит? Давайте разберем на простом примере. Допустим, мы имеем следующий код на Monkey: Код:
Function Main() JavaScript Код:
function bbMain(){ Код:
internal function bbMain():int{ Код:
class bb_{ Новый язык, но что нового? Давайте теперь разберем, что же изменилось в самом языке, по сравнению с BlitzMax. Что мы приобрели:
Каким образом обеспечивается поддержка нескольких платформ? Помимо транслятора, в Monkey есть целевые платформы (targets). Они представляют собой набор файлов для той или иной платформы. Если говорить проще — что-то вроде “супового набора” для каждой платформы. Например, для HTML5 таким набором является: фавикон, html-файл и js-фай; для Flash: фавикон, html-файл и as-файл. Для остальных платформ этот шаблон представляет собой валидный для платформы проект, который можно открыть родными средствами SDK. Основной файл исходного кода в шаблоне содержит секцию: Код:
${TRANSCODE_BEGIN} На данный момент, официально поддерживаются следующие платформы: PC, Mac, HTML5, Flash, iOS, Android, WP7, PS Vita и XBox 360. Как происходит сборка приложений? Теперь, когда у нас есть транслированный код и файлы проекта, мы можем его собрать. Так как Monkey не имеет компилятора, то собираться проект будет родными для платформы средствами. Например, сборка Flash-приложений осуществляется с помощью Flex SDK, Android-приложения собираются с помощью Android SDK и т.д. Именно поэтому Monkey требует установки SDK для всех целевых платформ. Не беспокойтесь, вручную делать сборку вам не придется. Транслятор достаточно умный для того, чтобы запустить автоматически все необходимые для сборки инструменты, а также запустить полученное приложение. Почему такой скудный функционал? Кроссплатформенность накладывает свои ограничения. Не все, что доступно на одной платформе доступно и на другой. Разработчик, должен быть уверен, в том, что код написанный на одной платформе, будет работать точно также и на другой. Если добавлять фишки, специфичные для разных платформ, то вся прелесть кроссплатформенной разработки попросту исчезнет. Тем не менее, это не повод для паники. Возможности Monkey легко расширяются с помощью модулей. В них вы можете использовать нативный для платформы код и функционал. Например, вот так можно добавить поддержку перехода по ссылке в HTML5 и Android. utils.html5.js Код:
var utils = new Object(); Код:
import android.net.Uri; Код:
Import "utils.${TARGET}.${LANG}" этот код будет работать только в HTML5 и Android, но не проблема добавить поддержку для остальных платформ. Сообществом разработчиков Monkey было создано несколько интересных бесплатных модулей, использующих особенности платформ. Например, In-App Purchases для Android и iOS, Newgrounds API, AdMob для Android и т.д. За что я плачу деньги? Многие ошибочно думают, что платят деньги за Monkey. Это заблуждение. Вы платите деньги за две вещи:
Все остальное является общественным достоянием и вы можете использовать это в любых, угодных вам, целях. Также, поддерживая разработчика, вы стимулируете развитие Monkey. Наверное, доброй половины, из того, что я описал выше, не было в самом начале пути. Monkey довольно быстро развивается и новая версия выходит чуть ли не каждые две недели. Monkey единственный в своем роде? Нет. Кроссплатформенных средств разработки предостаточно. Каждое имеет свои достоинства и недостатки. Но ближе всего по идеологии к Monkey — Haxe и кроссплаторменный фреймворк для него — NME. Haxe + NME отличная бесплатная альтернатива Monkey. Они отличаются набором целевых платформ, и спецификой реализации, но думаю что многим Haxe придется по душе. В завершение Да, я думаю, что ответил далеко не на все вопросы. Но пост и так получается слишком длинным. Мне кажется, я объяснил достаточно, для того, чтобы вы поняли, нужно оно вам или нет. Естественно, Monkey не панацея, магии не бывает. Но при правильном подходе Monkey может серьезно облегчить жизнь разработчикам, при переносе игры на другие платформы. Если у вас есть вопросы по Monkey, пожалуйста пишите, постараюсь ответить. Прошу тех, кому это не интересно, просто проходить мимо, я больше не хочу спорить и кому-то что-то доказывать. Мне за это не платят и у меня нет стремления пересадить всех на Monkey. Вам нравится что-то другое? Пожалуйста, у каждого есть свобода выбора. Если кому-то Monkey пришелся по душе, добро пожаловать в наше скромное русскоязычное коммьюнити. Ссылка у меня в подписи. Также, советую дополнительно ознакомиться со следующими статьями: На этом все. Пока! |
Ответ: И снова о Monkey. Ставим точки над "И"
Отличная статья! Многое пояснил, а то такого рода информацию многие не могут получить, и следственно заблуждаются в том что Monkey есть на самом деле.
А вот возможность добовлять модули, весьма простая, нужно попробовать написать модуль для Socket.io и попробовать замутить сетевую игрушку. |
Ответ: И снова о Monkey. Ставим точки над "И"
скажем мне не надо mojo, тех поддержка, тогда где мне скачать компилятор, ide и тд бесплатно ?
|
Ответ: И снова о Monkey. Ставим точки над "И"
Цитата:
|
Ответ: И снова о Monkey. Ставим точки над "И"
Вот задумываюсь о JSON'е, как в Monkey реализовать удобную работу с ним..
JSON в html5 сразу в "готовеньком" виде, например: PHP код:
Я могу написать модуль которые будет пробегаться по элементам и их парсить. Основной вопрос, это как сделать удобно в Monkey, интерфейс по доступу к данным. В JS доступ к типу энтитя под key = 7, будет таким: PHP код:
PHP код:
В Monkey, я как понимаю будет что-то типо объектов/контейнеров, которые могут иметь список детей, либо иметь значение. Через интерфейсы можно реализовать разные элементы исходя из типа данных, и реализовать циклы. Monkey даст такую возможность? В пользовании хотя бы так: Код:
value = data.g("entities").g("7").g("type").g() Выглядит конечно в кучу раз хуже.. Можно правда сделать просто публичное поле у объекта, но ведь поле имеет не определённый тип данных. Это может быть контейнер, или значение. Как тут быть? Пока раздумываю на работе, домой приду, буду эксперементировать конечно. Моя идея, это построить модуль для работы с nodejs модулем socket.io, для html5 платформы, чтобы можно было обмениваться json данными, т.к. это самый удобный формат по работе с данными по сети, который я когда либо встречал. По крайней мере с nodejs это просто сказка. В общем, какие есть идеи в реализации, и главное, как это будет в пользовании? |
Ответ: И снова о Monkey. Ставим точки над "И"
Moka, в сторону готовых решений смотрели? Вот это, например - monkey-json.
Также красиво (через точку), как в JS сделать не получится, т.к. нет возможности генерировать произвольные объекты "на лету". Через массивы, слишком сложно. Самый простой вариант, это последний. Чтобы иметь возможность проходить по объекту в цикле, словно это коллекция, объект должен возвращать иметь метод: Код:
Method ObjectEnumerator:Enumerator() Код:
Class Enumerator Код:
Class Enumerator<T> Надеюсь информация поможет. |
Ответ: И снова о Monkey. Ставим точки над "И"
devolonter, спасибо за статью.
|
Ответ: И снова о Monkey. Ставим точки над "И"
Цитата:
Насчёт Map - это тема, нужно посмотреть. Т.к. по сути мне и нужны создание map объектов (контейнеры), и удобное хранение самих значений. Ведь Map имеет доступ к значению по key типо так: map["key"] ? Значит такое можно реализовать и для другого типа объекта.. Нужно поэксперементировать :) |
Ответ: И снова о Monkey. Ставим точки над "И"
Цитата:
|
Ответ: И снова о Monkey. Ставим точки над "И"
Так, инфа с поля боя, пока двигался к monkey, по пути немного поизучал python, и написал плагин для Sublime Text 2, который компилит monkey проект, копирует папку с билдом в папку с апачем (настраивается в плагине, dest переменная), и открывает стандартным броузером ссылку на проект.
Очень доволен собой, т.к. с python никогда не имел дело. Вот код плагина, чтобы его заюзать, нужно в Sublime сходить в Tools > New Pluggin, затем вставить этот код: Код:
import sublime, sublime_plugin Далее охраняем это куда либо в папку Packages для Sublime. Её найти можно если сходить в Preferences > Browse Packages.. Далее идём в Preference > Key Binding User.. И там добавляем вот такую строку: Код:
{ "keys": ["ctrl+m"], "command": "monkey_build" } Далее нужно чтобы в системе был добавлен Path на папку с trans_winnt.exe, он лежит в monkey/bin/. Готово. Открываем любой .monkey файл, и жмём ctrl+m. Если редактировали плагин, там важно что будет применяться функция удаления папки и всего содержимого, если намудрите чего, удалит не то. Так что на ваш страх и риск, я ответсвенности не несу :D Данный модуль можно адаптировать под другие target'ы. В общем сказка - билдит проект, и копирует всё в папку с веб файлами апача и запускает в броузере.. Зачем мне это нужно? Для того чтобы тестировать веб сокеты и т.п. дребедень. Файлы с всякой хренью для тестов я буду хранить на апаче. В .httaccess настрою чтобы при переходе в localhost/socket/ перенаправлял на nodejs, который выдаст socket.io.js файл для коммуникации с сервером. Таким образом у меня будет публично доступная последняя версия игры работающая с веб сокетами. Теперь мне нужно заняться модулем для socket.io :) |
Ответ: И снова о Monkey. Ставим точки над "И"
Цитата:
|
Ответ: И снова о Monkey. Ставим точки над "И"
Можно, и это в разы проще. Вот:
Код:
import sublime, sublime_plugin По идеи, если в config.winnt.txt указать HTML_PLAYER, exe броузера, например Chrome, он запускает нормально файл тоже. Но проблема тут в отсутствии какого либо Apache и никакого серверного скрипта тоже не будет. Но думаю что коммуникация с Socket.io будет всё равно ОК. Только проблема будет в реальных полевых условиях - броузеры могут не позволять меж-доменные запросы по security причинам. |
Ответ: И снова о Monkey. Ставим точки над "И"
Цитата:
|
Ответ: И снова о Monkey. Ставим точки над "И"
Цитата:
Можешь слить Monkey.tmLanguage и папки Preferences и Snippets. И снова, пробеги в Preferences > Browse Packages, там создай папку "monkey, и вот то что скачал кинь туда. Sublime перезапускать не нужно. Может только файл переоткрыть. Будет подсветка и авто-дополнение работать. Можно будет ещё запилить плагин, чтобы на определённой команде открывало справку для выделенной команды. Если такое замучу, ваще сказка будет :) |
Ответ: И снова о Monkey. Ставим точки над "И"
Цитата:
Цитата:
|
Часовой пояс GMT +4, время: 16:51. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot