Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование игр для мобильных телефонов > Monkey

Monkey Разработка игр на движке Monkey

Ответ
 
Опции темы
Старый 20.09.2012, 15:27   #1
devolonter
Разработчик
 
Аватар для devolonter
 
Регистрация: 17.01.2007
Сообщений: 409
Написано 114 полезных сообщений
(для 281 пользователей)
И снова о Monkey. Ставим точки над "И"

“Что, снова?”, — спросите вы, и будете правы. Темы, касающиеся Monkey, стали появляться лишком часто, отчасти по моей вине. Что ж, данным постом я бы хотел завершить эту эпопею, и надеюсь, у меня это получится.

Для начала позвольте представиться. Меня зовут, Артур. Я активный участник англоязычного сообщества Monkey и являюсь автором порта flixel под Monkey, а также рантайм-патча Mojo HTML5 GL. Также, администрирую русскоязычное сообщество посвященное этому языку.

Мое знакомство с Monkey началось за некоторое время до его появления. За, почти, два года, я изучил все особенности языка вдоль и поперек, поэтому позвольте мне рассказать вам о полученном опыте.

Так, что же такое Monkey?

Monkey является языком программирования следующего поколения от Blitz Research. Главной отличительной особенностью данного языка в том, что в отличии от всех предыдущих, Monkey является транслируемым языком.

Из вики: “Транслятор — программа или техническое средство, выполняющее трансляцию программы. Трансляция программы — преобразование программы, представленной на одном из языков программирования, в программу на другом языке, эквивалентную по результатам выполнения первой.”

На данный момент, официально поддерживается трансляция в следующие языки программирования: С++, C#, Java, JavaScript и ActionScript. Неофициально: BlitzMax и Phyton.

Что это значит? Давайте разберем на простом примере. Допустим, мы имеем следующий код на Monkey:

Function Main()
	Print "Hello World!"
End Function
После трансляции мы получим следующий код:

JavaScript
function bbMain(){
	print("Hello World!");
	return 0;
}
ActionScript
internal function bbMain():int{
	print("Hello World!");
	return 0;
}
Java
class bb_{
	static public int bbMain(){
		bb_std_lang.print("Hello World!");
		return 0;
	}
}
Во всех трех случаях, программа выведет в консоль “Hello World” и завершит свою работу. Как видите, все просто — программист пишет код на Monkey, а транслятор переводит его в желаемый язык.

Новый язык, но что нового?

Давайте теперь разберем, что же изменилось в самом языке, по сравнению с BlitzMax.

Что мы приобрели:
  • Интерфейсы
  • Обобщенные классы и функции
  • Приватные методы и поля классов.
  • Перегрузка методов и функций
  • Передача параметров в конструктор класса
  • Геттеры и сеттеры
  • Директива Alias, для определения синонимов класса
  • Импорт модулей в произвольном порядке
  • Чувствительность к регистру
  • Class вместо Type
Что мы потеряли:
  • Массивы как объекты. Теперь они больше похоже на примитивы, но все же передаются по ссылке.
  • Многомерные массивы. Тем не менее, есть возможность создания массивов в массивах
  • Указатели, в том числе, указатели на функции. На самом деле, данное ограничение легко обходится с помощью интерфейсов.

Каким образом обеспечивается поддержка нескольких платформ?

Помимо транслятора, в Monkey есть целевые платформы (targets). Они представляют собой набор файлов для той или иной платформы. Если говорить проще — что-то вроде “супового набора” для каждой платформы.

Например, для HTML5 таким набором является: фавикон, html-файл и js-фай; для Flash: фавикон, html-файл и as-файл. Для остальных платформ этот шаблон представляет собой валидный для платформы проект, который можно открыть родными средствами SDK.

Основной файл исходного кода в шаблоне содержит секцию:
${TRANSCODE_BEGIN}
${TRANSCODE_END}
Именно в нее будет помещен транслированный код.

