Показать сообщение отдельно
Старый 21.09.2005, 20:32   #17
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
чесно сказать... очень сложно разобраться в коде, я не знаю какого размера объекты и где они должны стоять... короче для меня было проще написать свою маленькую реализацию подгрузки файлов игр, смотри аттач.

код главного меню:
; делаем файл первой игры как функцию
; ПРИМЕЧАНИЕ: в файле game1.bb должна отсутствовать команда END, 
; иначе мы не сможем вернуться в главное меню
function game1()
 include "game1.bb"
end Function

; делаем файл второй игры как функцию
; ПРИМЕЧАНИЕ: в файле game2.bb должна отсутствовать команда END, 
; иначе мы не сможем вернуться в главное меню
function game2()
 Include "game2.bb"
End Function
 
; теперь функция меню
Function mainmenu%()

 определяем граф.режим и выставляем буфер
 graphics3d 800,600,32,2
 setbuffer BackBuffer()

; загружаем и устанавливаем шрифт
 font=LoadFont("Arial",20,True,False,False) 
 SetFont font
 
; цикл меню
Repeat
 
; проверяем если мышка внутри первого пункта
 If MouseX()>250 And MouseY()>100 And MouseX()<550 And MouseY()<150
; изменяем его цвет
  Color 100,255,100
; а если еще и кнопка нажата, то запускаем игру1
  If MouseDown(1) 
  game1():return 1:exit
; выходим из функции меню вернув положительное значение
 EndIf
 Else
 Color 255,100,100
 EndIf
; рисуем сам квадрат первого пункта меню
 Rect 250,100,300,50,1


; точно так-же для второго пункта меню	
 If MouseX()>250 And MouseY()>250 And MouseX()<550 And MouseY()<300
 Color 100,255,100
 If MouseDown(1) 
  game2():return 1:exit
 EndIf
 Else
 Color 255,100,100
 EndIf
	
 Rect 250,250,300,50,1

; и так-же для третьего пункта
 If MouseX()>250 And MouseY()>400 And MouseX()<550 And MouseY()<450
 If MouseDown(1) 
; только тут нам ничего запускать не нужно, нужно только вернуть ложь
  return 0:exit
 EndIf
 Color 100,255,100
 Else
 Color 255,100,100
 EndIf

 Rect 250,400,300,50,1

; выводим надписи меню на экран
 Color 255,255,255
 Text 350,117,"First game"
 Text 342,267,"Second game"
 Text 385,417,"Exit"
	
; еще если нажата ESC, то возвращаем ложь и выходим 	
 If KeyHit(1) Then Return 0:exit
 
 Flip
 
Forever
 
end function


; теперь главный цикл программы,
; запускаем меню пока оно не возвратит ложь, как только ложь, так сразу END
while mainmenu()
wend

end
теперь маленько поподробнее, зачем такой гемор с функцией меню спросите вы, ответ прост, функция Graphics3d очищает мир полностью, удаляет все объекты и текстуры из памяти... и чтоб это все всегда подгружалось нужно делать такую меню-функцию (не тащить-же все объекты меню (если меню 3Д например) через всю игру)

надеюсь, что тебе это поможет в твоей проблеме
__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием