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

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

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

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

Ответ
 
Опции темы
Старый 18.09.2012, 13:51   #1
Черный крыс
 
Сообщений: n/a
Вся правда о Monkey

Привет.

Тут на днях начал изучать данное чудо програмисткой мысли, вобсчем впечатления остались такие, какие я и ожидал - поделка жуткая. Сам язык то по сути не плохой, а вот все остальное оставляет желать лучшего. Вообще у Марка замечена такая тенденция - с каждым продуктом все меньше возможностей в плане графики\звука и.т.д... и как итог юзер должен тратить свое время на допиливание движка. Ах да... насчет движка - говнокодец тот еще, в славных традициях Новозеландских программистов для примера возьмем такой фрагмент кода :

Function Rotate( angle# )
	Transform Cos(angle),-Sin(angle),Sin(angle),Cos(angle),0,0
End Function
Это просто пипец! Неужели Марку впадло было обьявить две локальные переменные ?! Неудивительно, что мартышка мягко говоря "нелетает" в HTML.

Function DrawImage( image:Image,x#,y#,frame=0 )
#If CONFIG="debug"
	DebugRenderDevice
#End
	Local f:Frame=image.frames[frame]

	If context.tformed
		PushMatrix
		
		Translate x-image.tx,y-image.ty

		ValidateMatrix

		If image.flags & Image.FullFrame
			context.device.DrawSurface image.surface,0,0
		Else
			context.device.DrawSurface2 image.surface,0,0,f.x,f.y,image.width,image.height
		Endif
		
		PopMatrix
	Else
		ValidateMatrix
		
		If image.flags & Image.FullFrame
			context.device.DrawSurface image.surface,x-image.tx,y-image.ty
		Else
			context.device.DrawSurface2 image.surface,x-image.tx,y-image.ty,f.x,f.y,image.width,image.height
		Endif
	Endif
End
Что за манипуляции с матрицами внутри функции непосредственной отрисовки??? Тоесть даже если я поставлю в аргументах нули - он всеравно преобразует матрицу, тоесть по сути функция выполнит бесполезный кусок кода.

И подобных моментов в мартышке - сплош и рядом.

По самому языку : Отсутствие дерективы "With". На дворе уже 21-й век... суть его заключается в том, что переменная обьявленная с этой дерективой помещается в регистр ЦП и соответственно при обращении к ней обеспечивается быстрый доступ.

ВЕРДИКТ - какашко, которому далеко даже до БМакса.

Но сама идея движка не плохая, только реализация хуйовая.
 
Ответить с цитированием
Старый 18.09.2012, 14:25   #2
devolonter
Разработчик
 
Аватар для devolonter
 
Регистрация: 17.01.2007
Сообщений: 409
Написано 114 полезных сообщений
(для 281 пользователей)
Ответ: Вся правда о Monkey

Отличный обзор! В свете появления пиратки мне он нравится)

А если серьезно. За mojo никто не обязывает вас платить. Monkey распространяется как общественное достояние, есть уже несколько форков. Деньги вы платите за mojo. Если он вас не устраивает, вы можете попробовать написать свой кроссплатформенный фреймворк с преферансом и дамами.

Далее по вашим замечаниям.

Rotate. Есть еще Transform, в котором можно указать непосредственно матрицу трансформации, которую вы можете сами подготовить с локальными переменными и прочим.

Если бы вы заглянули дальше (в нативные исходники), то поняли, что преобразование матрицы не самая тяжелая операция.

Monkey не летает в HTML, так как использует 2d-контекст. Я делал патч, который заменяет 2d-контекст на 3d (WebGL). Вот результат -
http://lab.devolonter.ru/libs/monkey...ode/html5.html (конечно надо смотреть не в IE)

Ну а так. В чем-то вы правы, добиться той производительности, которой можно добиться, если писать код под конкретную платформу, используя родные инструменты будет сложно. Но вопрос в ресурсах, которые нужно потратить на разработку. Если у вас есть силы и желание переписывать свой код снова и снова, пожалуйста.

P.S. Слишком громкий заголовок. И да, все это можно было узнать по демо-версии, если что.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо devolonter за это полезное сообщение:
Randomize (19.09.2012), Черный крыс (18.09.2012)
Старый 18.09.2012, 14:58   #3
Черный крыс
 
Сообщений: n/a
Ответ: Вся правда о Monkey

В БМаксе модули тоже являются достоянием общественности, не скажу что код тама супер, но уж точно получше.

В нативные исходники я смотрел, после увиденного даже нет желания что то коментировать.

О существовании функции Transform() я знаю, вы не поняли контекст моего обзора, мартышка рассматривалась как продукт, после покупки которого не придется его дополнительно оптимизировать ибо 1) Это все таки ПРОДУКТ за который я плачу живые деньги 2) Мне не очень нравится исправлять глупости Марка после каждого упдеэйта и еще следить за совместимостью при всем этом хозяйстве. Вы мне еще скажите что по два раза вызванные функции Sin() и Cos() - не самая тяжелая операция.

Насчет контекста ХТМЛ - вы подтвердили мое же предположение. После покупки придется ставить кастыли чтоб нармально все работало, хотя знаю что это не под все платформы, но дерективы препроцессора еще ни кто не отменял. А ХТМЛ в том виде в котором он находится сейчас - мало кому нужно.

По ощущениям мартышка не стоит тех денег, которые за него просят. Реальная его цена на данный момент 20-25$.
 
Ответить с цитированием
Старый 18.09.2012, 15:26   #4
devolonter
Разработчик
 
Аватар для devolonter
 
Регистрация: 17.01.2007
Сообщений: 409
Написано 114 полезных сообщений
(для 281 пользователей)
Ответ: Вся правда о Monkey

Сообщение от Diablo1909 Посмотреть сообщение
В БМаксе модули тоже являются достоянием общественности, не скажу что код тама супер, но уж точно получше.
Важный момент. В данном случае мы говорим о платных модулях (точнее одном модуле). В BlitzMax платным является компилятор. Это просто для информации.

Мне, если честно, после Monkey на BlitzMax не захотелось уже возвращаться. Учитывая улучшения в языке, уже не хочется мириться с тонкостями BlitzMax.

Сообщение от Diablo1909 Посмотреть сообщение
В нативные исходники я смотрел, после увиденного даже нет желания что то коментировать.
Ок. Тогда я тоже опущу этот момент, так как не знаю, что именно вас там возмутило.

Сообщение от Diablo1909 Посмотреть сообщение
О существовании функции Transform() я знаю, вы не поняли контекст моего обзора, мартышка рассматривалась как продукт, после покупки которого не придется его дополнительно оптимизировать
Я думаю хороший программист должен знать тонкости своего инструмента разработки. И понятно что последовательный вызов Translate, Scale и Rotate это глупость в свете существования Transform.

Сообщение от Diablo1909 Посмотреть сообщение
Вы мне еще скажите что по два раза вызванные функции Sin() и Cos() - не самая тяжелая операция.
Этого я не говорил. Но обычно не это является узким местом, поверьте.

Сообщение от Diablo1909 Посмотреть сообщение
Насчет контекста ХТМЛ - вы подтвердили мое же предположение. После покупки придется ставить кастыли чтоб нармально все работало, хотя знаю что это не под все платформы
Я лишь показал, что есть решение. Причем готовое, я код своего патча не прячу. И да, это рантайм-патч не требующий редактирования вашего кода.

Заметьте, я не вносил изменения в логику, только переопределил графические функции. Что говорит о том, что проблема совсем не синусах и косинусах. 3d-контекст не используется изначально, т.к. он не поддерживается в IE, а Марк старается дать равные возможности для всех платформ.

Сообщение от Diablo1909 Посмотреть сообщение
По ощущениям мартышка не стоит тех денег, которые за него просят. Реальная его цена на данный момент 20-25$.
Вы где последний раз такие цены видели?) Я в магазин хожу, банально за продуктами (обычными продуктами) и то больше трачу.

Последний раз редактировалось devolonter, 18.09.2012 в 18:29.
(Offline)
 
Ответить с цитированием
Старый 18.09.2012, 15:37   #5
devolonter
Разработчик
 
Аватар для devolonter
 
Регистрация: 17.01.2007
Сообщений: 409
Написано 114 полезных сообщений
(для 281 пользователей)
Ответ: Вся правда о Monkey

Просто. Интересное наблюдение. Я, как человек, потративший живые деньги, как вы говорите, не жалею о своем приобретении. Вы же, не потратив ничего, возмущаетесь, как после покупки, которая вас не устроила. WTF!?)
(Offline)
 
Ответить с цитированием
Старый 18.09.2012, 15:50   #6
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Вся правда о Monkey

Мде..
Ну во первых, написать инструмент на кучу платформ - это реально задача.
Если ты например хочешь огромную свободу со звуком. То API по работе со звуком будет упираться в то что предоставляют ВСЕ платформы, иначе суть мультиплатформенности теряется. Следственно если какая-то плюшка не доступна на одной платформе, её не будет везде.
Также объём разработки при правильном подходе не увеличивается конечно в число платформ, но всё равно увеличивается несколько кратно.

Следственно разработка качественного инструмента будет весьма задачей.
Я эксперементировал простые вещи с Monkey - он справляется с поставленной задачей идеально. Не претендуя ни на какой супер двиг или убийцу Unity, он отлично делает что должен.

Да и аллокация переменных и последующая отчистка памяти, при частых вызовах, может быть на много дороже чем пару дополнительных Cos или Sin..
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо moka за это полезное сообщение:
devolonter (18.09.2012), Randomize (19.09.2012), Taugeshtu (18.09.2012)
Старый 18.09.2012, 16:35   #7
devolonter
Разработчик
 
Аватар для devolonter
 
Регистрация: 17.01.2007
Сообщений: 409
Написано 114 полезных сообщений
(для 281 пользователей)
Ответ: Вся правда о Monkey

Сообщение от MoKa Посмотреть сообщение
Не претендуя ни на какой супер двиг или убийцу Unity, он отлично делает что должен.
Отлично сказано, Moka.

У Monkey есть недостатки, как же без них, но покажите мне инструмент лишенный недостатков? Я работал с разными платформами, с разными языками, разными фреймворками и всегда мне приходилось мириться с какими-нибудь тонкостями и костылями.

Я до сих пор помню, как писал приложение под Android. Несмотря на всю крутость и удобство это был настоящий ад. Поддержка разных версий API, разных разрешений экранов, тонкости работы с хардварной клавой и SQLite. А верстка интерфейса - отдельный разговор. Сколько я матерился)

Я думаю подобную историю можно написать про любую платформу и инструмент разработки. Не стоит искать идеальных инструментов, их не бывает. Просто нужно хорошо знать, то с чем ты имеешь дело.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
moka (18.09.2012)
Старый 18.09.2012, 21:23   #8
Черный крыс
 
Сообщений: n/a
Ответ: Вся правда о Monkey

Продолжу невеселый трактат.

Теперь недостатки самого языка.

1) Я уже упоминал об отсутствии оператора With - он нужен. Без него сегодня никуда.

2) Невозможность создания указателей на типы пользователя. Приходится делать указатели на массивы с простыми типами данных или же оборачивать - в результате код становится невыразительным.

3) Нет команды SinCos() - очень часто бывает, что надо и синус и косинус угла, а одной командой это сделать явно быстрее чем двумя.

4) Нет указателей на методы класса.

5) Нет директивы inline - нужна она! И не только для ускорения работы кода.

6) Нет автоматических конструкторов копирования объектов.

7) Отсутствие макросов и шаблонов. Про шаблоны я молчу, хотя бы макросы сделали блин...

Нет поддержки событий на уровне языка - а это нужная фича, особенно при разработке игр.

9) Снова эти БлицМаксовсое списки. А они не очень удобно реализованы. Если в Бмаксе Марка можно было понять почему он написал такие списки (из за некоректной обработки мусора с кросс-линками) то в Монкей это ставит в тупик, вследствии чего нельзя легко и элегантно реализовать многоуровневые древовидные спискои.

10) Нет математических функций для округления чисел с плавающей запятой до нужного количества знаков после запятой.

11) Нет команд для временной передачи лишнего времени системе.

12) не совсем уверен, но похоже язык совсем не дружит с указателями ?
 
Ответить с цитированием
Старый 18.09.2012, 22:01   #9
devolonter
Разработчик
 
Аватар для devolonter
 
Регистрация: 17.01.2007
Сообщений: 409
Написано 114 полезных сообщений
(для 281 пользователей)
Ответ: Вся правда о Monkey

Сообщение от Diablo1909 Посмотреть сообщение
1) Я уже упоминал об отсутствии оператора With - он нужен. Без него сегодня никуда.
Честно, не сталкивался с этим. Но думаю, что это невозможно реализовать на всех платформах.

Сообщение от Diablo1909 Посмотреть сообщение
2) Невозможность создания указателей на типы пользователя. Приходится делать указатели на массивы с простыми типами данных или же оборачивать - в результате код становится невыразительным.
Не совсем понял. Чем вас не устроили ссылки? Или вам нужны указатели на примитивы? Тогда есть упаковка/распаковка. В любом случае кроссплатформенно реализовать указатели невозможно.

Сообщение от Diablo1909 Посмотреть сообщение
3) Нет команды SinCos() - очень часто бывает, что надо и синус и косинус угла, а одной командой это сделать явно быстрее чем двумя.
Да, нет такой функции. Не везде нативно поддерживаются. Т.е. опять таки невозможно кроссплатформенно реализовать.

Сообщение от Diablo1909 Посмотреть сообщение
4) Нет указателей на методы класса.
И снова невозможно кроссплатформенно реализовать. Есть отражение, есть интерфейсы. Проблему решить можно.

Сообщение от Diablo1909 Посмотреть сообщение
5) Нет директивы inline - нужна она! И не только для ускорения работы кода.
Нет. Но есть зарезервированное слово, возможно будет.

Сообщение от Diablo1909 Посмотреть сообщение
6) Нет автоматических конструкторов копирования объектов.
Нет. Не критично.

Сообщение от Diablo1909 Посмотреть сообщение
10) Нет математических функций для округления чисел с плавающей запятой до нужного количества знаков после запятой.
Один раз сам написал и забыл. Не критично.

Сообщение от Diablo1909 Посмотреть сообщение
11) Нет команд для временной передачи лишнего времени системе.
Не возможно реализовать кроссплатформенно. Как вы из JS например управление системе передадите?

Сообщение от Diablo1909 Посмотреть сообщение
12) не совсем уверен, но похоже язык совсем не дружит с указателями ?
Все тоже самое. Невозможно это сделать кроссплатформенно.

С пропущенными пунктами, я или полностью или частично согласен.

Вообще создается впечатление, что вы не совсем понимаете принцип работы Monkey, ну или не очень знакомы со спецификой всех платформ. Не везде есть указатели, поэтому реализовать их на некоторых платформах можно только посредством отражения, а это, как вы наверное понимаете, не очень производительно. Прежде чем писать, что какой-то фишки нет, советую посмотреть возможность ее внедрения на всех платформах.
(Offline)
 
Ответить с цитированием
Старый 18.09.2012, 22:44   #10
Harter
Бывалый
 
Аватар для Harter
 
Регистрация: 03.11.2008
Адрес: Украина, Днепропетровск
Сообщений: 871
Написано 554 полезных сообщений
(для 2,520 пользователей)
Ответ: Вся правда о Monkey

Простите, что прерываю вас, джентельмены, однако хотелось бы поделиться радостной новостью:

(Offline)
 
Ответить с цитированием
Эти 5 пользователя(ей) сказали Спасибо Harter за это полезное сообщение:
devolonter (18.09.2012), Hurrit (20.09.2012), Randomize (19.09.2012), Жека (19.09.2012), Черный крыс (18.09.2012)
Старый 18.09.2012, 22:45   #11
Черный крыс
 
Сообщений: n/a
Ответ: Вся правда о Monkey

<<Не совсем понял. Чем вас не устроили ссылки? Или вам нужны указатели на примитивы? Тогда есть упаковка/распаковка. В любом случае кроссплатформенно реализовать указатели невозможно.>>

Если язык не держит указатели, то это уже невозможно.

<<И снова невозможно кроссплатформенно реализовать.>>
Это скорее отмазка. Но вот есть же директивы препроцессора, можно же это реализовать на тех платформах, где это есть. Привожу пример.

Допустим функция SinCos()

Ее держит Win32, Mac, Linux и допустим остальные ее не держат...
то код будет выглядеть следующим образом :

Function SinCos:Float[](angle:Float)
#ifdef __win32__ or __macos__ or __linux__
' ok платформа держит ее знач вызываем нужный нам нативный код
#else
' остальные говно-платформы
Local arr:Float[] = New Float[2]
arr[0] = Sin(angle)
arr[1] = Cos(angle)
Return arr
#end
End
Данный псевдокод будет работать на всех платформах.
 
Ответить с цитированием
Старый 18.09.2012, 22:47   #12
devolonter
Разработчик
 
Аватар для devolonter
 
Регистрация: 17.01.2007
Сообщений: 409
Написано 114 полезных сообщений
(для 281 пользователей)
Ответ: Вся правда о Monkey

Harter, спасибо за новость. Я знал о ней, но думаю, что многие участники тут не знали.
Вообще, о планах развития Monkey можно почитать тут: http://monkeycoder.ru/blog/monkey/49.html. Это перевод поста из блога Марка.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Harter (18.09.2012)
Старый 18.09.2012, 23:05   #13
devolonter
Разработчик
 
Аватар для devolonter
 
Регистрация: 17.01.2007
Сообщений: 409
Написано 114 полезных сообщений
(для 281 пользователей)
Ответ: Вся правда о Monkey

Diablo1909,

Я соглашусь, что это отмазка, если вы представите мне реализацию кроссплатформенных указателей, которые будут работать на всех заявленных и будущих платформах.

Moka правильно сказал, что не слишком богатый функционал - это следствие того, что нужно поддерживать множество платформ, к которым будут добавляться новые. Слишком сложный функционал сложен в поддержке и будет отнимать слишком много времени.

Того, что есть сейчас вполне хватает. Это я вам говорю как человек, который почти полностью портировал flash-фреймворк flixel на Monkey. Т.е. мне удалось повторить почти весь функционал данного фреймворка, дописав всего лишь несколько нативных функций для всех платформ. В остальном мне хватило того, что было в mojo. И это без указателей и даже без отражения (когда я начал, отражения еще не было).

По поводу SinCos. Вы все говорите верно, но это без труда добавляется самостоятельно. Т.е. не вижу никаких фундаментальных проблем в этом плане.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Черный крыс (19.09.2012)
Старый 19.09.2012, 00:53   #14
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,362
Написано 2,474 полезных сообщений
(для 6,861 пользователей)
Ответ: Вся правда о Monkey

Diablo1909, JavaScript не поддерживает многого из того что ты перечислил, а он язык целевой платформы HTML5. Так же есть платформа FLASH (Action Script) который тоже многого просто не поддерживает. Ты предлагаешь их исключить?

With видал последний раз в Delphi. Он используется где то ещё? Честно говоря With никогда не требовался мне. Даже больше - лучше будет если сразу будет видно объект с которым идёт работа. Но это дело вкуса.

Я не хочу вступать в долгие споры. Честно, я уже потратил достаточно времени с напильником чтоб Monkey подходил под мои требования. Но я не считаю что это плохо. Каждый инструмент нужно либо затачивать под себя либо терпеть и привыкать.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 4090 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Randomize за это полезное сообщение:
devolonter (19.09.2012), Черный крыс (19.09.2012)
Старый 19.09.2012, 04:40   #15
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Вся правда о Monkey

with - вообще в первый слышу про данный аттрибут.
Насчёт указателей, в javascript как раз всё весьма гибко, там всё можно переуказывать и т.п. Но эта гибкость имеет свои минусы тоже, особенно в производительности, и если не соблюдать поля у объекта в определённой очереди, то не будут например работать оптимизации в V8, которые очень сильно улучшают производительность если писать код на JS корректно.

Автор, не нужен тебе Monkey. Иди пиши на С++..
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Черный крыс (19.09.2012)
Ответ


Опции темы

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

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


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


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