forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Monkey (http://forum.boolean.name/forumdisplay.php?f=163)
-   -   Вопрос-Ответ (для начинающих) (http://forum.boolean.name/showthread.php?t=17703)

devolonter 01.01.2013 18:15

Вопрос-Ответ (для начинающих)
 
Очень рад, что на форуме наконец-то появился тематический раздел посвященный Monkey.

В этой теме предлагаю задавать вопросы тем, кто начинает свое знакомство с Monkey или переходит на него с BlitzMax или Blitz3d. В последствии тему можно будет переформировать во что-то типа FAQ.

SBJoker 10.01.2013 18:29

Ответ: Вопрос-Ответ (для начинающих)
 
1. Возможен ли нормальный дебаг? Точки останова, пошаговое исполнение и просмотр значений переменных? И на каких платформах это возможно.
2. Как читать бинарные файлы на таргетах ios и android (неплохо бы и html5)
3. Почему таргет HTML5 добавляет все ресурсные файлы в подпапку data, но при этом не учитывает это изменение пути при загрузке этих файлов? (файл для всех платформ лежит в корне, для html5 это уже data/file.ext)

devolonter 10.01.2013 19:05

Ответ: Вопрос-Ответ (для начинающих)
 
1. Возможен. На C++ платформах, например, GLFW. Работает также как и в BlitzMax через DebugLog и DebugStop.
2. С помощью модуля brl.databuffer, работает на всех платформах. Для того, чтобы файл считался бинарным его нужно добавить в #BINARY_FILES. По умолчанию бинарными файлами считаются все файлы с расширениями .bin и .dat
3. У всех платформ схожий принцип работы с ресурсами - все ресурсы помещаются в подпапку data (или подобную ей) и загружаются без указания этой папки. Можно пример, где это не работает?

Данил 15.02.2013 23:19

FAQ по Monkey
 
Небольшой диалог с devolonter.
Собран из истории сообщений со мной.
Мало ли кому пригодится.

Цитата:

DeviceWidth, DeviceHeight - работать будет на всех разрешениях, но с виртуальным разрешением, нужно заморочиться самому.

Данные с мультатча принимать можно TouchX(index), TouchY(index), TouchHit(index), TouchDown(index), аксселерометр тоже работает AccelX, AccelY, AccelZ

для android иконки лежат в .build\android\res\drawable-hdpi, .build\android\res\drawable-ldpi, .build\android\res\drawable-mdpi
Цитата:

[email protected]
сразу же бросилось в глаза - DrawText рисуется с черной рамкой о_О
devolonter
> сразу же бросилось в глаза - DrawText рисуется с черной рамкой о_О
там файл непрозрачный для шрифта
[email protected]
решение?
devolonter
вообще стандартный текстовый движок разве что для отладки
[email protected]
ок,понял. есть нестандартые?
devolonter
да
по шрифтам можешь посмотреть тут одно из решений - http://monkeycoder.ru/blog/beginners/60.html

Цитата:

[email protected]
как граф.движок? нормально выводит имаги? не хуже бмакса?
бленды так же все поддерживает?
devolonter
имаги выводит лучше. Гораздо грамотнее логика построена. особенно если использовать атласы. Блениднг только Light
и обычный.
также по сравнению с BM немного изменилась работа с трансформациями. Теперь все на матрицах PushMatrix PopMatrix сначала кажется неудобно, но потом понимаешь всю прелесть.
А вообще я бы советовал использовать какой-нибудь фреймворк
[email protected]
Например? :)
[email protected]
Расскажи еще, мне очень уже нравится монки
devolonter (23:22:29 23/12/2012)
fantomEngine, Diddy, flixel, bono
все являются обертками над mojo, все также кроссплатформенные. Flixelем занимаюсь я, в свободное время. По нему мало документации, но так как это порт флэшового фреймворка то много инфы можно найти для оригинального flixel и делать по подобию. Если интересно http://devolonter.github.com/flixel-monkey/
[email protected]
к сожалению, интересует только экспорт под анроид
ну, html5 еще)
devolonter
ну это пока. Аппетит приходит во время еды)
[email protected]
ну, возможно :)
devolonter
вот информация по всем стандартным модулям - http://blitz-wiki.appspot.com/Module_reference немного устарела, но общее представление дает. Также с помощью сторонних модулей можно подключать внутриигровые покупки, рекламу и т.д
.





Цитата:

[email protected]
столкнулсяс первой же проблемой - Rotate поворачивает весь Entity, а не изображение. какая функция отвечает именно за поровот изображения?
devolonter
вот, то как раз о чем говорил) Работай с матрицами:
PushMatrix
Rotate
DrawImage
PopMatrix


также есть специальная функция DrawImage где сразу можно задать поворот: http://blitz-wiki.appspot.com/DrawImage
но по сути она делает тоже самое.
Monkey работает с матрицами трансформации. Они работают каждый на своем уровне. Поддерживается до 32-х уровней матриц
[email protected]
что такое матрица трансофрмаицйи?
как я понимаю, кусок данных, в котором храняться значения всех поворотом смещений для опреденного уровня?
т.е. уровень - несколько объектов например
devolonter
матрица которая задает как должен быть трансформированы объекты в ней - поворот, перемещение и масштаб это частные случаи. Искажать можно как угодно
Под каждый свой Push Pop. Просто можно еще вкладывать друг в друга.
полезно например, при глобальном масштабировании
после Pop матрица возвращается в исходное состояние и следующий Push заново создает уже чистую матрицу
т.е. об уровнях беспокоиться не стоит, только если у тебя нет Push Push Push и т.д. до 32 раз друг в друге
Вот пример с вложенными матрицами:
PushMatrix()
Scale(2, 2) 'глобальный масштаб
PushMatrix()
Rotate(45)
DrawImage(img, x, y)
PopMatrix()
PopMatrix()
вот хороший пример с матрицами bananas\hitoro\matrixrocks\matrixrocks.monkey





Цитата:

[email protected]
как правильно удалить объект?
devolonter
обнулить все ссылки на него
[email protected]
эм.а из собственного метода?
devolonter
Class MyClass

Field someObject:Object


Method Destroy:Void()
someOBject = Null
End Method

End Class

myClass:MyClass = New MyClass()

myClass.Destroy()
myClass = Null


изнутри самого себя никак не удалить
[email protected]
вот, помню, сталкивался я с похожей проблемой на бмаксе..
devolonter
Там с перекрестными ссылками была проблема. когда один объект внутри другого ссылался на родительский объект
А так, объект сам себя удалить нигде не может. Но в других языках есть деструкторы, который автоматом вызываются при уничтожении объектов
[email protected]
но, дак они и в бмаксе есть
и тут по-моему тоже


devolonter
тут нет
только конструкторы, деструкторы только если сам напишешь. То что я показал выше







Цитата:

[email protected]
нашел способ, как убрать черную рамку
при использованиии текста
devolonter
удалил заливку в шрифте?
[email protected]
бленд поменял на адд, перед выводом текста - замечательно убирает черную рамку
devolonter
интересное решение)



Цитата:

[email protected]
привет! появился к тебе вопос по поводу акселерометра - на каждом устройстве по-своему муданные принимает?
делаю копию дуджджампа - на моемтелефоне Y координата ,на другом уже так не заработало
devolonter
привет! должно работать одинкаово на всех устройствах. Хотя возможно есть какие-то различия в G-датчиках. На каком телефоне некорректно работает?
сейчас глянул в исходный код под android все по доке. Поэтому, видимо отличия в реализации на самом устройстве. Такое бывает
я такое замечал на планшетах
есть у меня подозрение, что на планшете это X и Y координата не соответсвуют



Цитата:

[email protected]
как, кстати, по поводу прибыли? реально ли заработать?
devolonter
Все что зальешь на маркет, видно всем. В том числе в разделе "Приложения от этого разработчика" меня нет монетизируемых приложений пока. Но на след. год запланировано несколько. Заработать, как повезет. Некоторые зарабатывают, некоторые едва расходы окупают или вообще ничего не окупают...




Цитата:

[email protected]
еще вопрос - как в обезьяне заккоментить кусок кода сразу?
devolonter
#Rem
#End





Цитата:

[email protected]
как кодом завершить приложение?
devolonter
Error "" )
не спрашивай почему так)

Цитата:

[email protected]
привет. подскажи, пожалуйста, как загрузить другой шрифт ?
devolonter
Привет. стандартными средствами или другим модулем?
[email protected]
стандатрными
можно и другитм, но подключать не пробовал еще
devolonter
стандартными нужно сгенерировать новый шрифт спрайт листом
но стандартные средства разве только для отладки. Т.к. поддерживает только моноширные шрифты иначе смотриться убого
посмотри этот пример. Там используется библиотека AngelFont bananas\beaker\angelfont_example
для того, чтобы сгенерировать стандартный шрифт нужно тут Monkey\modules\mojo\ подредактировать makefont.bmx и сгенерировать другой






Цитата:

[email protected]
привет. слушай, где поменять настройки, чтобы не монки геймсбыло а свое? и все остальное?
devolonter
привет. в CONFIG.TXT есть опции http://blitz-wiki.appspot.com/App_config_settings
[email protected]
но в конечном итоге всегда можно поменять в итоговом апк?
а можно ли изменить там так, чтобы не быо снизу полоски-бара основного?
devolonter
нет, имя файла ничего не значит (это для android)
нужны ANDROID_APP_LABEL:String="Monkey Game"
ANDROID_APP_PACKAGE:String=com.monkey
[email protected]
ну в итоговом апк меняешь вот это в манифесте
devolonter
ну так тоже можно, ноэ то не свосем корректный путь
правильнее через конфиг
тем более package так просто не сменишь через манифест, а это именно самое важное с точки зрения имени приложения, т.к. оно должно быть уникальным
[email protected]
дак какой глравыный -то манифест? их там море
devolonter
testApp.build\android\templates\AndroidManifest.xm l вот этот не затирается




Цитата:

[email protected]
привет, а многомерные массивы есть в монки?
devolonter
есть. Хорошая статья на эту тему - http://monkeycoder.ru/blog/beginners/15.html





Цитата:

[email protected]
слушай, подскажи, как лучше быть с оптимизацией под разные экраны?
devolonter
привет. Используй виртуальное разрешение.

Тебе нужно определить константы ширины и высоты, потом в OnCreate определить коэффициент путем деления заданных пропорций на размеры экрана. После это в начале OnRender задаешь Scale(x, y), где x y это коэффициенты. Если используется мышь, то ее координаты тоже нужно умножать на эти коэффициенты
[email protected]
виртуальное разрешние- это то, под которое я разработаю игру?


devolonter
да
вот готовое решение - http://monkeycoder.co.nz/Community/posts.php?topic=1500



Цитата:

[email protected]
привет, а как генератор случайных чисел .. ну ты понял?)
Seed randomize)

devolonter
Привет. Seed = число
Seed = Millisecs() , например
[email protected]
отлитчно





Цитата:

[email protected]
привет! расскажи мне, можно ли на обензьяне сделать сетевую игру?
devolonter
привет. в данный момент нет ни одного сетевого модуля, поэтому только если самому писать
[email protected]
это и хотел узнать, печально.



Цитата:

Этой нужной функции нет в обезьяне, можно добавить самому :)

Function Rand( min_value,max_value=1 )
Local range=max_value-min_value
If range>0 Return Int( RndDouble()*(1+range) )+min_value
Return Int( RndDouble()*(1-range) )+max_value
End Function



Цитата:

devolonter
> и еще ньюанс - как-то можно заставить его вибрировать?
можно с помошью сторонних модулей. Например, diiddy. Ну или просто вставить самому нативное расширение
[email protected]
а поподробнее?
devolonter
вот пример для android - https://bitbucket.org/swoolcock/didd...ava?at=default смотри функции startVibrate и stopVibrate

и вот пример того как это интегрируется в Monkey https://bitbucket.org/swoolcock/didd...key?at=default



Цитата:

[email protected]
подскажи пожалуйста, как в обезьяне реализована работа с файлами? вот надо мне чтобы в тхт хранилась инфа, и надо грузить ее строками
так же как и в бмаксе? или нет?


devolonter
нет. Есть два вида стримов. Datastream - если данные изначально есть и из них нужно только читать. Работает на всех платформах. Filestream - работает везде кроме флеша и хтмл5 можно и читать и писать. Есть еще LoadString и SaveString.

Тебе подойдет LoadString(path)
Как загрузишь дели по ~n и читай из массива линий. Т.е. string.Split("~n")
[email protected]
угу, понял


Цитата:

[email protected]
привет. слушай. такая ситуация. в html5 версии работает все, в android нет. ругается на вроде загрузку из txt.
devolonter
хм... странно. Был там какой-то веселый баг со строками. Но вроде то касалось databuffer
важно. Под виндой регистр не важен, но на юникс ситемах это может сыграть злую шутку. Поэтому лучше все делать в нижнем рег
а если ; вместо новой строки? Хотя по сути без разницы должно быть
то что ты описываешь, очень похоже на тот баг. Надо посмотреть реализацию LoadString


devolonter
MonkeyGame.java

все в том же злополучном файле найди:

static byte[] loadBytes( String path ){
path="monkey/"+path;

try{
AssetFileDescriptor fd=getAssets().openFd( path );
int size=(int)fd.getLength();
fd.close();

byte[] bytes=new byte[size];
InputStream input=getAssets().open( path );
int n=input.read( bytes,0,size );
input.close();

if( n==size ) return bytes;

}catch( IOException e ){
}
return null;
}

его нужно этот кусок кода надо заменить на:

static byte[] loadBytes( String path ){
path="monkey/"+path;

try{
//Man, they sure don't make this easy for ya do they?!?
InputStream in=getAssets().open( path );

ByteArrayOutputStream out=new ByteArrayOutputStream(1024);
byte[] buf=new byte[4096];

for(;;){
int n=in.read( buf );
if( n<0 ) break;
out.write( buf,0,n );
}

in.close();

return out.toByteArray();

}catch( IOException e ){
}
return null;
}
и удалить папку build.


Цитата:

[email protected]
подскажи, какой ИМЕННО файл поменчять, чтобы изменить на альбомный вид, и чтобы раз и навегда?
devolonter
а можно один раз тут Monkey\targets\android\CONFIG.TXT



Цитата:

[email protected]
подскажи, пожалуйста - имеем инт, например, 120.
имеем картинки от 0 до 9.
ну ты понял) как лучше вывод реализовать?

перевести в стинг, посмореть, сколько символов
и каждый символ выводить отдельно, но в бмаксе можно было так: string("120")[0] - выводит еденичку
devolonter
Print String(120)[0 .. 1]
Print String(120).Length()

[email protected]
[0 .. 1] - подробнее
[email protected]
первый раз вижу такую комбинацию
devolonter
когда берешь по индексу он возвращает код, [0 .. 1] - это диапазон, в этом случае возвращает подстроку
диапазоны могут быть след [strat..], [start .. end] и [.. end]
можно еще так Print String.FromChar(String(120)[0])
[email protected]
отлично :)

Цитата:

[email protected]
привет, какие есть еще типы переменных вещественного типа?
float, какие еще?
devolonter
Bool, Int, Float, String, массивы. Но массивы передаются по ссылкам
Вариант не окончательный - думаю, буду дополнять и править, в случае ошибок.
На мой русский не смотрите.

devolonter 16.02.2013 00:01

Ответ: FAQ по Monkey
 
От себя хочу добавить, беседа велась по версии V64. В новых версиях некоторые моменты изменены, а баги пофикшены.

Если вы используете последнюю версию то:
- Баг с акселерометром, под Android был пофикшен. Теперь он везде работает одинаково
- Баг с чтением строк также был пофикшен. В новых версиях никаких файлов заменять не нужно
- CONFIG.TXT переименован в CONFIG.MONKEY. Также вы можете задавать конфигурацию приложения c помощью препроцессора. Добавляя к опции #. Например, #ANDROID_APP_LABEL = "Title"

RlexGm 07.03.2013 20:06

Ответ: Вопрос-Ответ (для начинающих)
 
Такой вопрос: как там у monkey с 3д графикой? Прошу прощения если этот вопрос уже был

devolonter 07.03.2013 20:19

Ответ: Вопрос-Ответ (для начинающих)
 
Есть официальный модуль OpenGL, есть более "дружелюбный" модуль от сообщества minib3d для Monkey. Правда не знаю работает ли он с демо-версией.

Но в целом, для 3d Monkey не лучший выбор, по крайней мере пока.

RlexGm 08.03.2013 01:22

Ответ: Вопрос-Ответ (для начинающих)
 
Спасибо
Цитата:

Сообщение от devolonter (Сообщение 254411)
Но в целом, для 3d Monkey не лучший выбор, по крайней мере пока.

а в чем это выражается? пока интересует 3d графика для android. Или будет намного лучше если прикрутить 3д двиг для android sdk? Просто хорошо знаком с b3d, bmax и x3d, поэтому думаю что изучить monkey будет гораздо проще.

moka 08.03.2013 02:11

Ответ: Вопрос-Ответ (для начинающих)
 
Цитата:

Сообщение от RlexGm (Сообщение 254434)
пока интересует 3d графика для android. Или будет намного лучше если прикрутить 3д двиг для android sdk? Просто хорошо знаком с b3d, bmax и x3d, поэтому думаю что изучить monkey будет гораздо проще.

Android - очень отличается от того с чем ты работал прежде.
Если хочешь заняться разработкой под Android то возьми сответствующий движёк. Или если хочешь реально скилл подтянуть, возьми лучше вообще чистый C++ + NDK и немного Java - и вперёд.

devolonter 08.03.2013 04:11

Ответ: Вопрос-Ответ (для начинающих)
 
Цитата:

Сообщение от RlexGm (Сообщение 254434)
а в чем это выражается?

minib3d сыроват. Он конечно активно развивается, но вероятность поймать багу по прежнему высока. Если использовать opengl, то возвращаемся к низкоуровневому API, для которого придется писать обертку. В этом плане лучше уже готовый движок брать, чем свой велосипед строить.

Цитата:

Сообщение от RlexGm (Сообщение 254434)
Просто хорошо знаком с b3d, bmax и x3d, поэтому думаю что изучить monkey будет гораздо проще.

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

Цитата:

Сообщение от MoKa (Сообщение 254438)
Android - очень отличается от того с чем ты работал прежде.
Если хочешь заняться разработкой под Android то возьми сответствующий движёк. Или если хочешь реально скилл подтянуть, возьми лучше вообще чистый C++ + NDK и немного Java - и вперёд.

Начинать знакомство с Android c C++ и NDK смерти подобно. Скилл вряд ли прокачаешь, а вот желание, скорее всего, напрочь отобьешь. Для начала хватит и Java + SDK

Nikich 20.05.2013 15:15

Ответ: Вопрос-Ответ (для начинающих)
 
Можно узнать подробнее о работе с файлами на таргете HTML5? Интересует и запись, и чтение.

devolonter 20.05.2013 16:50

Ответ: Вопрос-Ответ (для начинающих)
 
Цитата:

Сообщение от Nikich (Сообщение 259642)
Можно узнать подробнее о работе с файлами на таргете HTML5? Интересует и запись, и чтение.

Модули для работы с файловой системой brl.filestream и brl.filesystem в данный момент доступны только для Android, iOS, Win8, Glfw, Stdcpp.

Реализации HTML5 версии этих модулей мешает отсутствие поддержки File API в IE9 и отсутствие поддержки FileWriter API в большинстве браузеров.

Nikich 20.05.2013 17:33

Ответ: Вопрос-Ответ (для начинающих)
 
Хм, то есть никакого способа записывать информацию нету?

devolonter 20.05.2013 17:36

Ответ: Вопрос-Ответ (для начинающих)
 
Если это необходимо для сохранения/восстановления состояния игры, то есть специальные функции LoadState/SaveState

moka 20.05.2013 18:10

Ответ: Вопрос-Ответ (для начинающих)
 
Если это для хранения данных сохранения, то для HTML5 есть два способа.
Offlie Storage, либо отправлять данные на сервер и хранить на сейв-сервере.

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


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot