| Разработка и ромхакинг > Разработка игр |
| Game Maker обсуждение и хелп |
| << < (20/22) > >> |
| MASTERMAX:
--- Цитата ---нет добавления файлов в ексешник. --- Конец цитаты --- это? за ресы и остальное хз. для меня гм 8.0 самое оно |
| alienlair:
--- Цитата: Segaman от 01 Август 2012, 13:09:55 ---чтото новые гамаки много хорошего теряют. --- Конец цитаты --- Кстати интересная вещь получается. Ранние версии Studio с неурезанными функциями вполне себе спокойно крмпилировали и запускали игры на Андроиде (Правда чтобы apk получить, необходимо было несколько ритальных танцев совершить, так как оффициально на то время компиляция под Андроид не поддерживалась) Теперь же когда заветная кнопочка Собрать проект, наконец, стала активна разработчики вырезали туеву хучу полезных функций, объявив, что на платформах отличных от Windows они работать не будут. Но в ранних релизах-то работало. Непонятка какая-то. |
| Zeriod:
Нужна помощь. Помните, в 2D играх серии Legend of Zelda когда персонаж подходит к краю экрана, вид плавно смещается на один экран в ту сторону, куда идёт персонаж. Пока вид двигается, персонаж двигаться не может. Как это реализовать, подскажите решение. Не могу придумать, как двигать вид плавно и запретить персонажу двигаться, когда двигается вид. |
| 2nd Channel:
Zeriod, предложу решение очень пространное, идею. Тебе нужно будет её реализовать. 1. Во-первых, надо сделать объект, за которым следит вид (назовём его объектом камеры, камерой) (его координаты, к примеру, могут зависеть от координат игрока). 2. Когда нужен будет сдвиг экрана, сделай так, чтобы объект сам автоматически двигался на определённое расстояние с пределённой скоростью. Т.е., в этот момент его координаты не зависят от координат игрока. 3. Проблему с обездвиживанием игрока можно решить по разному. Самый распространнёный - отнять управление, когда координаты камеры не зависят от координат игрока (а они не зависят как раз тогда, когда камера двигается на определённое расстояние, которое тебе нужно). Но я не люблю этот способ. Как вариант, предлагаю деактивировать функцией --- Код: ---instance_deactivate_object(obj_player) --- Конец кода --- obj_player - твой игрок Но перед этим запомнить координаты игрока (их можно взять из объекта камеры, она ведь от игрока зависит), нарисовать в дополнительном объекте, а может даже и в самой камере (событие Draw) спрайт игрока в тех координатах, где находился игрок перед деактивацией. И всё. Получится, что игрок не может двигаться (хотя на самом деле его просто не будет существовать на этот момент в комнате и следовательно, ты его не сможешь двигать). А потом, когда надо, вновь активировать игрока. Проблема здесь заключается в том, что игра выдаст ошибку, если какие-то параметры (например, координаты врага) зависят от объекта игрока. Но она легко решается, если везде код, где есть зависимость чего-либо от объекта игрока взять в такие скобки: --- Код: ---if instance_exists(obj_player) { .... КОД ТОГО, ЧТО ЗАВИСИТ ОТ ОБЪЕКТА ИГРОКА ..... } --- Конец кода --- Надеюсь, понятно выразился. |
| Zeriod:
Спасибо, интересное решение :-) |
| alienlair:
Zeriod, На форуме YoYo смотрел? Там решение предлагают довольно неплохое. Смотри пример во вложении |
| Kostey D.:
GameMaker Studio теперь в стиме. С ачивками :) http://store.steampowered.com/app/214850 |
| Ti_:
Есть вопрос, допустим при создании объектов я хочу в них прописывать свои данные , есть у них память? Далее есть в самом ГМ память какая-то или как её создать. Третье допустим мне надо поочередно считать все объекты (то есть разных типов, а не все объекты одного типа) в заданной плоскости x-y. (то есть считывать их X и Y) - и куда-то это записать, а далее отсортировать по X. (ну или сразу в таком порядке если возможно) |
| 2nd Channel:
--- Цитата: Ti_ от 17 Январь 2013, 00:21:45 ---Есть вопрос, допустим при создании объектов я хочу в них прописывать свои данные , есть у них память? Далее есть в самом ГМ память какая-то или как её создать. --- Конец цитаты --- Если я верно понял тебя, ты имеешь ввиду под данными и памятью переменные. Если так, то можно. Они бывают локальными и глобальными. Локальные - они у каждого объекта свои. Их нужно написать (объявить) в событии создания (Create). Например: --- Код: ---ninpo=10 --- Конец кода --- Они прежде всего значимы для этого объекта. Но к ним можно обращаться и из других объектов. Для этого к названию переменной просто надо приписать название объекта, в котором эта переменная объявлена и поставить после имени объекта точку. Пример: --- Код: ---object1.ninpo=10 --- Конец кода --- . Локальные переменные существуют то тех пор пока не будет уничтожен объект, в котором они объявлены. Кроме локальных есть глобальные переменные. Их отличие в том, что они будут существовать постоянно, даже после уничтожения объкта, в котором они были объявлены. Для этого их, как и локальные, также надо объявить в событии создания какого-нибудь объекта, приписав им приставку global.: --- Код: ---global.ninpo=10 --- Конец кода --- К ним можно обратиться из любого объекта. Причём писать перед ними название объекта, в котором они были объявлены не надо. Надо просто всегда писать global. и эту переменную. В данном случае global.ninpo ____________________________________________________________________________________________________________ Третий вопрос, вроде понятен, но надо думать. И прежде, надо хорошо усвоить первые 2 вопроса. Потому что третий связан с ними. |
| Ti_:
--- Цитата: 2nd Channel от 17 Январь 2013, 01:40:46 --- --- Код: ---ninpo=10 --- Конец кода --- Они прежде всего значимы для этого объекта. Но к ним можно обращаться и из других объектов. Для этого к названию переменной просто надо приписать название объекта, в котором эта переменная объявлена и поставить после имени объекта точку. Пример: --- Код: ---object1.ninpo=10 --- Конец кода --- . Локальные переменные существуют то тех пор пока не будет уничтожен объект, в котором они объявлены. --- Конец цитаты --- Может подойдет. Тогда по порядку при переборе объектов как её считывать? Добавлено позже: --- Цитата: 2nd Channel от 17 Январь 2013, 01:40:46 ---Если я верно понял тебя, ты имеешь ввиду под данными и памятью переменные. --- Конец цитаты --- Ну например, память чтобы туда файл загрузить. Или просто какая-то память куда записывать данные, глобальная, но не переменные, а просто блок памяти. Я там не понял, может через массивы надо какой-то блок создать на N килобайт, но там запутанно как-то всё, поэтому не разбирался. ==================================================================== Добавлено позже: Вообщем сделал объект только одного типа 'Game object', а в нём переменную objType. Теперь надо считать все объекты этого типа, то есть получить их X,Y и objType. При этом куда-то записывая в память. Можно и без записи, тогда нужно чтобы сразу было в порядке: вначале объекты лежащие по Y от 0 до 255, потом от 256 до 511 и т.д., и при этом первым чтобы считался тот который левее по X. Ну или если так невозможно, тогда в какую-то память. Чтобы при это можно было отсортировать по X, либо сразу так записывать чтобы потом не 'сортировать'. Добавлено позже: --- Цитата: Ti_ от 17 Январь 2013, 11:40:47 ---Теперь надо считать все объекты этого типа, то есть получить их X,Y и objType. --- Конец цитаты --- С этим разобрался, остается только сделать чтобы в нужном порядке эти данные были, как сортировку делать идей нету.. на Sega бы сделал :skull: |
| MASTERMAX:
Ti_, тебе просто надо данные отсортировать или как? --- Цитата ---Теперь надо считать все объекты этого типа, то есть получить их X,Y и objType. С этим разобрался --- Конец цитаты --- а куда и как ты считываешь эти данные? |
| Ti_:
--- Цитата: MASTERMAX от 18 Январь 2013, 01:52:45 ---Ti_, тебе просто надо данные отсортировать или как? а куда и как ты считываешь эти данные? --- Конец цитаты --- тут выложил дт2 эдит + проект файл *гм8 Объекты я считываю из файла, первый байт x,второй y, третий тип. Как видно X расположено в порядке возрастания: --- Код: --- .BYTE $20, 0, $A0 .BYTE $20, 0, $9B .BYTE $29, $AF, $66 .BYTE $29, $BF, $67 .BYTE $37, $BF, $33 .BYTE $54, $57, $23 .BYTE $60, 0, $9B .BYTE $69, $7F, $67 .BYTE $6B, $7F, $68 .BYTE $7B, $47, $33 --- Конец кода --- Далее когда мне их надо сохранить обратно, но порядок уже получится не тот(после новой расстановки), т.к. перебор идет по индексу объекта, а не по его X. Так что потом придется переставлять, поэтому хотелось бы предварительно записывать куда-то в память. Чтобы потом из памяти считывать в нужном порядке. Можно конечно файл как память использовать. А в гм только нашел что 'массив' можно создать..значит или его. Ну массив это же просто таблица?... там написано лимит 32000 индекса. ну так можно сделать 32тыс. позиций по 1байт = 32кб, но не маразм ли индексировать каждый байт. На крайняк можно и без памяти переставить используя 6 переменных, но тут запутаться легко. ^_^ |
| MASTERMAX:
ну как вариант - массив... но работать с таким кол-вом данными не ахти я думаю. как вариант можно запустить 2 цикла по размеру карты деленной на размер спрайта объекта, и проверять каждую позицию на наличие данного объекта, дальше просто брать его х,у, и ObjType. Вся проблема только в том, как я вижу, там размеры спрайтов объектов разные, из-за этого этот способ может не подойти, хотя если всем сделать одинаковый размер или одинаковый хит бокс для проверки... то может что-то и получится. Можно еще глянуть в сторону списков(ds_list), вместо массивов... Хотя суть сортировки останется почти та же... |
| Ti_:
Пока сделал вначале просто как запись 'как есть' в 6 массивов (так как там на каждый этаж отдельно). Далее из них уже в ром. Хотя стоило перебрать 6 раз все объекты и сразу записывать в ром, просто отсекая лишние. Ну не важно, а сортировку уже после хотел сделать, просто считывая парами по 3 байта и меняя местами, пока всё не переставится... Проблема в том что в game-maker брейкпоинты вроде бы нельзя поставить, или я не знаю как. Из-за этого неясно на какой строчке код не работает. В том же visual studio вроде бы достаточно правой кнопкой нажать. Добавлено позже: --- Цитата: MASTERMAX от 18 Январь 2013, 17:30:52 ---ну как вариант - массив... но работать с таким кол-вом данными не ахти я думаю. --- Конец цитаты --- Данных там немного, но вот допустим... как предполагается файл открывать в game maker? даже из файла сделали только bin_read_byte; bin_read_word почему-то не захотели. Если бы обычная память было бы проще - открыли файл скопировали в память. И туда уже и добавлять bin_read_byte(memory_name). |
| MASTERMAX:
--- Цитата ---Проблема в том что в game-maker брейкпоинты вроде бы нельзя поставить, или я не знаю как. --- Конец цитаты --- не, нельзя вроде. хоть там и есть какой-то отладчик :) --- Цитата ---Данных там немного, но вот допустим... как предполагается файл открывать в game maker? даже из файла сделали только bin_read_byte; bin_read_word почему-то не захотели. --- Конец цитаты --- можно поискать dll или gex для работы с бинарными файлами, как например - http://gmc.yoyogames.com/index.php?showtopic=359853 --- Цитата ---Если бы обычная память было бы проще - открыли файл скопировали в память. И туда уже и добавлять bin_read_byte(memory_name). --- Конец цитаты --- ну а переменная чем не память? или я что-то не так понял ) Добавлено позже: или вот gex - http://gmc.yoyogames.com/index.php?showtopic=567528 --- Цитата ---FS_file_bin_read/write_word() Read or writes a short (2 bytes) of data at once. So a value between 0 and 65,535. FS_file_bin_read/write_dword() Read or writes a long (4 bytes) of data at once. So a value between 0 and 4,294,967,295. --- Конец цитаты --- |
| Ti_:
--- Цитата: MASTERMAX от 18 Январь 2013, 19:49:03 ---ну а переменная чем не память? или я что-то не так понял ) --- Конец цитаты --- А что можно содержимое файла в одну переменную скопировать? Я всегда представлял, что переменная просто число. Память в моем понимания это допустим, просто 100 кб памяти, назовем её RAM. И обращаться к ней также как в файлу, хотя лучше бы по оффсету, там хотя бы авто-увеличение сделали при чтении/записи Добавлено позже: --- Цитата: MASTERMAX от 18 Январь 2013, 19:49:03 ---или вот gex --- Конец цитаты --- Да не, уже не надо, обошелся 'без'. |
| MASTERMAX:
--- Цитата ---А что можно содержимое файла в одну переменную скопировать? Я всегда представлял, что переменная просто число. Память в моем понимания это допустим, просто 100 кб памяти, назовем её RAM --- Конец цитаты --- ну переменная то в памяти хранится ^_^ конечно файл в одну переменную не влезет это понятно, но если заделать массив или еще лучше структуру(что бы можно было туда подобие оффсетов прилепить) то может что-то дельное и получится :) взять вот к примеру ds_map: у него есть ds_map_add(id,key,val) где key можно использовать как оффсет, а val как значение которое в нем находится, вот как то так :) |
| Ti_:
Я снимаю опцию 'Let <Esc> end the game' - после этого невозможно закрыть окно с крестика или ALT+F4. Но мне не нужно чтобы ESC завершало игру. |
| 2nd Channel:
--- Цитата: Ti_ от 23 Май 2013, 10:49:16 ---Я снимаю опцию 'Let <Esc> end the game' - после этого невозможно закрыть окно с крестика или ALT+F4. Но мне не нужно чтобы ESC завершало игру. --- Конец цитаты --- Для этого в любом объекте, который должен присутствовать всю игру (либо в нескольких объектах, которые по сововкупности присутствуют всю игру) создай событие Close Button и помести в него триггер Game End/пропиши код --- Код: ---game_end() --- Конец кода --- |
| MASTERMAX:
или как то так |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |