forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=13)
-   -   Меню (http://forum.boolean.name/showthread.php?t=581)

Fant 02.05.2006 21:50

понял! Буду пробовать!) если что - напишу сюда)

Fant 07.05.2006 11:43

Код:

Function fnMenuGame()
Repeat
mhit1= MouseHit(1)
mhit2= MouseHit(2)
EnterKey = KeyHit(28)

Delay 2

Text 0,320,"Проверка"

Flip
Until enterkey

End Function

Воткнул это в код, но цикл игры как бы продолжается, то есть например если включить ИИ, нажать esc
Код:

        If KeyHit(1) fnMenuGame()
это у меня в цикле игры
ТО ии, почему-то продолжает деятельность, да и бомба взорвется, хотя визуально все "останавливается, конечно

impersonalis 07.05.2006 14:34

Вероятно все события у тебя происходят по времени - следовательно всё "просиженное" в меню время будет учтено и обработано сразу же после возврата в игру.

Fant 07.05.2006 14:51

да! Мне SBJoker предложил сделать так:

В цикле:

Код:

If KeyHit(1) Then
      fnMenuGame
      time#=MilliSecs()-period#
End If

и все остановилось)

tormoz 07.05.2006 17:57

при нажатии ескейп - ВЫХОДИ из цикла игры совсем !
а не пытайся внутри цикла меню запускать (это сделать можно - но тебе проще выйти)

Fant 07.05.2006 19:51

А как совмем выйти? Я же хочу потом еще продолжить игру...

Fant 07.05.2006 19:52

А как выйти совсем? Я же хочу еще и продолжить игру!
Это будет реально?

tormoz 07.05.2006 22:46

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

impersonalis 07.05.2006 22:50

2tormoz:
причём тут это?
Его решение - запоминать состояние времени для необходимых объектов и восстанавливать его при выходе из меню.

Fant 08.05.2006 02:12

Кстати насчет переменных это идея...может они понадобятся?
А то у меня ошибка:

Код:

Function fnMenuGame()
ButtonReturn_to_game=LoadImage ("graphics\Return_to_game.png")
        Repeat
        Cls
        mhit1= MouseHit(1)
        mhit2= MouseHit(2)
        EnterKey = KeyHit(28)

DrawImage ButtonReturn_to_game ,300,100


Delay 2

If KeyHit(1)=1
       
ClearWorld()
       
        Graphics 640,480,16,2
        SetBuffer BackBuffer()
        loadimages()
        fnmainmenu()
        End If

Flip
Until enterkey

End Function

Если из этого меню выйти в главное, а потом в игру, то дебаггер будет ругаться, что
DrawImage ButtonReturn_to_game ,300,100
Не сущесвует этого имеджа!

Хотя как видно из кода, я каждый раз при входе в функию, гружу этот имеждж...странно, да?
никто не знает, почему такой косяк? и как его исправить?

tormoz 08.05.2006 02:35

Графику инициализируй один раз !
До входа в меню:
.точка входа при смене разрешения
инит графика
. точка входа после основного цикла
лоад ресурсы меню
меню
освобождаем ресурсы меню

проверяем выход из меню:(переменную)
если игра - грузим ресурсы игры
если возврат в игру - не грузим
если выход из игры то ЕНД
если меняли разрешение в меню то ставим флаг(переменную) и гоу на начало

основной цикл
игра
выход из цикла

возврат в точку меню


=========
Для нормального завершения при повторной инициализации графики создай функцию очистки типов и переменных (которые нужно очистить)
Delete Each MyType - очищает весь тип MyType

Fant 08.05.2006 11:55

2Tormoz!

наверное ты не совсем разобрался с принципом работы:

1. Инициализирует графику 640 на 480 (работает главное меню)
2. Выбираем одни из 3х режимов, пишем их в файл.
* Если нажали начать новую игру:
1. Удалить все 2D картинки (проваерял лично! Утечек нет!)
2) ClearWorld
3)Инициализирует графику
4)Вызвать функцию, где все объекты игры грузятся (там у меня 3 функции)
5) если нажали esc - начать игровое меню (ну это вы знаете из приведенного здесь кода)
* если вышли совсем, то (2 раза esc)
ClearWorld()
Graphics 640,480,16,2
SetBuffer BackBuffer()
loadimages() - те, которые касаются главного меню
fnmainmenu() - само меню

Но почему-то после такого "полного" выхода, при входе в игру сразу же сробатывает fnMenuGame(), и ругается, что не может нарисовать этот долбанный имедж!!! Хотя по идеи он должен срабатывать по нажатии, esc, разумеется!

tormoz 08.05.2006 17:06

Делай как я написал - схема отлажена временем.

Fant 08.05.2006 21:22

Но я не совсем понял как по вашей схеме делать!?

Как я могу 1 раз инициализировать графику, если в меню она 640 на 480, а в игре - опционально!
?

pax 08.05.2006 21:56

Думаю для самой игры надо сделать новое упрощенное меню дабы не менять разрешение экрана во время игры.


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

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