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

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

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

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

Ответ
 
Опции темы
Старый 01.01.2013, 18:15   #1
devolonter
Разработчик
 
Аватар для devolonter
 
Регистрация: 17.01.2007
Сообщений: 409
Написано 114 полезных сообщений
(для 281 пользователей)
Вопрос-Ответ (для начинающих)

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

В этой теме предлагаю задавать вопросы тем, кто начинает свое знакомство с Monkey или переходит на него с BlitzMax или Blitz3d. В последствии тему можно будет переформировать во что-то типа FAQ.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Randomize (04.01.2013)
Старый 10.01.2013, 18:29   #2
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Вопрос-Ответ (для начинающих)

1. Возможен ли нормальный дебаг? Точки останова, пошаговое исполнение и просмотр значений переменных? И на каких платформах это возможно.
2. Как читать бинарные файлы на таргетах ios и android (неплохо бы и html5)
3. Почему таргет HTML5 добавляет все ресурсные файлы в подпапку data, но при этом не учитывает это изменение пути при загрузке этих файлов? (файл для всех платформ лежит в корне, для html5 это уже data/file.ext)
__________________
(Offline)
 
Ответить с цитированием
Старый 10.01.2013, 19:05   #3
devolonter
Разработчик
 
Аватар для devolonter
 
Регистрация: 17.01.2007
Сообщений: 409
Написано 114 полезных сообщений
(для 281 пользователей)
Ответ: Вопрос-Ответ (для начинающих)

1. Возможен. На C++ платформах, например, GLFW. Работает также как и в BlitzMax через DebugLog и DebugStop.
2. С помощью модуля brl.databuffer, работает на всех платформах. Для того, чтобы файл считался бинарным его нужно добавить в #BINARY_FILES. По умолчанию бинарными файлами считаются все файлы с расширениями .bin и .dat
3. У всех платформ схожий принцип работы с ресурсами - все ресурсы помещаются в подпапку data (или подобную ей) и загружаются без указания этой папки. Можно пример, где это не работает?
(Offline)
 
Ответить с цитированием
Старый 15.02.2013, 23:19   #4
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
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, массивы. Но массивы передаются по ссылкам
Вариант не окончательный - думаю, буду дополнять и править, в случае ошибок.
На мой русский не смотрите.

Последний раз редактировалось Данил, 16.02.2013 в 03:17.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Данил за это полезное сообщение:
devolonter (15.02.2013), Randomize (22.05.2013)
Старый 16.02.2013, 00:01   #5
devolonter
Разработчик
 
Аватар для devolonter
 
Регистрация: 17.01.2007
Сообщений: 409
Написано 114 полезных сообщений
(для 281 пользователей)
Ответ: FAQ по Monkey

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

Если вы используете последнюю версию то:
- Баг с акселерометром, под Android был пофикшен. Теперь он везде работает одинаково
- Баг с чтением строк также был пофикшен. В новых версиях никаких файлов заменять не нужно
- CONFIG.TXT переименован в CONFIG.MONKEY. Также вы можете задавать конфигурацию приложения c помощью препроцессора. Добавляя к опции #. Например, #ANDROID_APP_LABEL = "Title"
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Данил (16.02.2013)
Старый 07.03.2013, 20:06   #6
RlexGm
ПроЭктировщик
 
Регистрация: 11.11.2009
Сообщений: 172
Написано 17 полезных сообщений
(для 34 пользователей)
Ответ: Вопрос-Ответ (для начинающих)

Такой вопрос: как там у monkey с 3д графикой? Прошу прощения если этот вопрос уже был
(Offline)
 
Ответить с цитированием
Старый 07.03.2013, 20:19   #7
devolonter
Разработчик
 
Аватар для devolonter
 
Регистрация: 17.01.2007
Сообщений: 409
Написано 114 полезных сообщений
(для 281 пользователей)
Ответ: Вопрос-Ответ (для начинающих)

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

Но в целом, для 3d Monkey не лучший выбор, по крайней мере пока.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
RlexGm (08.03.2013)
Старый 08.03.2013, 01:22   #8
RlexGm
ПроЭктировщик
 
Регистрация: 11.11.2009
Сообщений: 172
Написано 17 полезных сообщений
(для 34 пользователей)
Ответ: Вопрос-Ответ (для начинающих)

