Внедрение стартого меню
Мне необходимо, чтобы когда я запускал игру, загружалось меню, и только потом, после нажатия чего-нибудь, включалась игра...
Я нарыл только, что можно поставить после действий меню Flip, но походу это бред, не работает... Подскажите, как мне это осуществить самым-самым простым способом(чтобы просто разобраться, как это работает)...:dontknow: P.S. А возможно ли, например, запустить файл с меню, выбрать New Game: автоматически по прописанному адресу открывается файл с игрой, а файл с меню закроется?:dontknow: |
Ответ: Внедрение стартого меню
Создай переменную (к примеру GameStatus%) в которой будет будет два значения 1-меню, 2 -игра. И потом уже за счет этой переменной рисуй меню/игру. Сделай функцию допустим CreateGame () в которой будет создаваться вся игра и запускай ее если нажали "new game". Игру в цикле обновляй в условии If GameStatus = 2 then UpdateGame () и тд. :)
Кстати маленькая сложность будет если из игры можно будет возвращаться в то же меню. Надо будет заменить кнопку "new game" на "continued", еще раз не "создать" игру/сцену и тд. :) |
Ответ: Внедрение стартого меню
Спасибо, попробую разобраться :)
|
Ответ: Внедрение стартого меню
Вот ещё вопрос: если я жму паузу, все процессы останавливаются, а когда продолжаю, то переменные сохраняются, а объекты, получается, создаются заново, следовательно все собранные аптечки, патроны, убитые враги появляются заново, как этого избежать?
|
Ответ: Внедрение стартого меню
Цитата:
пример репеат если кейхит(2) тогда меню=1 апдатворлд рендер итд,, репеат тут кнопки апдатворлд рендер итд,, если кейхит(1) меню=0 унтил(меню=0) унтил(кейхит1) сори за русский но блитз открывать и искать команды уже лень а для своего меню я использывал команду типо case ну а там уже разные меню :ok: Select True Case game=1 Repeat If Buttons(3)=1 Then game=3 If Buttons(2)=1 Then exitprog=True UpdateWorld() RenderWorld() DrawImage menu_fonted,0,0 RefreshButton(kn3,552,472,"выход",2) RefreshButton(kn3,552,192,"загрузить",3) Flip Until game=3 Case game=2 update_mesh() Case game=3 game=3 Repeat If Buttons(2)=1 Then exitprog=True Buttons(2)=0 game=2 If Buttons(0)=1 Then game=2 Buttons(0)=0 UpdateWorld() RenderWorld() RefreshButton(kn2,552,184,"на карту",0) RefreshButton(kn2,552,224,"выход",2) Flip Until game=2 End Select это кусок кода моей игры и он находиться прямо в главном цикле |
Ответ: Внедрение стартого меню
tirarex, Несколько циклов - это извращение, вызванное скорее незнанием другого способа.
И кто тебя научил делать так: Код:
Select True Код:
Select game Код:
;главный цикл |
Ответ: Внедрение стартого меню
Спасибо, буду разбираться дальше :)
|
Ответ: Внедрение стартого меню
Вводим две переменных (допустим): текстовую/численную menu и флаг game. Текстовые переменные удобно использовать что бы не запутаться какой пункт меню за что отвечает.
Вот примерный код основного цикла с меню (как делаю я и мне это кажется вполне удобным и понятным): Код:
... При запуске приложения game = 0, т.е. игра не загружена. Мы попадаем в основное меню (menu = "main"). Полазили по основному меню, нажали на "Esc" - ничего не произошло, т.к. сейчас game = false. Захотелось поиграть - нажали клавишу "Enter". По условию попадаем в меню загрузки (menu = "load"). В этом меню пользователь ничего не делает, игра загружает все ресурсы. После того как загрузились все ресурсы ставим флаг game = true и переходим в игру. Поигрались, захотели в меню, жмём "Esc", переходим в menu = "main". Теперь если мы нажмём клавишу "Enter" - ничего не произойдёт, т.к. game = true и загружать нам ничего ненадо. Для возврата к игре жмём "Esc", при этом вернёмся в меню menu = "game". Захотели выгрузить ресурсы игры (допустим хотим начать заново), жмём "q". приложение переходит в menu = "unload", выгружает все нужные (точнее уже ненужные) нам ресурсы, ставит флаг game = false и возвращется в menu = "main". Теперь у нас заработает загрузка игры по нажатию клавиши "Enter" и не будет ничего происходить по нажатию клавиш "Esc" и "q", т.к. флаг game = false. Вот как то так. Грубый набросок, но основную мысль вроде бы донёс |
Ответ: Внедрение стартого меню
Вот когда то писал меню, можешь посмотреть как устроенно и написать свое :)
Menu |
Ответ: Внедрение стартого меню
Ещё небольшой вопрос: как мне добраться до имён дубликатов, чтобы правильно после паузы выгрузить обратно игру?
|
Ответ: Внедрение стартого меню
Что за дубликаты такие? Может экземпляры? И зачем вообще что-то выгружать? В момент паузы у тебя просто игровая логика не просчитывается и всё.
|
Извиняюсь, я дико ступил, теперь понял, что ты имел ввиду :)
P.S. блин, я только что заметил, что название темы написал с ошибкой :-D Не сочтите за назойливость: с паузой я всё понял, а вот со стартовым меню - нет: Blitz не хочет брать в условия Global-ы, как этого избежать? |
Ответ: Внедрение стартого меню
Цитата:
|
Ответ: Внедрение стартого меню
Может быть я не догоняю чего-нибудь, я думал, что нужно сделать условие для загрузки объектов, но для всех объектов добавил Global, чтобы они были функциям доступны...:dontknow:
|
Ответ: Внедрение стартого меню
Приведи пример неработающего условия, а то не понятно.
А вообще, объекты у тебя скорей всего будут в типах храниться, а значит им не нужно быть глобальными. Создавай их локально внутри функции загрузки уровня: Код:
function LoadLevel(level%) |
Ответ: Внедрение стартого меню
Видимо, не дано мне этого понять...:dontknow:
Избежать использования Global к моделям врагов получилось с помощью Local, а вот игрок и камера... if game=true global player=CreateSphere() ........ endif Я вот про это условие говорил...:dontknow: |
Ответ: Внедрение стартого меню
Цитата:
Код:
... Код:
... |
Ответ: Внедрение стартого меню
Спасибо, условие поставить получилось, но теперь Blitz не хочет загружать объекты, пишет Entity Does not exist, я сделал, вроде всё так...:dontknow:
Код:
Include "Constants.bb" |
Ответ: Внедрение стартого меню
в таких случаях надо выкладывать проект с файлами сюда, т.к. по одному коду трудно сказать на что конкретно блиц ругается. Твой проект никто в корыстных целях использовать явно не будет.
Вообще пишет что объект не найден, т.е. или файл не загрузился, или у тебя неправильно работает условие загрузки. На каком объекте ругается? Проверяй код, и правильно ли указаны пути в загрузках ентитей. |
Ответ: Внедрение стартого меню
Вложений: 1
Вот, загрузил...
Если загружать без условия, то всё нормально работает, при условии вылетает только на Update-ах, на простую загрузку объектов он не ругается...:dontknow: |
Ответ: Внедрение стартого меню
Не туда условия ставишь. Грузить надо всё это без условий, а уже в игровом цикле по условию делать то, что это условие предполагает.
|
Ответ: Внедрение стартого меню
Вложений: 1
Вот, чутка изменил твой код. Работает и правильно грузится. Вроде всё понятно, изменения увидишь сразу. От себя добавил только организацию меню. Опять таки грубый набросок, но работает как часы. Принцип понятен я думаю.
Вложение 16653 Внимательно читай что тут тебе написали выше, я реализовал именно это. |
Ответ: Внедрение стартого меню
Большое спасибо! Очень помогло! :)
P.S. только Blitz коллизии не считает при попадании пули во врага, с чем это может быть связано? |
Ответ: Внедрение стартого меню
Лучше пули не связывать с коллизией. А просчитывать ее как то математическим образом, по векторах чтоле.
Но если тебе хочется по проще, юзай команду LinePick. Или еще проще CameraPick - но этот оператор как я сам сегодня только убедился жрет ресурсов компа оч много. Поэтому я б вообще избегал ее применения. Ну разве что где производительность до одного места. |
Ответ: Внедрение стартого меню
Цитата:
|
Ответ: Внедрение стартого меню
В том-то и дело...:dontknow:
|
Ответ: Внедрение стартого меню
Я посмотрел код который дал тебе St_AnGer. Выяснил, что у тебя не задана константа TYPE_ENEMY, добавь её.
По коду ещё: типы коллизий меняться не должны, так что лучше сделать их константами, чтоб случайно не изменить по ходу игры. Const TYPE_ENEMY% = 8 и так далее для всех. Попробуй среду разработки IDEal - http://www.fungamesfactory.com/, в ней необъявленные переменные подсвечиваются красным, если сделаешь опечатку то сразу увидишь (правда из инклудов константы красными показаны, но это мелочь всё равно). Ещё в главном цикле проверка состояний через Select... Case со строковым значением, а сравнение строк медленнее чем чисел, хоть и удобнее читать, хотя при наличии констант читается тоже удобно: Код:
Const STATE_MENU_LOAD% = 1 |
Ответ: Внедрение стартого меню
Спасибо, работает :)
|
Ответ: Внедрение стартого меню
|
Ответ: Внедрение стартого меню
|
Ответ: Внедрение стартого меню
Вот ещё вопрос есть: когда мне нужно сделать паузу, я останавливаю обработку процессов, выключая Update-ы, а когда продолжаю игру, то все враги и аптечки по своему состоянию(убит-жив, собран-не собран) остаются прежними, а если я загружаю другое место игры, то как мне отследить состояния, чтобы выгрузить их в игру?
|
Ответ: Внедрение стартого меню
Ну, составь список, всего того, что должно учитываться при загрузки левела, из которого уходишь и сохрани в файл, например или в банк или в массив или в тип, потом загрузи когда возвращаться будешь, да это всё просто, сложно игру сделать!
|
Ответ: Внедрение стартого меню
Это-то понятно, я вот пример почитал, переменные сохранять могу:
http://forum.boolean.name/showthread.php?t=1014 Дело в другом: у меня тип с врагами, и нужно сохранить, каких именно я убил, а каких - нет :dontknow: |
Ответ: Внедрение стартого меню
Ну, записывай тех которых убил, в тёмную книгу сохранения:pure_magic: я не знаю как ещё объяснить вроде просто всё.
и пусть они больше не загружаются. И с объектами которые можно подобрать поступай тем же борзом. А вообще лучше не возвращаться обратно, а то возникает ощущение что где-то я уже это видел, но это ощущение не похоже на дежавю это скорее говорит о том что игрок ходит по кругу. Ааа, ну тех которых убил Delete из типа, а их имена записывай, метод вроде тот-же, только с другой стороны пусть функция проверяет перед стартом кто или что было удалено из файла или откуда там. При старте проверяй что-то вроде if not б\блабла="бот который" делете б, я не помню как там на блитзе. Ну да тут смотря чего больше мёртвых ботов или живых, это уже оптимизация, тут думай сам каких сохранять, но в любом случае, сохранять нужно, либо живых либо мёртвых в зависимости от дальнейший загрузки! |
Ответ: Внедрение стартого меню
Я предлагаю забыть о сохранении состояния уровня, хранить только номер уровня: если игрок не прошёл уровень, то ничего страшного, заново начнет.:)
А потом когда-нибудь доработаешь. |
Ответ: Внедрение стартого меню
Думаю, что это неплохая идея, учитывая, что это первый проект :)
|
Ответ: Внедрение стартого меню
Цитата:
|
Ответ: Внедрение стартого меню
Цитата:
Когда у него будут нужные умения, то сделает всё что захочет. Если игрок предрасположен к неадеквату, то он найдёт другую игру без сохранения и психанёт на ней. Короче, у такого почти нет выбора.:) |
Ответ: Внедрение стартого меню
Да, вот ещё заключительный вопрос: как мне лучше всего организовать игру:
1)Сделать меню и все уровни в одном файле, загружать всё только после нажатия "New Game", а потом описывать переход по уровням - громоздкий код 2)Загрузить вообще всё сразу, скрыть и потом показывать, когда и что нужно(также в одном файле) - скрывать слишком много, код чуть-чуть поменьше, мне кажется, будет, но, по-моему, всё равно неудобно 3)Загрузить вообще всё, создать отдельные файлы уровней с функциями уже загруженных объектов и подружать когда надо - ну тут вообще не понятно, как тогда удалять функцию CreateBlaBla() со всеми её объектами...способ получился бы хорошим, если уровни можно бы было подгружать как функции и впоследствии удалять их, чтобы не нагружать комп |
Ответ: Внедрение стартого меню
Я б посоветовал в начале запуска игры загрузить все что касается интерфейса меню. И по возможности загрузить то что будет общим во всех уровнях. Там например интерфейс геймплея, персонажа, может еще что то.
Далее я б написал функции что то вроде этих: LoadLevel(levelname$) - для загрузки необходимого уровня. ClearLevel() - При окончании уровня удаляет все данные уровня для того, что б не мешали при загрузке следующего уровня, другими словами уберем шлак. Возможно здесь тоже пригодится параметр levelname$- это уже зависит от тебя и игры. Initialize(levelname$) - Подготовка переменных (например координаты X,Y,Z игрока на каждом уровне). Настройки камер и прочего что в разных уровнях будет отличатся. А загадочный levelname$ - путь к файлу с описанием левела. Либо можно по другом: PHP код:
|
Ответ: Внедрение стартого меню
Лично я предлагаю тот вариант, который будет удобней для тебя. Если ты будешь потом выкладывать исходники куда-то, то лучше удобночитаемый, красивый код. Если же это проект чисто для себя, то можно писать костыль на костыле, если тебе так удобно. Все равно потом можно будет оптимизировать
|
Ответ: Внедрение стартого меню
Hulk-DS, объясни, пожалуйста, как мне сделать функцию ClearLevel(), если нужно удалить всех врагов, сделанных типом?
|
Ответ: Внедрение стартого меню
Мало написал. Я не знаю в чем заключается твое непонимание данной проблемы...
Просто очищаешь все что есть только в этом уровне (модели, рисунки текстуры, звуки и т.д.) Припустим есть у тебя пару типов: PHP код:
Пишем: PHP код:
ClearWorld [entities][,brushes][,textures] В этом заключалась проблема? |
Ответ: Внедрение стартого меню
Да, в этом, просто у меня постоянно вылезали ошибки, либо не работало вовсе, сейчас попробую код заново весь перестроить :)
|
Ответ: Внедрение стартого меню
Уже крен знает какой рас пощу эту ссылку. Связанные списки в Blitz3D
Если всю статейку освоишь, то со списками проблем появляться больше не должно. |
Ответ: Внедрение стартого меню
конструкция примерно такого типа :
Init_menu() Init_input() Load_menu () <--- (эта функа гоняется пока не сбудется запуск - тогда ретурн из нее) Init_World () все что хочешь загрузить repeat Init_input() ... траляля логика и прочая святотень.. .. until... |
Ответ: Внедрение стартого меню
Вложений: 2
Блин, до удаления Create-ов я так и не дошёл, возникла ещё проблема: я решил выстроить код по новой, сделал меню и загрузку уровня из него, но только когда я запускаю уровень, двигать игроком невозможно... С чем это может быть связано?
|
Ответ: Внедрение стартого меню
переписать все нафик :dontknow: !!!
|
Ответ: Внедрение стартого меню
Мне кажется, что здесь, не уместно столько раз
UpdateWorld(), RenderWorld(), Flip гонять, можно всё упростить, даже не использовать “кассы”. Вот как я вижу эту программу, пример: PHP код:
|
Ответ: Внедрение стартого меню
Ну, спасибо и на этом, буду ждать тех, кто помогал :)
|
Ответ: Внедрение стартого меню
Вложений: 1
Вот исправленный вариант, так как я это вижу,:P поправил ходьбу немного,:) отключил прыжок, там с коллизией что-то, не понял чё, давно с ней не работал.:crazy:
Ааааа:-D вон чё, коллизии нет потому что HideEntity player лан, исправил. |
Ответ: Внедрение стартого меню
Спасибо, сейчас попытаюсь понять, что там было не так :)
|
Часовой пояс GMT +4, время: 18:14. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot