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 09.05.2006 10:32

To Imper (можно тебя так называть?) :rolleyes:

Exit - супер) но к сожалению он никак не действует...вообще :blink: я сам выпал...

2Tormoz
Код:

Function fnMenuGame()

While Not menu_stat<>0
        Cls
        mhit1= MouseHit(1)
        mhit2= MouseHit(2)
        EnterKey = KeyHit(28)

If gamestate$="mainmenu"
        fnmainmenu()
EndIf


If KeyHit(1) Then menu_stat=1


Flip
Wend

Select menu_stat

Case 1

ClearWorld()
        Graphics 640,480,16,2
        SetBuffer BackBuffer()
        loadimages()
        gamestate$="mainmenu"
End Select
End Function

При нажатии esc (в этой функции) ругается на updateworld в главном цикле, а так как у меня было раньше до этого select case не ругалось...странно

Зато в моем коде, блин, при нажатии "новая игра" все начиналось с черного экрана...и я не знал как заверщить функцию. (см. пост выше)

Короче хрен редьки не слаще...что так не пашет, что так :bad:

И еще...tormoz...я не проитв твоего кода! Ты мне 100 раз писал, что бы я юзал его! Да я не против, просто я не понял как! А так я бы с радостью! Поэтому думаю, что ты зря писал, что я его "не юзаю" ... я же не баран) Зачем мне делать по-своему неправильно, если ты советуешь правильно) вывод тока 1...я просто не смог реализовать твою...идею!...

tormoz 09.05.2006 16:03

Еще раз: графику задавай заново ТОЛЬКО если в меню менялись настройки разрешения.
И просто очищай весь мир тогда и гото на начало (там где графа инициализируется)

А почему у тебя вылетает на updateworld, да еще и в главном цикле - можно только гадать. Ищи.

jimon 09.05.2006 16:38

давноооо суда не заходил
тут уже гон пошол :)

совет #1 - зделай меню так чтобы оно в любом разрешении выглядело одинаково

совет #2 - меню надо зделать так чтобы оно создавалось в начале игры, а потом если надо просто visible / invisible :)

и все

я конешно щас мудрю с task trees :) но пока ты вникниш что ето такое - пройдет много времени

кстати остальным : task trees очень удобная оказывается вещь - засунул к примеру обновление ai и всего остального по taskам и давай если че то кусок дерева на паузу ставиш, или чет другое делаеш

да и еще приоритеты и чилды класно юзаются :)

а весь главный цикл довел до минимального для меня состояния :
Код:

bool game_run = 1;
while (sys->Main_Cycle() != 0 && game_run == 1)
{
        if (sys->receiver->KeyHit(KEY_ESCAPE)) game_run = 0;

        Physx->StartPhysics();
        Physx->GetPhysicsResults();

        dusty->TaskTree->DoUpdates();

        //reset to receiver
        sys->receiver->Reset();
};


Fant 10.05.2006 00:21

Ну...и смех и слезы...

А ларчик-то просто открывался. Вот как я решил траблу, и все пашет:

Код:

Function fnMenuGame()

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

Delay 2



If gamestate$="mainmenu"
        fnmainmenu()
EndIf

; ВОТ ЭТОГО НЕ ХВАТАЛО В ЦИКЛЕ
If gamestate$="game"
        Exit
EndIf

If KeyHit(1)
        ClearWorld()
        Graphics 640,480,16,2
        SetBuffer BackBuffer()
       
        loadimages()
        gamestate$="mainmenu"
End If

If enterkey=1 Then gamestate$="game"


Flip
Forever
End Function

Но если хорошо извратиться, и поставить бомбу, не дать ей взорваться и выйти в главное меню (2 раза ecs) то будет ошибка
Код:

ScaleEntity (bomb\obj,scale#,scale#,scale#)
Удивительно! Но ведь я через clearWorld все объекты удаляю! Почему такая ошибочка?

Можно пойти на хитрость)
fnDestroyField() если esc нажали, но тогда будет ошибка в удаоении: типа объекта нет, а вы удаляете (как я растолковал это для себя)

Как мне быть в этой ситуации?

tormoz 10.05.2006 02:07

Я тебе уже писал: чисть типы

Fant 10.05.2006 12:46

удаление:
Код:

Function fnDestroyField()

        For cube.cubes = Each cubes
        If cube\obj Then FreeEntity cube\obj:cube\obj=0
 Delete cube
        Next
       
        For bomba.bombs = Each bombs
 If bomba\obj Then FreeEntity bomba\obj:bomba\obj=0
 Delete bomba
        Next
       
        For boom.booms = Each booms
 If boom\obj Then FreeEntity boom\obj:boom\obj=0
 Delete boom
        Next
       
        For en1.enemy1 = Each enemy1
 If en1\obj Then FreeEntity en1\obj:en1\obj=0
 Delete en1
        Next
       
        For en2.enemy2 = Each enemy2
 If en2\obj Then        FreeEntity en2\obj:en2\obj=0
 Delete en2
        Next
       
        For pr1.prise1 = Each prise1
 If pr1\obj Then FreeEntity pr1\obj:pr1\obj=0
 Delete pr1
        Next
       
;        For player.players = Each players
; If player\obj Then FreeEntity player\obj:player\obj=0
; Delete player
;        Next
End Function

Так все удаляется! Чего тут неправильно?

jimon 10.05.2006 16:21

не уверен в потребности en1\obj=0 и тд

Fant 10.05.2006 17:33

Хорошо! Я тоже не очень уверен...так что мне с багом делать?

tormoz 10.05.2006 17:45

Блин.
Найди мой пост про чистку типов и перечитай.
Пишу А С Пушкину что ли ???

Fant 10.05.2006 20:53

Delete Each MyType - очищает весь тип MyType - вои ваш пост


А можно мне простой примерчик по очищению? В хелпе никакого примера по Delete Each MyType не нашел!

ВОт нужен пример по:
Delete Each MyType

Guest 10.05.2006 22:29

Код:

Type TPoint
 Field x#,y#,r,g,b
End Type

kolvo = 100

For k=0 To kolvo
 point.TPoint = New TPoint
 point\x=Rnd(640)
 point\y=Rnd(480)
 point\r=Rand(255)
 point\g=Rand(255)
 point\b=Rand(255)
Next

Graphics 640,480

For point.TPoint = Each TPoint
 Color point\r,point\g,point\b
 Plot point\x,point\y
Next

Flip

;вот тут удаление всех экземпляров типа TPoint происходит
Delete Each TPoint

WaitKey()

End

Так можно удалять только если у тебя в полях типа содержатся переменные, такие как Числа (обычные - твои!) и строки.
Если же эти числа - указатели на объекты, к примеру, на картинку, то прежде чем удалить экземпляр типа, нужно удалить из памяти эту картинку (или любой другой объект, на который указывает переменная). Если звучит как-то непонятно, не расстраивайся, ты до того как связаться с "УДАЛИТЬ_КАЖДЫЙ" всё нормально удалял.
Теперь не знаю чё будет...

tormoz 11.05.2006 02:40

он делает ClearWorld - все картинки и модели удаляются.
Остается только почистить типы Delete Each MyType

и все !!!

Fant 13.05.2006 10:53

2Tormoz

Код:

Function fnDestroyField()

Delete Each cubes
Delete Each bombs
Delete Each booms
Delete Each enemy1
Delete Each enemy2
Delete Each prise1
Delete Each players

End Function

Вот я и изменил, как вы мне советовали, однако ошибка такая же как и раньше:
1. Ставлю бомбу
2. Жму esc - я в меню игры
3 Жму esc - я в главном меню
4. Жму новая игра:
Entity does not exist

в функции:
Код:

Function fnUpdateBombas()
For bomb.bombs = Each bombs
        If bomb<>Null
 If player\det=0 Then bomb\lifetime = bomb\lifetime+50
 If player\det=1 And KeyDown(28) Then bomb\lifetime =15000
 If (bomb\lifetime=15000 )
 If det=0
          If EntityDistance (player\obj,bomb\obj) < 5 Then playerlife=playerlife-1
        End If

        x1# = EntityX(bomb\obj)
        y1# = EntityY(bomb\obj)
        z1# = EntityZ(bomb\obj)

        If det=0 Then fnCreateBoom(x1#,y1#,z1#,player\radius#)
        kolvoBombs = kolvoBombs - 1
        FreeEntity bomb\obj
        Delete bomb
        Else
        scale# = bomb\size# + Cos (bomb\angle#)*0.33
        ScaleEntity (bomb\obj,scale#,scale#,scale#)
        bomb\angle# = (bomb\angle# + 10) Mod 360
 EndIf
        End If
Next

End Function

В строке:
Код:

ScaleEntity (bomb\obj,scale#,scale#,scale#)
То есть ваш совет к сожалению не помог мне исправить данную ошибку.

tormoz 13.05.2006 16:42

Что такое det ?
Может его нужно обнулить ?

Скорей всего просто где то у тебя примитивная ошибка.
Чудес не бывает.

Выведи в отладку все элемены типа bombs и посмотри что происходит.
или поставь Stop перед проблемным участком (где вылетает) и посмотри что у тебя в переменных

Fant 14.05.2006 00:48

Пробовал я det на 0 ставить...нефига...(
С ИИ та же фишка, создаешь пару врагов, выходишь в меню - заходишь в игру - ошибка! :'((

Fant 14.05.2006 00:54

Да и потом...как ЧТО_ТО может оставаться в ПАМЯТИ, если я CLEAR WORLD юзаю!!!

impersonalis 14.05.2006 03:18

ТИПЫ к примеру (если удаляешь не правильно)

tormoz 14.05.2006 03:29

Цитата:

Originally posted by Fant@13.5.2006, 22:54
Да и потом...как ЧТО_ТО может оставаться в ПАМЯТИ, если я CLEAR WORLD юзаю!!!

CLEAR WORLD НЕ очищает типы, массивы и переменные.
У тебя типичная ошибка: элемент типа есть. а ентити в нем нет. НЕ ЧИСТИШЬ значит.
Детская ошибка - ищи

Fant 14.05.2006 10:16

Я уже показывал как я удаляю типы, но к сожалению это не помогает ((
А как удалять массивы и переменные? - может у меня из=за них трабла?

Fant 14.05.2006 10:21

:wallbash:

У меня строка fnDeleteAllObjects()
В событии "начать новую игру" была ЗА ... не помню этото слова) короче перед ней была ; :)

Вот идиотизм! Я 2 вечера потратил на это!!!

Но все-равно ответте пожалуйста на вопрос предидущий, по удалению массивов и переменных!

tormoz 14.05.2006 15:57

Просто обнуляй

Fant 14.05.2006 16:30

Цитата:

Originally posted by tormoz@14.5.2006, 13:57
Просто обнуляй

В смысле?

Diplomat 14.05.2006 17:48

Присваивай нулевые значения переменным и всем элементам массивов.

Fant 14.05.2006 18:59

Это делать после того, как они "отаботали", и еще прописывть в глобал, верно?

А зачем % ?

К примеру это для текста $
А это для десятичеых #...

Fant 14.05.2006 19:42

опа)) не все! У меня теперь бомба не ставится после такого ОЧИЩЕНИЯ!!

Fant 14.05.2006 20:16

Разобрался с очищением и решил проблему) вот так вот! Зря писал 2 сообщения!

Fant 22.07.2006 00:57

Re: Меню
 
Столкнулся с проблемой. Сижу как пустое место уже минут 30 и не понимаю.

Если нажать: 1. Single player .2 Start - будет начало игры
А если нажать 1.Signle player. 2.Back 3. Single player 4. Start - выкинет (конец программы) как будто end стоит!

Fant 22.07.2006 02:31

Re: Меню
 
Благодаря SBJOKER решили проблему.
Нужно ставить return если внутри функции вызывается другая...(а потом опять нужна первая...ну вообщем так я узнал про return)

impersonalis 22.07.2006 02:54

Re: Меню
 
Цитата:

Сообщение от Fant
Благодаря SBJOKER решили проблему.
Нужно ставить return если внутри функции вызывается другая...(а потом опять нужна первая...ну вообщем так я узнал про return)

Fant, не обижайся пожалуйста, но , что называется, "ЖЖОШЬ!" :lol:

Fant 22.07.2006 18:47

Re: Меню
 
Цитата:

Сообщение от impersonalis
Fant, не обижайся пожалуйста, но , что называется, "ЖЖОШЬ!" :lol:

Да я не обижаюсь, но знал бы ты, когда я вчера "урезал" ресурсы игры (2d картинки меню) (собираюсь скоро выложить на форум с ИИ ), и внезапно в час ночи начались такие траблы!...я там чуть не спятил.Ночь...обратиться не к кому...:wallbash:
Короче как будто посреди пустыни на машине застрял! Но сейчас все окей;)


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

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