Спасибо
Сообщение от devolonter Посмотреть сообщение
Но в целом, для 3d Monkey не лучший выбор, по крайней мере пока.
а в чем это выражается? пока интересует 3d графика для android. Или будет намного лучше если прикрутить 3д двиг для android sdk? Просто хорошо знаком с b3d, bmax и x3d, поэтому думаю что изучить monkey будет гораздо проще.
(Offline)
 
Ответить с цитированием
Старый 08.03.2013, 02:11   #9
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Вопрос-Ответ (для начинающих)

Сообщение от RlexGm Посмотреть сообщение
пока интересует 3d графика для android. Или будет намного лучше если прикрутить 3д двиг для android sdk? Просто хорошо знаком с b3d, bmax и x3d, поэтому думаю что изучить monkey будет гораздо проще.
Android - очень отличается от того с чем ты работал прежде.
Если хочешь заняться разработкой под Android то возьми сответствующий движёк. Или если хочешь реально скилл подтянуть, возьми лучше вообще чистый C++ + NDK и немного Java - и вперёд.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
RlexGm (08.03.2013)
Старый 08.03.2013, 04:11   #10
devolonter
Разработчик
 
Аватар для devolonter
 
Регистрация: 17.01.2007
Сообщений: 409
Написано 114 полезных сообщений
(для 281 пользователей)
Ответ: Вопрос-Ответ (для начинающих)

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

Сообщение от RlexGm Посмотреть сообщение
Просто хорошо знаком с b3d, bmax и x3d, поэтому думаю что изучить monkey будет гораздо проще.
Если знаком с bmax, то переход на Monkey действительно будет простым, в плане языка. Но в плане функционала, Monkey поскромнее будет, поэтому первое время возможно будет непривычно.

Сообщение от MoKa Посмотреть сообщение
Android - очень отличается от того с чем ты работал прежде.
Если хочешь заняться разработкой под Android то возьми сответствующий движёк. Или если хочешь реально скилл подтянуть, возьми лучше вообще чистый C++ + NDK и немного Java - и вперёд.
Начинать знакомство с Android c C++ и NDK смерти подобно. Скилл вряд ли прокачаешь, а вот желание, скорее всего, напрочь отобьешь. Для начала хватит и Java + SDK
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо devolonter за это полезное сообщение:
moka (08.03.2013), RlexGm (08.03.2013)
Старый 20.05.2013, 15:15   #11
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Вопрос-Ответ (для начинающих)

Можно узнать подробнее о работе с файлами на таргете HTML5? Интересует и запись, и чтение.
(Offline)
 
Ответить с цитированием
Старый 20.05.2013, 16:50   #12
devolonter
Разработчик
 
Аватар для devolonter
 
Регистрация: 17.01.2007
Сообщений: 409
Написано 114 полезных сообщений
(для 281 пользователей)
Ответ: Вопрос-Ответ (для начинающих)

Сообщение от Nikich Посмотреть сообщение
Можно узнать подробнее о работе с файлами на таргете HTML5? Интересует и запись, и чтение.
Модули для работы с файловой системой brl.filestream и brl.filesystem в данный момент доступны только для Android, iOS, Win8, Glfw, Stdcpp.

Реализации HTML5 версии этих модулей мешает отсутствие поддержки File API в IE9 и отсутствие поддержки FileWriter API в большинстве браузеров.
(Offline)
 
Ответить с цитированием
Старый 20.05.2013, 17:33   #13
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Вопрос-Ответ (для начинающих)

Хм, то есть никакого способа записывать информацию нету?
(Offline)
 
Ответить с цитированием
Старый 20.05.2013, 17:36   #14
devolonter
Разработчик
 
Аватар для devolonter
 
Регистрация: 17.01.2007
Сообщений: 409
Написано 114 полезных сообщений
(для 281 пользователей)
Ответ: Вопрос-Ответ (для начинающих)

Если это необходимо для сохранения/восстановления состояния игры, то есть специальные функции LoadState/SaveState
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Nikich (20.05.2013)
Старый 20.05.2013, 18:10   #15
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Вопрос-Ответ (для начинающих)

Если это для хранения данных сохранения, то для HTML5 есть два способа.
Offlie Storage, либо отправлять данные на сервер и хранить на сейв-сервере.

Используйте HTML5 как полагается, т.к. там же куча крутых фичь есть, которые в нативном мире не доступны..
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Nikich (20.05.2013)
Ответ


Опции темы

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

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


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


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