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

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

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

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

Ответ
 
Опции темы
Старый 08.05.2006, 23:53   #61
Fant
Бывалый
 
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений
(для 5 пользователей)
2Tormoz or Anybody!

Как мне реализовать меню в игре?
Tormoz предложил конечно суперский вариант, но почему-то мне кажется, что я так и делаю, но у меня ничего не выходит из-за ошибки(
(о которой я уже писал)...и ничего не могу с этим поделать!
(Offline)
 
Ответить с цитированием
Старый 09.05.2006, 03:10   #62
Fant
Бывалый
 
Регистрация: 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
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Чем плох EXIT?
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 09.05.2006, 04:21   #64
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 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
Fant
Бывалый
 
Регистрация: 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
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
Еще раз: графику задавай заново ТОЛЬКО если в меню менялись настройки разрешения.
И просто очищай весь мир тогда и гото на начало (там где графа инициализируется)

А почему у тебя вылетает на updateworld, да еще и в главном цикле - можно только гадать. Ищи.
__________________
(Offline)
 
Ответить с цитированием
Старый 09.05.2006, 16:38   #67
jimon
 
Сообщений: n/a
давноооо суда не заходил
тут уже гон пошол

совет #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
Fant
Бывалый
 
Регистрация: 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
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
Я тебе уже писал: чисть типы
__________________
(Offline)
 
Ответить с цитированием
Старый 10.05.2006, 12:46   #70
Fant
Бывалый
 
Регистрация: 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
jimon
 
Сообщений: n/a
не уверен в потребности en1\obj=0 и тд
 
Ответить с цитированием
Старый 10.05.2006, 17:33   #72
Fant
Бывалый
 
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений
(для 5 пользователей)
Хорошо! Я тоже не очень уверен...так что мне с багом делать?
(Offline)
 
Ответить с цитированием
Старый 10.05.2006, 17:45   #73
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
Блин.
Найди мой пост про чистку типов и перечитай.
Пишу А С Пушкину что ли ???
__________________
(Offline)
 
Ответить с цитированием
Старый 10.05.2006, 20:53   #74
Fant
Бывалый
 
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений
(для 5 пользователей)
Delete Each MyType - очищает весь тип MyType - вои ваш пост


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

ВОт нужен пример по:
Delete Each MyType
(Offline)
 
Ответить с цитированием
Старый 10.05.2006, 22:29   #75
Guest
 
Сообщений: n/a
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
Так можно удалять только если у тебя в полях типа содержатся переменные, такие как Числа (обычные - твои!) и строки.
Если же эти числа - указатели на объекты, к примеру, на картинку, то прежде чем удалить экземпляр типа, нужно удалить из памяти эту картинку (или любой другой объект, на который указывает переменная). Если звучит как-то непонятно, не расстраивайся, ты до того как связаться с "УДАЛИТЬ_КАЖДЫЙ" всё нормально удалял.
Теперь не знаю чё будет...
 
Ответить с цитированием
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как программно узнать имя пункта меню который был выбран (Обычное/стандартные меню)? Richik Основной форум 5 25.05.2009 23:20
Меню... KeipL Основной форум 11 26.07.2008 22:02
Меню AndruXa Blitz3D 18 05.10.2007 21:44
Меню S2k Основной форум 1 31.08.2007 23:53


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


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