|
2D-программирование Вопросы, касающиеся двумерного программирования |
08.05.2006, 23:53
|
#61
|
Бывалый
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений (для 5 пользователей)
|
2Tormoz or Anybody!
Как мне реализовать меню в игре?
Tormoz предложил конечно суперский вариант, но почему-то мне кажется, что я так и делаю, но у меня ничего не выходит из-за ошибки(
(о которой я уже писал)...и ничего не могу с этим поделать!
|
(Offline)
|
|
09.05.2006, 03:10
|
#62
|
Бывалый
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений (для 5 пользователей)
|
После адских мучений:
В цикле:
If gamestate$="mainmenu"
fnmainmenu()
EndIf
If gamestate$="menuGame"
fnMenuGame()
End If
If KeyHit(1)
gamestate$="menuGame"
time#=MilliSecs()-period#
End If
и сама функция
Function fnMenuGame()
Repeat
Cls
mhit1= MouseHit(1)
mhit2= MouseHit(2)
EnterKey = KeyHit(28)
If gamestate$="mainmenu"
fnmainmenu()
EndIf
If KeyHit(1)
ClearWorld()
Graphics 640,480,16,2
SetBuffer BackBuffer()
loadimages()
gamestate$="mainmenu"
End If
If enterkey
;НУ НЕ ЗНАЮ КАК!!!!!!!!!!!!!!
End If
Flip
Forever
End Function
Если выйти в это меню (черный экран) и нажать enter...ну не знаю я, как завершить этот цикл (exit не катит и не катит repeat until enterkey)? Подскажите как завершить цикл ?
Проблема:
Если из моего меню выйти в главное (нажатием ecs) то при входе в игру, все начнется с этого черного меню, что тоже неправильно, хотя:
Case 1;new
turn=0
freeimages()
gamestate$ = "game"
;fnDeleteAllObjects()
fnNewGame()
Это если начали начать новую игру
gamestate$= "game" у меня идет так:
If gamestate$="mainmenu"
fnmainmenu()
EndIf
If gamestate$="menuGame"
fnMenuGame()
End If
If KeyHit(1)
gamestate$="menuGame"
time#=MilliSecs()-period#
End If
If gamestate$="game"
и так далее...охватывает If gamestate$="game" весь цикл...до команд UpdateWorld
Next
RenderWorld
Вообщем помогите с завершением цикла!
И почему у меня игра начинается с черного экранчика этой заразной функции?
|
(Offline)
|
|
09.05.2006, 03:25
|
#63
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Чем плох EXIT?
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
09.05.2006, 04:21
|
#64
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Если честно то ошибок столько что легче заново написать с нуля.
Ошибки не синтаксические. а стратегические.
Делай как я тебе написал. иначе утонешь в логике.
выходить из цикла элементарно по переменной:
While Not menu_stat<>0
тут твой цикл
выход - присвоение переменной menu_stat любого значения отличного от нуля
Wend
Select menu_stat
Case 1
Go_game()
Case 2
Repeat_game()
Case 3
Go_graphics()
...
End Select
__________________
|
(Offline)
|
|
09.05.2006, 10:32
|
#65
|
Бывалый
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений (для 5 пользователей)
|
To Imper (можно тебя так называть?)
Exit - супер) но к сожалению он никак не действует...вообще я сам выпал...
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 не ругалось...странно
Зато в моем коде, блин, при нажатии "новая игра" все начиналось с черного экрана...и я не знал как заверщить функцию. (см. пост выше)
Короче хрен редьки не слаще...что так не пашет, что так
И еще...tormoz...я не проитв твоего кода! Ты мне 100 раз писал, что бы я юзал его! Да я не против, просто я не понял как! А так я бы с радостью! Поэтому думаю, что ты зря писал, что я его "не юзаю" ... я же не баран) Зачем мне делать по-своему неправильно, если ты советуешь правильно) вывод тока 1...я просто не смог реализовать твою...идею!...
|
(Offline)
|
|
09.05.2006, 16:03
|
#66
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Еще раз: графику задавай заново ТОЛЬКО если в меню менялись настройки разрешения.
И просто очищай весь мир тогда и гото на начало (там где графа инициализируется)
А почему у тебя вылетает на updateworld, да еще и в главном цикле - можно только гадать. Ищи.
__________________
|
(Offline)
|
|
09.05.2006, 16:38
|
#67
|
|
давноооо суда не заходил
тут уже гон пошол
совет #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();
};
|
|
|
10.05.2006, 00:21
|
#68
|
Бывалый
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений (для 5 пользователей)
|
Ну...и смех и слезы...
А ларчик-то просто открывался. Вот как я решил траблу, и все пашет:
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 нажали, но тогда будет ошибка в удаоении: типа объекта нет, а вы удаляете (как я растолковал это для себя)
Как мне быть в этой ситуации?
|
(Offline)
|
|
10.05.2006, 02:07
|
#69
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Я тебе уже писал: чисть типы
__________________
|
(Offline)
|
|
10.05.2006, 12:46
|
#70
|
Бывалый
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений (для 5 пользователей)
|
удаление:
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
Так все удаляется! Чего тут неправильно?
|
(Offline)
|
|
10.05.2006, 16:21
|
#71
|
|
не уверен в потребности en1\obj=0 и тд
|
|
|
10.05.2006, 17:33
|
#72
|
Бывалый
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений (для 5 пользователей)
|
Хорошо! Я тоже не очень уверен...так что мне с багом делать?
|
(Offline)
|
|
10.05.2006, 17:45
|
#73
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Блин.
Найди мой пост про чистку типов и перечитай.
Пишу А С Пушкину что ли ???
__________________
|
(Offline)
|
|
10.05.2006, 20:53
|
#74
|
Бывалый
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений (для 5 пользователей)
|
Delete Each MyType - очищает весь тип MyType - вои ваш пост
А можно мне простой примерчик по очищению? В хелпе никакого примера по Delete Each MyType не нашел!
ВОт нужен пример по:
Delete Each MyType
|
(Offline)
|
|
10.05.2006, 22:29
|
#75
|
|
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
Так можно удалять только если у тебя в полях типа содержатся переменные, такие как Числа (обычные - твои!) и строки.
Если же эти числа - указатели на объекты, к примеру, на картинку, то прежде чем удалить экземпляр типа, нужно удалить из памяти эту картинку (или любой другой объект, на который указывает переменная). Если звучит как-то непонятно, не расстраивайся, ты до того как связаться с "УДАЛИТЬ_КАЖДЫЙ" всё нормально удалял.
Теперь не знаю чё будет...
|
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:02.
|