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

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

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 13.04.2012, 20:29   #1
Devilox
ПроЭктировщик
 
Аватар для Devilox
 
Регистрация: 14.01.2012
Адрес: Зеленоград
Сообщений: 192
Написано 5 полезных сообщений
(для 9 пользователей)
Внедрение стартого меню

Мне необходимо, чтобы когда я запускал игру, загружалось меню, и только потом, после нажатия чего-нибудь, включалась игра...
Я нарыл только, что можно поставить после действий меню Flip, но походу это бред, не работает... Подскажите, как мне это осуществить самым-самым простым способом(чтобы просто разобраться, как это работает)...
P.S. А возможно ли, например, запустить файл с меню, выбрать New Game: автоматически по прописанному адресу открывается файл с игрой, а файл с меню закроется?
(Offline)
 
Ответить с цитированием
Старый 13.04.2012, 20:39   #2
Nex
Гигант индустрии
 
Аватар для Nex
 
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений
(для 3,298 пользователей)
Ответ: Внедрение стартого меню

Создай переменную (к примеру GameStatus%) в которой будет будет два значения 1-меню, 2 -игра. И потом уже за счет этой переменной рисуй меню/игру. Сделай функцию допустим CreateGame () в которой будет создаваться вся игра и запускай ее если нажали "new game". Игру в цикле обновляй в условии If GameStatus = 2 then UpdateGame () и тд.

Кстати маленькая сложность будет если из игры можно будет возвращаться в то же меню. Надо будет заменить кнопку "new game" на "continued", еще раз не "создать" игру/сцену и тд.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Devilox (13.04.2012)
Старый 13.04.2012, 20:49   #3
Devilox
ПроЭктировщик
 
Аватар для Devilox
 
Регистрация: 14.01.2012
Адрес: Зеленоград
Сообщений: 192
Написано 5 полезных сообщений
(для 9 пользователей)
Ответ: Внедрение стартого меню

Спасибо, попробую разобраться
(Offline)
 
Ответить с цитированием
Старый 13.04.2012, 22:00   #4
Devilox
ПроЭктировщик
 
Аватар для Devilox
 
Регистрация: 14.01.2012
Адрес: Зеленоград
Сообщений: 192
Написано 5 полезных сообщений
(для 9 пользователей)
Ответ: Внедрение стартого меню

Вот ещё вопрос: если я жму паузу, все процессы останавливаются, а когда продолжаю, то переменные сохраняются, а объекты, получается, создаются заново, следовательно все собранные аптечки, патроны, убитые враги появляются заново, как этого избежать?
(Offline)
 
Ответить с цитированием
Старый 13.04.2012, 22:53   #5
tirarex
Бывалый
 
Аватар для tirarex
 
Регистрация: 23.11.2011
Сообщений: 863
Написано 334 полезных сообщений
(для 866 пользователей)
Ответ: Внедрение стартого меню

Сообщение от Devilox Посмотреть сообщение
Вот ещё вопрос: если я жму паузу, все процессы останавливаются, а когда продолжаю, то переменные сохраняются, а объекты, получается, создаются заново, следовательно все собранные аптечки, патроны, убитые враги появляются заново, как этого избежать?
использывать два цикла
пример

репеат

если кейхит(2) тогда меню=1

апдатворлд
рендер итд,,


репеат
тут кнопки
апдатворлд
рендер итд,,
если кейхит(1) меню=0
унтил(меню=0)

унтил(кейхит1)

сори за русский но блитз открывать и искать команды уже лень
а для своего меню я использывал команду типо case
ну а там уже разные меню

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

это кусок кода моей игры и он находиться прямо в главном цикле
(Offline)
 
Ответить с цитированием
Старый 14.04.2012, 08:34   #6
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: Внедрение стартого меню

tirarex, Несколько циклов - это извращение, вызванное скорее незнанием другого способа.
И кто тебя научил делать так:
Select True 
 Case game=1
Селект подразумевает делать вот так:
Select game
 Case 1
А вот как избавиться от множества циклов, оставив один главный:
;главный цикл
While(running = True)
	GameInputProcess() ;тут опрос кнопок и мыши
	GameUpdate() ;тут обновление игровой логики
	UpdateWorld() ;блитцевская функция
	RenderWorld() ;блитцевская функция
	GameDraw() ;тут рисуем 2д
	Flip() ;блитцевская функция
Wend

;
Function GameUpdate()
	If(gameState = STATE_GAME)
		;обновление игрока, противников, игрового поля и прочего
	Else If(gameState = STATE_MENU_MAIN)
		;анимация выделенного пункта меню, например
	;Else ....
		
	EndIf
End Function
Аналогично для функции GameDraw() - если состояние игры, то рисуем шкалу жизней и прочее, если меню, то само меню и т.д.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Жека за это полезное сообщение:
burovalex (19.04.2012), Devilox (14.04.2012)
Старый 14.04.2012, 09:38   #7
Devilox
ПроЭктировщик
 
Аватар для Devilox
 
Регистрация: 14.01.2012
Адрес: Зеленоград
Сообщений: 192
Написано 5 полезных сообщений
(для 9 пользователей)
Ответ: Внедрение стартого меню

Спасибо, буду разбираться дальше
(Offline)
 
Ответить с цитированием
Старый 14.04.2012, 09:56   #8
St_AnGer
Элита
 
Аватар для St_AnGer
 
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,067
Написано 1,185 полезных сообщений
(для 2,828 пользователей)
Ответ: Внедрение стартого меню

Вводим две переменных (допустим): текстовую/численную menu и флаг game. Текстовые переменные удобно использовать что бы не запутаться какой пункт меню за что отвечает.
Вот примерный код основного цикла с меню (как делаю я и мне это кажется вполне удобным и понятным):

...
menu$ = "main;
game% = false;

while (условие выхода из основного цикла)

     select menu$

          case "main":
              ; Рисуем и делаем то что нужно в основном меню.
              ; Допустим по клавише "Enter" мы загружаем игру, 
              ; по клавише "Esc" мы выходим из игрового меню, 
              ; а по клавише "q" выгружаем ресурсы игры из памяти.
              if (keyhit(28)) then     ;нажатие "Enter"

                    if (game = false) then
                         menu = "load";
                    end if

              else if (keyhit(1)) then     ;нажатие "Esc"

                    if (game = true) then
                         menu = "game";
                    end if

              else if (keyhit(16)) then     ;нажатие "q"

                    if (game = true) then
                         menu = "unload";
                    end if

              end if

          case "load":
              ; загружаем ресурсы
               game = true;
               menu = "game"

          case "game":
               ; выполняем все нужные действия игры
               if (keyhit(1)) then
                    menu = "main";
               end if

          case "unload":
               ; выгружаем ресурсы игры
               game = 0;
               menu = "main";

     end select

wend

...
Как это работает.

При запуске приложения 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.

Вот как то так. Грубый набросок, но основную мысль вроде бы донёс
__________________
Main PC:
Intel Core i5 4260U 1.44 GHz + LPDDR3 1x4096 1600 MHz + Intel HD Graphics 5000.

Asus Ёжик T101-MT:
Intel Atom N-570 1.66 Ghz + DDR2 2x1024 800 Mhz + Intel GMA 3150 128 Mb DDR2


Скачать Doom 2D: Remake v0.3.8a
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Devilox (14.04.2012)
Старый 14.04.2012, 10:11   #9
L-ee-X
Разработчик
 
Аватар для L-ee-X
 
Регистрация: 06.06.2011
Адрес: Ирк. обл.
Сообщений: 541
Написано 133 полезных сообщений
(для 220 пользователей)
Ответ: Внедрение стартого меню

Вот когда то писал меню, можешь посмотреть как устроенно и написать свое
Menu
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Devilox (14.04.2012)
Старый 14.04.2012, 18:58   #10
Devilox
ПроЭктировщик
 
Аватар для Devilox
 
Регистрация: 14.01.2012
Адрес: Зеленоград
Сообщений: 192
Написано 5 полезных сообщений
(для 9 пользователей)
Ответ: Внедрение стартого меню

Ещё небольшой вопрос: как мне добраться до имён дубликатов, чтобы правильно после паузы выгрузить обратно игру?
(Offline)
 
Ответить с цитированием
Старый 15.04.2012, 08:57   #11
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: Внедрение стартого меню

Что за дубликаты такие? Может экземпляры? И зачем вообще что-то выгружать? В момент паузы у тебя просто игровая логика не просчитывается и всё.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
L-ee-X (15.04.2012)
Старый 15.04.2012, 16:21   #12
Devilox
ПроЭктировщик
 
Аватар для Devilox
 
Регистрация: 14.01.2012
Адрес: Зеленоград
Сообщений: 192
Написано 5 полезных сообщений
(для 9 пользователей)
Извиняюсь, я дико ступил, теперь понял, что ты имел ввиду
P.S. блин, я только что заметил, что название темы написал с ошибкой

Не сочтите за назойливость: с паузой я всё понял, а вот со стартовым меню - нет: Blitz не хочет брать в условия Global-ы, как этого избежать?

Последний раз редактировалось SBJoker, 15.04.2012 в 22:51.
(Offline)
 
Ответить с цитированием
Старый 15.04.2012, 22:25   #13
Nex
Гигант индустрии
 
Аватар для Nex
 
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений
(для 3,298 пользователей)
Ответ: Внедрение стартого меню

Blitz не хочет брать в условия Global-ы
зачем?! оО
(Offline)
 
Ответить с цитированием
Старый 15.04.2012, 22:29   #14
Devilox
ПроЭктировщик
 
Аватар для Devilox
 
Регистрация: 14.01.2012
Адрес: Зеленоград
Сообщений: 192
Написано 5 полезных сообщений
(для 9 пользователей)
Ответ: Внедрение стартого меню

Может быть я не догоняю чего-нибудь, я думал, что нужно сделать условие для загрузки объектов, но для всех объектов добавил Global, чтобы они были функциям доступны...
(Offline)
 
Ответить с цитированием
Старый 16.04.2012, 07:23   #15
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: Внедрение стартого меню

Приведи пример неработающего условия, а то не понятно.
А вообще, объекты у тебя скорей всего будут в типах храниться, а значит им не нужно быть глобальными. Создавай их локально внутри функции загрузки уровня:
function LoadLevel(level%)
Local obj.ObjType
file = openfile(levelsPath + level)
while not eof(file)
obj = new ObjType
;тут считываем инфу об объекте и назначаем её в obj
wend
closefile(file)
endfunction
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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