На данный момент, официально поддерживаются следующие платформы: 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();

utils.openURL = function(url) {
	window.open(url);
}
utils.android.java
import android.net.Uri;

class utils {

	public static void openURL(String url) {
		Intent i = new Intent(Intent.ACTION_VIEW);
		i.setData(Uri.parse(url));
		MonkeyGame.activity.startActivity(i);
	}

}
Теперь в monkey-файле достаточно написать:
Import "utils.${TARGET}.${LANG}"

Extern
Function OpenURL:Void(url:String) = "utils.openURL"
После этого, вы можете использовать функцию в коде программы следующим образом:
#If TARGET = “android” Or TARGET=”html5”
OpenURL("http://forum.boolean.name/")
#End
этот код будет работать только в HTML5 и Android, но не проблема добавить поддержку для остальных платформ.

Сообществом разработчиков Monkey было создано несколько интересных бесплатных модулей, использующих особенности платформ. Например, In-App Purchases для Android и iOS, Newgrounds API, AdMob для Android и т.д.

За что я плачу деньги?

Многие ошибочно думают, что платят деньги за Monkey. Это заблуждение.

Вы платите деньги за две вещи:
  • Модуль mojo (легковесный игровой фреймворк, который содержит функции для работы с графикой, звуками, устройствами ввода и т.д.)
  • Техническая поддержка

Все остальное является общественным достоянием и вы можете использовать это в любых, угодных вам, целях.

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

Monkey единственный в своем роде?

Нет. Кроссплатформенных средств разработки предостаточно. Каждое имеет свои достоинства и недостатки. Но ближе всего по идеологии к Monkey — Haxe и кроссплаторменный фреймворк для него — NME. Haxe + NME отличная бесплатная альтернатива Monkey. Они отличаются набором целевых платформ, и спецификой реализации, но думаю что многим Haxe придется по душе.

В завершение

Да, я думаю, что ответил далеко не на все вопросы. Но пост и так получается слишком длинным. Мне кажется, я объяснил достаточно, для того, чтобы вы поняли, нужно оно вам или нет. Естественно, Monkey не панацея, магии не бывает. Но при правильном подходе Monkey может серьезно облегчить жизнь разработчикам, при переносе игры на другие платформы.

Если у вас есть вопросы по Monkey, пожалуйста пишите, постараюсь ответить. Прошу тех, кому это не интересно, просто проходить мимо, я больше не хочу спорить и кому-то что-то доказывать. Мне за это не платят и у меня нет стремления пересадить всех на Monkey. Вам нравится что-то другое? Пожалуйста, у каждого есть свобода выбора.

Если кому-то Monkey пришелся по душе, добро пожаловать в наше скромное русскоязычное коммьюнити. Ссылка у меня в подписи.

Также, советую дополнительно ознакомиться со следующими статьями:
На этом все. Пока!

Последний раз редактировалось devolonter, 20.09.2012 в 19:49.
(Offline)
 
Ответить с цитированием
Эти 9 пользователя(ей) сказали Спасибо devolonter за это полезное сообщение:
ant0N (21.09.2012), Gector (20.09.2012), Harter (20.09.2012), Hurrit (20.09.2012), LLI.T.A.L.K.E.R. (20.09.2012), pax (20.09.2012), Randomize (20.09.2012), Reizel (23.02.2013), Жека (21.09.2012)
Старый 20.09.2012, 16:33   #2
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,861 пользователей)
Ответ: И снова о Monkey. Ставим точки над "И"

Отличная статья! Многое пояснил, а то такого рода информацию многие не могут получить, и следственно заблуждаются в том что Monkey есть на самом деле.
А вот возможность добовлять модули, весьма простая, нужно попробовать написать модуль для Socket.io и попробовать замутить сетевую игрушку.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
devolonter (20.09.2012)
Старый 20.09.2012, 16:36   #3
jimon
 
Сообщений: n/a
Ответ: И снова о Monkey. Ставим точки над "И"

скажем мне не надо mojo, тех поддержка, тогда где мне скачать компилятор, ide и тд бесплатно ?

Последний раз редактировалось jimon, 20.09.2012 в 23:15. Причина: опечатка
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
devolonter (20.09.2012)
Старый 20.09.2012, 16:42   #4
devolonter
Разработчик
 
Аватар для devolonter
 
Регистрация: 17.01.2007
Сообщений: 409
Написано 114 полезных сообщений
(для 281 пользователей)
Ответ: И снова о Monkey. Ставим точки над "И"

Сообщение от jimon Посмотреть сообщение
скажем мне не надо mojo, тех поддержка, тогда где мне сказать компилятор, ide и тд бесплатно ?
Существуют два форка Monkey:Можете свободно качать. Я бы советовал качать первый, т.к. он чаще обновляется и содержит больше дополнительных фишек. Например, Linux-версию.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Gector (20.09.2012)
Старый 20.09.2012, 17:53   #5
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,861 пользователей)
Ответ: И снова о Monkey. Ставим точки над "И"

Вот задумываюсь о JSON'е, как в Monkey реализовать удобную работу с ним..
JSON в html5 сразу в "готовеньком" виде, например:
var data = {
    
"coords": [
        { 
"x"1
        
"y"}
      , { 
"x"4
        
"y"}
      , { 
"x"3
        
"y"} ]
  , 
"entities": {
        
"4": { "name""test"
             
"type"}
      , 
"7": { "name""testB"
             
"type"} }
  , 
"type""state"

В JS, очень просто получить доступ к любому данному, или запустить цикл по key>value массивам, или по просто массиву объектов.

Я могу написать модуль которые будет пробегаться по элементам и их парсить.
Основной вопрос, это как сделать удобно в Monkey, интерфейс по доступу к данным.
В JS доступ к типу энтитя под key = 7, будет таким:
data['entities']['7']['type'
Или ещё "красивее":
data.entities['7'].type 
Можно как удобно либо через точку, либо как с массивом.

В Monkey, я как понимаю будет что-то типо объектов/контейнеров, которые могут иметь список детей, либо иметь значение.
Через интерфейсы можно реализовать разные элементы исходя из типа данных, и реализовать циклы. Monkey даст такую возможность?

В пользовании хотя бы так:
value = data.g("entities").g("7").g("type").g()
g - функция "get", по сути возвращает исходя из типа объекта, это может быть такой же объект/контейнер, или чистое данное.
Выглядит конечно в кучу раз хуже..
Можно правда сделать просто публичное поле у объекта, но ведь поле имеет не определённый тип данных. Это может быть контейнер, или значение. Как тут быть?
Пока раздумываю на работе, домой приду, буду эксперементировать конечно.

Моя идея, это построить модуль для работы с nodejs модулем socket.io, для html5 платформы, чтобы можно было обмениваться json данными, т.к. это самый удобный формат по работе с данными по сети, который я когда либо встречал. По крайней мере с nodejs это просто сказка.

В общем, какие есть идеи в реализации, и главное, как это будет в пользовании?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
LLI.T.A.L.K.E.R. (20.09.2012)
Старый 20.09.2012, 18:20   #6
devolonter
Разработчик
 
Аватар для devolonter
 
Регистрация: 17.01.2007
Сообщений: 409
Написано 114 полезных сообщений
(для 281 пользователей)
Ответ: И снова о Monkey. Ставим точки над "И"

Moka, в сторону готовых решений смотрели? Вот это, например - monkey-json.

Также красиво (через точку), как в JS сделать не получится, т.к. нет возможности генерировать произвольные объекты "на лету". Через массивы, слишком сложно. Самый простой вариант, это последний.

Чтобы иметь возможность проходить по объекту в цикле, словно это коллекция, объект должен возвращать иметь метод:
Method ObjectEnumerator:Enumerator()
Класс Enumerator должен реализовывать следующие методы:
Class Enumerator

	Method HasNext:Bool()
	End

	Method NextObject:Object()
	End

End
Вместо Object должен быть необходимый в цикле класс. Также можно использовать обобщенный класс для реализации:
Class Enumerator<T>

	Method HasNext:Bool()
	End

	Method NextObject:T()
	End

End
Советую посмотреть как устроены List, Map, Stack и на этом основываться.
Надеюсь информация поможет.

Последний раз редактировалось devolonter, 20.09.2012 в 19:26.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
moka (20.09.2012)
Старый 20.09.2012, 19:33   #7
Harter
Бывалый
 
Аватар для Harter
 
Регистрация: 03.11.2008
Адрес: Украина, Днепропетровск
Сообщений: 871
Написано 554 полезных сообщений
(для 2,520 пользователей)
Ответ: И снова о Monkey. Ставим точки над "И"

devolonter, спасибо за статью.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
devolonter (20.09.2012)
Старый 20.09.2012, 19:55   #8
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,861 пользователей)
Ответ: И снова о Monkey. Ставим точки над "И"

Сообщение от devolonter Посмотреть сообщение
Moka, в сторону готовых решений смотрели? Вот это, например - monkey-json.

Также красиво (через точку), как в JS сделать не получится, т.к. нет возможности генерировать произвольные объекты "на лету". Через массивы, слишком сложно. Самый простой вариант, это последний.

Чтобы иметь возможность проходить по объекту в цикле, словно это коллекция, объект должен возвращать иметь метод:
Method ObjectEnumerator:Enumerator()
Класс Enumerator должен реализовывать следующие методы:
Class Enumerator

	Method HasNext:Bool()
	End

	Method NextObject:Object()
	End

End
Вместо Object должен быть необходимый в цикле класс. Также можно использовать обобщенный класс для реализации:
Class Enumerator<T>

	Method HasNext:Bool()
	End

	Method NextObject:T()
	End

End
Советую посмотреть как устроены List, Map, Stack и на этом основываться.
Надеюсь информация поможет.
Да, по ссылке, примерно то что и представлял, но в более некрасивой форме.
Насчёт Map - это тема, нужно посмотреть. Т.к. по сути мне и нужны создание map объектов (контейнеры), и удобное хранение самих значений.
Ведь Map имеет доступ к значению по key типо так: map["key"] ? Значит такое можно реализовать и для другого типа объекта..
Нужно поэксперементировать
(Offline)
 
Ответить с цитированием
Старый 20.09.2012, 20:03   #9
devolonter
Разработчик
 
Аватар для devolonter
 
Регистрация: 17.01.2007
Сообщений: 409
Написано 114 полезных сообщений
(для 281 пользователей)
Ответ: И снова о Monkey. Ставим точки над "И"

Сообщение от MoKa Посмотреть сообщение
Ведь Map имеет доступ к значению по key типо так: map["key"]
Да, только через объектную модель, но суть та же. Также в Map имеются методы для обращения к списку ключей и к списку значений. В общем, думаю должно подойти
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
moka (20.09.2012)
Старый 20.09.2012, 22:37   #10
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,861 пользователей)
Ответ: И снова о Monkey. Ставим точки над "И"

Так, инфа с поля боя, пока двигался к monkey, по пути немного поизучал python, и написал плагин для Sublime Text 2, который компилит monkey проект, копирует папку с билдом в папку с апачем (настраивается в плагине, dest переменная), и открывает стандартным броузером ссылку на проект.
Очень доволен собой, т.к. с python никогда не имел дело.

Вот код плагина, чтобы его заюзать, нужно в Sublime сходить в Tools > New Pluggin, затем вставить этот код:
import sublime, sublime_plugin
import os.path, shutil, errno
import webbrowser
from subprocess import call

def copyfolder(src, dst):
  try:
    shutil.rmtree(dst, True)
    shutil.copytree(src, dst)
    return True
  except OSError as exc:
    sublime.error_message(errno.errorcode[exc.errno])
    if exc.errno == errno.ENOTDIR:
      shutil.copy(src, dst)
    else: raise

class MonkeyBuildCommand(sublime_plugin.TextCommand):
  def run(self, edit):
    if self.view.file_name() and os.path.splitext(self.view.file_name())[1] == ".monkey":
      call(["trans_winnt.exe", "-target=html5", self.view.file_name()])

      folder = os.path.splitext(self.view.file_name())[0]
      projectName = os.path.basename(folder)
      folder += ".build\\html5"
      dest = "C:\\wamp\\www\\monkey\\" + projectName

      if copyfolder(folder, dest):
        sublime.status_message("project copied")

        os.rename(dest + "\\MonkeyGame.html", dest + "\\index.html")
        sublime.status_message("html file renamed")

        webbrowser.open_new_tab("http://localhost/monkey/" + projectName)
      else:
        sublime.error_message("project copying error")
    else:
      sublime.error_message("could not run for non .monkey files")
Очень важны табы, т.к. это python.
Далее охраняем это куда либо в папку Packages для Sublime. Её найти можно если сходить в Preferences > Browse Packages..
Далее идём в Preference > Key Binding User..
И там добавляем вот такую строку:
{ "keys": ["ctrl+m"], "command": "monkey_build" }
Не забываем отбиндить другой хоткей на эту же кнопку, идём в Preferences > Key Bindings Default, и ищём "ctrl+m", комментим всю строку с этим хоткеем.

Далее нужно чтобы в системе был добавлен Path на папку с trans_winnt.exe, он лежит в monkey/bin/.

Готово. Открываем любой .monkey файл, и жмём ctrl+m.
Если редактировали плагин, там важно что будет применяться функция удаления папки и всего содержимого, если намудрите чего, удалит не то. Так что на ваш страх и риск, я ответсвенности не несу :D

Данный модуль можно адаптировать под другие target'ы.

В общем сказка - билдит проект, и копирует всё в папку с веб файлами апача и запускает в броузере..
Зачем мне это нужно? Для того чтобы тестировать веб сокеты и т.п. дребедень. Файлы с всякой хренью для тестов я буду хранить на апаче. В .httaccess настрою чтобы при переходе в localhost/socket/ перенаправлял на nodejs, который выдаст socket.io.js файл для коммуникации с сервером. Таким образом у меня будет публично доступная последняя версия игры работающая с веб сокетами.
Теперь мне нужно заняться модулем для socket.io
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо moka за это полезное сообщение:
devolonter (20.09.2012), Harter (21.09.2012), Reizel (23.02.2013)
Старый 20.09.2012, 22:47   #11
devolonter
Разработчик
 
Аватар для devolonter
 
Регистрация: 17.01.2007
Сообщений: 409
Написано 114 полезных сообщений
(для 281 пользователей)
Ответ: И снова о Monkey. Ставим точки над "И"

Сообщение от MoKa Посмотреть сообщение
копирует папку с билдом в папку с апачем (настраивается в плагине, dest переменная), и открывает стандартным броузером ссылку на проект.
Классно! А можно адаптировать под запуск стандартного веб-сервера Monkey MServer? Там правда как-то порт нужно будет получить, наверное это будет проблемой.
(Offline)
 
Ответить с цитированием
Старый 20.09.2012, 22:57   #12
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,861 пользователей)
Ответ: И снова о Monkey. Ставим точки над "И"

Можно, и это в разы проще. Вот:
import sublime, sublime_plugin
import os.path
from subprocess import call

class MonkeyBuildCommand(sublime_plugin.TextCommand):
  def run(self, edit):
    if self.view.file_name() and os.path.splitext(self.view.file_name())[1] == ".monkey":
      call(["trans_winnt.exe", "-run", "-target=html5", self.view.file_name()])
      sublime.status_message("running")
    else:
      sublime.error_message("could not run for non .monkey files")
Этот код как обычно билдит и сразу запускает запуская Monkey Server, это делает сам trans_winnt.exe с аттрибутом -run. Про запуск на определённом порту, хз, это нужно смотреть если mserver_winnt.exe предоставляет такие параметры, если нет, то боюсь что не получиться..
По идеи, если в config.winnt.txt указать HTML_PLAYER, exe броузера, например Chrome, он запускает нормально файл тоже. Но проблема тут в отсутствии какого либо Apache и никакого серверного скрипта тоже не будет. Но думаю что коммуникация с Socket.io будет всё равно ОК.
Только проблема будет в реальных полевых условиях - броузеры могут не позволять меж-доменные запросы по security причинам.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
devolonter (20.09.2012)
Старый 21.09.2012, 00:02   #13
devolonter
Разработчик
 
Аватар для devolonter
 
Регистрация: 17.01.2007
Сообщений: 409
Написано 114 полезных сообщений
(для 281 пользователей)
Ответ: И снова о Monkey. Ставим точки над "И"

Сообщение от MoKa Посмотреть сообщение
Про запуск на определённом порту, хз, это нужно смотреть если mserver_winnt.exe предоставляет такие параметры, если нет, то боюсь что не получиться..
Не, это я уже не соображаю. Как раз то, что нужно! Работает Я обычно использую Jungle IDE, но для быстрых правок Sublime Text самое то. Спасибо!
(Offline)
 
Ответить с цитированием
Старый 21.09.2012, 09:53   #14
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,861 пользователей)
Ответ: И снова о Monkey. Ставим точки над "И"

Сообщение от devolonter Посмотреть сообщение
Не, это я уже не соображаю. Как раз то, что нужно! Работает Я обычно использую Jungle IDE, но для быстрых правок Sublime Text самое то. Спасибо!
Ещё, вот от сюда: https://github.com/gingerbeardman/monkey.sublime
Можешь слить Monkey.tmLanguage и папки Preferences и Snippets. И снова, пробеги в Preferences > Browse Packages, там создай папку "monkey, и вот то что скачал кинь туда. Sublime перезапускать не нужно. Может только файл переоткрыть.
Будет подсветка и авто-дополнение работать.

Можно будет ещё запилить плагин, чтобы на определённой команде открывало справку для выделенной команды. Если такое замучу, ваще сказка будет
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
devolonter (21.09.2012)
Старый 21.09.2012, 10:23   #15
devolonter
Разработчик
 
Аватар для devolonter
 
Регистрация: 17.01.2007
Сообщений: 409
Написано 114 полезных сообщений
(для 281 пользователей)
Ответ: И снова о Monkey. Ставим точки над "И"

Сообщение от MoKa Посмотреть сообщение
Ещё, вот от сюда: https://github.com/gingerbeardman/monkey.sublime
Можешь слить Monkey.tmLanguage и папки Preferences и Snippets. И снова, пробеги в Preferences > Browse Packages, там создай папку "monkey, и вот то что скачал кинь туда. Sublime перезапускать не нужно. Может только файл переоткрыть.
Будет подсветка и авто-дополнение работать.
Про эту ссылку знал, но времени разобраться и подключить не было. Спасибо, за подробную инструкцию, сегодня настрою. Там вроде и сборка с запуском есть (хотя я где-то читал, что не работает), зря тебя мучил, извини. С Sublime знаком недавно, но уже успел влюбиться)

Сообщение от MoKa Посмотреть сообщение
Можно будет ещё запилить плагин, чтобы на определённой команде открывало справку для выделенной команды. Если такое замучу, ваще сказка будет
Было бы супер!
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +1, время: 17:04.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com