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

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

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

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

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

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

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

1. Возможен ли нормальный дебаг? Точки останова, пошаговое исполнение и просмотр значений переменных? И на каких платформах это возможно.
2. Как читать бинарные файлы на таргетах ios и android (неплохо бы и html5)
3. Почему таргет HTML5 добавляет все ресурсные файлы в подпапку data, но при этом не учитывает это изменение пути при загрузке этих файлов? (файл для всех платформ лежит в корне, для html5 это уже data/file.ext)
__________________
(Offline)
 
Ответить с цитированием
Старый 10.01.2013, 15: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, 19:19   #4
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,693 пользователей)
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
468909567@qip.ru
сразу же бросилось в глаза - DrawText рисуется с черной рамкой о_О
devolonter
> сразу же бросилось в глаза - DrawText рисуется с черной рамкой о_О
там файл непрозрачный для шрифта
468909567@qip.ru
решение?
devolonter
вообще стандартный текстовый движок разве что для отладки
468909567@qip.ru
ок,понял. есть нестандартые?
devolonter
да
по шрифтам можешь посмотреть тут одно из решений - http://monkeycoder.ru/blog/beginners/60.html

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





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


также есть специальная функция DrawImage где сразу можно задать поворот: http://blitz-wiki.appspot.com/DrawImage
но по сути она делает тоже самое.
Monkey работает с матрицами трансформации. Они работают каждый на своем уровне. Поддерживается до 32-х уровней матриц
468909567@qip.ru
что такое матрица трансофрмаицйи?
как я понимаю, кусок данных, в котором храняться значения всех поворотом смещений для опреденного уровня?
т.е. уровень - несколько объектов например
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





468909567@qip.ru
как правильно удалить объект?
devolonter
обнулить все ссылки на него
468909567@qip.ru
эм.а из собственного метода?
devolonter
Class MyClass

Field someObject:Object


Method Destroy:Void()
someOBject = Null
End Method

End Class

myClass:MyClass = New MyClass()

myClass.Destroy()
myClass = Null


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


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







468909567@qip.ru
нашел способ, как убрать черную рамку
при использованиии текста
devolonter
удалил заливку в шрифте?
468909567@qip.ru
бленд поменял на адд, перед выводом текста - замечательно убирает черную рамку
devolonter
интересное решение)



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



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




468909567@qip.ru
еще вопрос - как в обезьяне заккоментить кусок кода сразу?
devolonter
#Rem
#End




468909567@qip.ru
как кодом завершить приложение?
devolonter
Error "" )
не спрашивай почему так)

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






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




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





468909567@qip.ru
слушай, подскажи, как лучше быть с оптимизацией под разные экраны?
devolonter
привет. Используй виртуальное разрешение.

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


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



468909567@qip.ru
привет, а как генератор случайных чисел .. ну ты понял?)
Seed randomize)

devolonter
Привет. Seed = число
Seed = Millisecs() , например
468909567@qip.ru
отлитчно





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



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

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. Ну или просто вставить самому нативное расширение
468909567@qip.ru
а поподробнее?
devolonter
вот пример для android - https://bitbucket.org/swoolcock/didd...ava?at=default смотри функции startVibrate и stopVibrate

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



468909567@qip.ru
подскажи пожалуйста, как в обезьяне реализована работа с файлами? вот надо мне чтобы в тхт хранилась инфа, и надо грузить ее строками
так же как и в бмаксе? или нет?


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

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


468909567@qip.ru
привет. слушай. такая ситуация. в 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.


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



468909567@qip.ru
подскажи, пожалуйста - имеем инт, например, 120.
имеем картинки от 0 до 9.
ну ты понял) как лучше вывод реализовать?

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

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

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

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

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

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

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

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

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

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

Сообщение от RlexGm Посмотреть сообщение
пока интересует 3d графика для android. Или будет намного лучше если прикрутить 3д двиг для android sdk? Просто хорошо знаком с b3d, bmax и x3d, поэтому думаю что изучить monkey будет гораздо проще.
Android - очень отличается от того с чем ты работал прежде.
Если хочешь заняться разработкой под Android то возьми сответствующий движёк. Или если хочешь реально скилл подтянуть, возьми лучше вообще чистый C++ + NDK и немного Java - и вперёд.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
RlexGm (08.03.2013)
Старый 08.03.2013, 00: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, 11:15   #11
Nikich
Бывалый
 
Регистрация: 21.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Вопрос-Ответ (для начинающих)

Можно узнать подробнее о работе с файлами на таргете HTML5? Интересует и запись, и чтение.
(Offline)
 
Ответить с цитированием
Старый 20.05.2013, 12: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, 13:33   #13
Nikich
Бывалый
 
Регистрация: 21.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Вопрос-Ответ (для начинающих)

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

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

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

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


Опции темы

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

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


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


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