Monkey X
Последнее изменение этой страницы: 02:34, 22 мая 2016.
Парадигма | мультипарадигмальный: структурный, императивный, объектно-ориентированный, модульный, рефлексивный, обобщённый, параллельный |
---|---|
Спроектировано | Mark Sibly |
Разработчики | Blitz Research Ltd |
Первый появившийся | 2011-03-01 |
Стабильная версия | 0.86(E) / 02.02.2016 |
Печать дисциплины | статическая, слабая, сильная (опционально), номинативная, с частичным выводом типов |
Платформа | Кроссплатформенное ПО |
OS | Microsoft Windows, Mac OS X, Linux |
Лицензия | zlib / Проприетарный |
Портал: |
www |
Под влиянием | |
BlitzBasic, BlitzMax, C, C++, C#, JavaScript, Java |
Monkey — объектно-ориентированный, транслируемый язык программирования, кроссплатформенность которого достигается за счет транслирования кода Monkey в нативный для платформы язык. Официально, код Monkey может быть транслирован в следующие языки программирования: С++, C#, Java, JavaScript и ActionScript. Тем не менее, этот список может быть расширен, путем написания собственных трансляторов. Так, сообществом Monkey, были успешно разработаны трансляторы для Python и BlitzMax. Monkey относится к семье языков с BASIC-подобным синтаксисом. Но в нем также отчетливо прослеживается влияние Java. Язык имеет статическую типизацию, обеспечивает модульность, поддерживает абстракцию, инкапсуляцию, наследование и полиморфизм, а также интерфейсы, обобщённые типы, свойства, итераторы и исключения.
Содержание
История
Автором языка является новозеландский разработчик Марк Сибли — основатель Blitz Research Ltd. Этот человек известен некоторым разработчикам по таким инструментам для создания игр, как BlitzBasic, Blitz3D и BlitzMax. Monkey является эволюцией линейки всех предшествующих продуктов компании Blitz Research Ltd. Кроссплатформенность достигается за счет транслирования. Все что умеет транслятор Monkey — это проверять и транслировать код, собирать валидный для платформы проект, и запускать нативные средства для сборки приложений. В связи с этим, для сборки итогового приложения необходимо установить SDK для всех требуемых платформ. Таким образом, удается избежать использования различных лаунчеров и плагинов для запуска итоговых приложений. Все выглядит так, как если бы приложение писали самостоятельно. Конечно, транслированный код получается малочитаемым и не всегда оптимальным, но вместе с этим дает все преимущества нативной разработки.
Целевые платформы
- Windows
- Mac OS X
- Android
- iOS
- HTML5
- Flash
- XNA
- PlayStation Vita
Транслятор
Транслятор, как бы странно это не звучало, написан на Monkey. Но как и в случае с яйцом и курицей, был промежуточный этап, когда транслятор был написан на BlitzMax. Исходный код транслятора полностью открыт, поэтому, в случае необходимости, вы можете вносить изменения и пересобирать его в Monkey, используя целевую платформу Stdcpp (стандартный C++).
Препроцессор
Monkey использует простой препроцессор для разделения специфичных участков кода для различных платформ, установки дополнительных параметров конфигурации, а также для включения или исключения блоков кода в зависимости от конфигурации сборки.
Использование нативного кода
Для написания платформозависимого кода может быть использован нативный для платформы язык. С помощью директивы Extern, в код Monkey могут быть включены классы и функции, использующие специфичные особенности платформы. Это дает возможность практически без ограничений расширять функционал вашего приложения.
Модули
Возможности языка могут быть расширены с помощью модулей, которые можно писать как непосредственно на Monkey, так и на нативном для платформы языке.
«Из коробки» Monkey поставляется со следующими модулями:
- monkey (базовые возможности языка)
- brl (набор классов и функций для работы с потоками)
- reflection (отражение)
- os (модуль для работы с операционной системой)
- dom (модуль для работы с DOM-деревом HTML-документа)
- mojo (2D-фреймворк)
- opengl (модуль для работы c OpenGL)
В дополнение к этому списку, сообществом разработчиков было написано более 20-ти дополнительных модулей, включая порты различных физических движков (Box2D, Chipmunk и Fling), GUI-системы, модули для работы со шрифтами, модули для реализации IAP (in-app purchase), модули для работы с XML, JSON и различными сервисами.
Разработка игр
В начале статьи было сказано, что Monkey, в основном, используется для создания 2D-игр. Но, сам язык под это дело не заточен.
Mojo
Для разработки игр используется модуль mojo, который поставляется вместе с Monkey. Этот модуль предоставляет разработчику кроссплатформенный API для работы с 2D-графикой, звуком и устройствами ввода. Возможности фреймворка несколько ограничены и связано это, в первую очередь, с необходимостью поддержки множества платформ. Не все возможности доступные на одной платформе доступны на другой. Если какая-то «фишка» недоступна хотя бы на одной из платформ, то она не будет включена в mojo. Конечно, это несколько радикально. Но в тоже время, вы сможете быть уверены, что ваше приложение будет одинаково работать на всех платформах.
Вторая причина столь скромного функционала — простота добавления новых платформ. Технологии меняются с невероятной скоростью. То тут, то там появляются новые устройства и операционные системы. Именно поэтому, возможность оперативного добавления поддержки новой платформы, дает неоспоримое преимущество перед другими подобными инструментами.
Игровые фреймворки
Конечно, функционала mojo недостаточно для написания полноценной игры. Ведь игра — это не только работа с графикой, звуком и устройствами ввода, но и пользовательский интерфейс, различные состояния, тайлы, анимация, физика и прочее. Всего этого в mojo, к сожалению, нет. Но на помощь приходят игровые фреймворки, и другие модули, созданные сообществом Monkey.
- Diddy. Один из самых популярных фреймворков для Monkey. Помимо, непосредственно, фреймворка, предоставляет большое количество дополнительного функционала.
- FantomEngine. Создателем фреймворка является автор книги «Monkey Game Development», все примеры в которой сделаны с использованием fantomEngine.
- Flixel. Порт популярного flash-фреймворка flixel.
- Playniax. Единственный коммерческий фреймворк, но с неплохими отзывами. Автором является разработчик одноименного фреймворка для BlitzMax.
3D
Если же вашей целью является создание 3D-игр, то в вашем распоряжении есть модуль opengl (работает не на всех платформах) или фреймворк minib3d. Но в целом, в этом плане, все довольно-таки плохо.
Недостатки
Как и любой программный продукт, Monkey имеет свои минусы.
IDE
Наверное, это самая серьезная проблема — отсутствие нормальной среды разработки. Несмотря на то, что Monkey поставляется с двумя IDE (Monk и Ted), ни одну из них нельзя назвать полноценной. Писать на них серьезные проекты весьма проблематично.
Для решения этой проблемы можно воспользоваться коммерческой Jungle IDE (есть бесплатная lite-версия) или одним из нескольких плагинов для популярных текстовых редакторов. Тем не менее, проблема с IDE, к сожалению, остается одной из ключевых.
Отсутствие вспомогательных инструментов
Большинство профессиональных инструментов для создания игр поставляются вместе с редакторами уровней, спрайтов, анимации и т. д. В Monkey подобных инструментов вы не увидите. Есть только язык, модули и IDE.
На выручку приходит стороннее ПО, как платное так и бесплатное. Обычно, сделать импорт проектов из подобных инструментов, не составляет больших проблем. К тому же, если поискать по официальному форуму, можно найти уже готовые решения, такие как, импорт текстурных атласов из TexturePacker, импорт тайловых карт из Dame и Tiled и т.д.
Производительность HTML5
HTML5-версия mojo использует 2D-контекст, что отрицательно сказывается на производительности игр. К сожалению, WebGL не поддерживается в IE. И если какая-то особенность где-то не поддерживается, то она не используется вовсе.
Чтобы исправить эту ситуацию, можно попробовать воспользоваться экспериментальным патчем для mojo — Mojo HTML5 GL, который заменяет 2D-контекст на WebGL, что дает существенный прирост производительности.
Программы, написанные с использованием Monkey
- Zombie Trailer Park — Flash and iOS
- Pirate Solitaire — iOS, Android and Flash
- Jet Worm — iPhone and iPad
- Blotty Pots — Android, iOS, WP7
- New Star Soccer Mobile — Android, iOS, Flash and HTML5
Пример кода
' включение строгого режима
Strict
' импорт модуля mojo
Import mojo
' точка входа приложения monkey
Function Main:Int()
New GameApp
Return 0
End
' основной класс, расширяющий класс mojo app
Class GameApp Extends App
Field player:Player
' переопределение метода mojo oncreate
Method OnCreate:Int()
' загрузка изображения player.png в переменную img, медиаданные должны хранится в папке project.data
Local img:Image = LoadImage("player.png")
player = New Player(img, 100, 100)
' установка обновлений в секунду равным 60
SetUpdateRate 60
Return 0
End
' переопределение метода mojo onupdate
Method OnUpdate:Int()
player.x+=1
If player.x > 100
player.x = 0
End
Return 0
End
' переопределение метода mojo onrender
Method OnRender:Int()
' очистка экрана заданным цветом (красный, зеленый, синий)
Cls 32, 64, 128
player.Draw()
Return 0
End
End
' класс игрока
Class Player
Field x:Float, y:Float
Field image:Image
' конструктор
Method New(img:Image, x:Int, y:Int)
self.image = img
self.x = x
self.y = y
End
' рисование спрайта
Method Draw:Void()
DrawImage image, x, y
End
End
Ссылки
- http://www.monkey-x.com/
- Википедия
- Русскоязычное сообщество Monkey
- Jungle IDE, расширенный IDE для Monkey
ISSN 2542-0356
Следуй за Полисом
Оставайся в курсе последних событий
Лицензия
Если не указано иное, содержание этой страницы доступно по лицензии Creative Commons «Attribution-NonCommercial-NoDerivatives» 4.0, а примеры кода – по лицензии Apache 2.0. Подробнее см. Условия использования.