forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Внедрение стартого меню (http://forum.boolean.name/showthread.php?t=16642)

Devilox 20.04.2012 15:52

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

Wegox 20.04.2012 16:19

Ответ: Внедрение стартого меню
 
Ну, составь список, всего того, что должно учитываться при загрузки левела, из которого уходишь и сохрани в файл, например или в банк или в массив или в тип, потом загрузи когда возвращаться будешь, да это всё просто, сложно игру сделать!

Devilox 20.04.2012 16:36

Ответ: Внедрение стартого меню
 
Это-то понятно, я вот пример почитал, переменные сохранять могу:
http://forum.boolean.name/showthread.php?t=1014
Дело в другом: у меня тип с врагами, и нужно сохранить, каких именно я убил, а каких - нет :dontknow:

Wegox 20.04.2012 16:47

Ответ: Внедрение стартого меню
 
Ну, записывай тех которых убил, в тёмную книгу сохранения:pure_magic: я не знаю как ещё объяснить вроде просто всё.
и пусть они больше не загружаются.
И с объектами которые можно подобрать поступай тем же борзом.
А вообще лучше не возвращаться обратно, а то возникает ощущение что где-то я уже это видел, но это ощущение не похоже на дежавю
это скорее говорит о том что игрок ходит по кругу.

Ааа, ну тех которых убил Delete из типа, а их имена записывай, метод вроде тот-же, только с другой стороны
пусть функция проверяет перед стартом кто или что было удалено из файла или откуда там.

При старте проверяй что-то вроде if not б\блабла="бот который" делете б, я не помню как там на блитзе.

Ну да тут смотря чего больше мёртвых ботов или живых, это уже оптимизация, тут думай сам каких сохранять, но в любом случае, сохранять нужно, либо живых либо мёртвых в зависимости от дальнейший загрузки!

Жека 20.04.2012 18:12

Ответ: Внедрение стартого меню
 
Я предлагаю забыть о сохранении состояния уровня, хранить только номер уровня: если игрок не прошёл уровень, то ничего страшного, заново начнет.:)
А потом когда-нибудь доработаешь.

Devilox 20.04.2012 19:41

Ответ: Внедрение стартого меню
 
Думаю, что это неплохая идея, учитывая, что это первый проект :)

reumep 23.04.2012 22:33

Ответ: Внедрение стартого меню
 
Цитата:

Сообщение от Жека (Сообщение 226007)
Я предлагаю забыть о сохранении состояния уровня, хранить только номер уровня: если игрок не прошёл уровень, то ничего страшного, заново начнет.:)
А потом когда-нибудь доработаешь.

ну да, проходит игрок суперсложный уровень, с десятой попытки получилось, почти добегает до ворот на следующий уровень... и тут злобный пьяный электрик дядя саша коротит ноль на фазу и выключается свет, а у него нет ИБП. Представь игрока в этой ситуации :-D, будет что-то наподобие этого http://www.youtube.com/watch?v=jQeC5yB8dE8

Жека 24.04.2012 05:30

Ответ: Внедрение стартого меню
 
Цитата:

Сообщение от reumep (Сообщение 226286)
ну да, проходит игрок суперсложный уровень, с десятой попытки получилось, почти добегает до ворот на следующий уровень... и тут злобный пьяный электрик дядя саша коротит ноль на фазу и выключается свет, а у него нет ИБП. Представь игрока в этой ситуации :-D, будет что-то наподобие этого http://www.youtube.com/watch?v=jQeC5yB8dE8

Я лишь подсказал Devilox-у оптимальный для него вариант, доступный ему уже сейчас, на мой взгляд.
Когда у него будут нужные умения, то сделает всё что захочет.
Если игрок предрасположен к неадеквату, то он найдёт другую игру без сохранения и психанёт на ней. Короче, у такого почти нет выбора.:)

Devilox 25.04.2012 17:39

Ответ: Внедрение стартого меню
 
Да, вот ещё заключительный вопрос: как мне лучше всего организовать игру:
1)Сделать меню и все уровни в одном файле, загружать всё только после нажатия "New Game", а потом описывать переход по уровням - громоздкий код
2)Загрузить вообще всё сразу, скрыть и потом показывать, когда и что нужно(также в одном файле) - скрывать слишком много, код чуть-чуть поменьше, мне кажется, будет, но, по-моему, всё равно неудобно
3)Загрузить вообще всё, создать отдельные файлы уровней с функциями уже загруженных объектов и подружать когда надо - ну тут вообще не понятно, как тогда удалять функцию CreateBlaBla() со всеми её объектами...способ получился бы хорошим, если уровни можно бы было подгружать как функции и впоследствии удалять их, чтобы не нагружать комп

Halk-DS 25.04.2012 18:57

Ответ: Внедрение стартого меню
 
Я б посоветовал в начале запуска игры загрузить все что касается интерфейса меню. И по возможности загрузить то что будет общим во всех уровнях. Там например интерфейс геймплея, персонажа, может еще что то.

Далее я б написал функции что то вроде этих:
LoadLevel(levelname$) - для загрузки необходимого уровня.
ClearLevel() - При окончании уровня удаляет все данные уровня для того, что б не мешали при загрузке следующего уровня, другими словами уберем шлак. Возможно здесь тоже пригодится параметр levelname$- это уже зависит от тебя и игры.
Initialize(levelname$) - Подготовка переменных (например координаты X,Y,Z игрока на каждом уровне). Настройки камер и прочего что в разных уровнях будет отличатся.

А загадочный levelname$ - путь к файлу с описанием левела. Либо можно по другом:
PHP код:

Function LoadLevel(levelname$)
Select levelname$
Case 
"Level 1"
;Описываем загрузку 1-го уровня.
Case 
"Level 2"
;Тут соответственно 2-го.
Case ...
;
и т.д.
Default
;
Выкидываем ошибкуибо уровня нет.
RuntimeError "Can`t find level: "+levelname$
End select
End 
Function 


reumep 25.04.2012 19:00

Ответ: Внедрение стартого меню
 
Лично я предлагаю тот вариант, который будет удобней для тебя. Если ты будешь потом выкладывать исходники куда-то, то лучше удобночитаемый, красивый код. Если же это проект чисто для себя, то можно писать костыль на костыле, если тебе так удобно. Все равно потом можно будет оптимизировать

Devilox 25.04.2012 22:27

Ответ: Внедрение стартого меню
 
Hulk-DS, объясни, пожалуйста, как мне сделать функцию ClearLevel(), если нужно удалить всех врагов, сделанных типом?

Halk-DS 26.04.2012 01:54

Ответ: Внедрение стартого меню
 
Мало написал. Я не знаю в чем заключается твое непонимание данной проблемы...
Просто очищаешь все что есть только в этом уровне (модели, рисунки текстуры, звуки и т.д.)
Припустим есть у тебя пару типов:
PHP код:

Type Enemy
Field Mesh
Field X
,Y,Z
End Type

Type Inventar
Field ItemImage
Field ItemId
End Type 

Ты в игре наделал кучу типов и теперь нужно вызвать ClearLevel()
Пишем:
PHP код:

Function ClearLevel()
     For 
all.Enemy=Each Enemy
          
;И такМы запустили циклкоторый переберет абсолютно все
          
;ячейки типа EnemyОбрати вниманиеслово "all" всево лишь
          
;указатель на этот типМожешь использовать любое другое слово.
          ;
Как видишь в списке у нас хранится модель по адресуall/mesh
          
;Перед тем как очиистить тип от адресов и переменных нам нужно
          
;Удалить саму модельа потом уже удалять к ней адрес.
          
FreeEntity all/mesh
          
;А теперь можем смело удалять весю ячейку типаПеременные
          
;Удалятся из памяти самиА делать надо так
          Delete all
          
;Цикл будет повторятся столько разсколько у тебя ячеек в списке
          
;И удалит абсолютно все ячейки списка.
     
Next

     
;Остался еще один список Inventarв котором для каждого Итема
     
;Хранится рисунокДелаем почти то же самое:

     For 
LyboeImya.Inventar=Each Inventar
          FreeImage LyboeImya
/ItemImage ;Вместо модели удаляем рисунки.
          
Delete LyboeImya
     Next
End 
Function 

Короче, все что не является переменными нужно удалить отдельно вызовом специального оператора. Ибо вызвав команду Delete - ты не удалишь все модели, ты удалишь только адреса на них. После чего удаление этих самых моделей станет возможным только вызовом:
ClearWorld [entities][,brushes][,textures]

В этом заключалась проблема?

Devilox 26.04.2012 15:12

Ответ: Внедрение стартого меню
 
Да, в этом, просто у меня постоянно вылезали ошибки, либо не работало вовсе, сейчас попробую код заново весь перестроить :)

Halk-DS 26.04.2012 15:25

Ответ: Внедрение стартого меню
 
Уже крен знает какой рас пощу эту ссылку. Связанные списки в Blitz3D
Если всю статейку освоишь, то со списками проблем появляться больше не должно.


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

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