![]() |
Вот здесь наработки меню.
Пока что работаю над переключением режима экрана клавишей 1,2,3,4 можно выбрать режим. Затем жмем клавишу esc и...все работает. NGIU я решил не использовать, по некоторым причинам Вопросы 1) Достаточно ли этот метод хорош? 2) если нет, то как сделать лучше (оптимальнее)? Не стоит думать что это ошибка то, что переключение 3D режимов я пишу в 2d разделе. Просто это только начальная стадия меню. Дальше будет работа в 2d. Прошу помочь мне в данном вопросе. Код:
Global a1=320; переменные для режимов графики |
есть либа, причем очень хорошая... создать можно гуи как в windows
смотреть тут: http://community.boolean.name/index.php?showtopic=13 |
Цитата:
К сожалению ссылка не работает на либу! А как моё меню? Стоит дорабатывать? Изменить что? А ссылка битая!( |
подправил ссылу...
я наверное неправильно тебя понял... посмотри либу, может тебе такое пригодится... :) |
Программа наверное супер! Но у меня example ее не запускается. Говорит, что фукнция ненайдена. Ну да ладно! У меня есть NGui
Но я не черз ГУИ а средствами блиц хочу! 2SubZer0 Ну как мой примерчик? мне очень важно знать мнение того, насколько он плох, и что нужно править? (упоси боже править все) |
ДА. я бы рекомендовал для игры NGUI.
Хотя, думаю, разобраться в нём будет сложновато (но не проще чем в других версиях ГУИ). Не совсем корректно выражение: Цитата:
Или подразумевается - ты не хочешь зраниь установки ГУИ в отдельном файле? |
Я бы посоветовал сделать все типами.
Тип кнопка Тип скроллер Тип флажок Тип экран потом описать их, причем функции обновления кнопок и про. гаджетов должны возвращать ИД(идентификационный номер) того гаджета который был активирован. Все эти гаджеты размещаются в спец. группах - экранах. Делаешь функцию обновления экрана, параметров которой евляется указатель на экран. Она будет обновлять все гаджеты которые расположены на этом экране. А сам цикл меню можно при этом организовать так Код:
MainEvent=MM_MAINSCREEN Вобщем примерно так. Если что непонятно - спрашивай. :) |
Вот, нарыл наконец-то исходник по работе с кнопками.
За орфографические ошибки, если есть, звиняюсь заранее - писал давно, неграмотный был :) Тут все раскоментированно, думаю понятно будет :)) Код:
Graphics 640,480,16,2 |
to platon:
ВЕЩЬ :super: |
а что собствено мешало ето самому написать ? :)
|
Цитата:
Буду сегодня вечером понимать и осмысливать код Платона 2Платон Посмотрел...на вид - супер. Еще не разбирался! Но меню офигенное! Люююди! Вы издеваетесь :) :)) ну как переключение режимов хоть работает! Никто его так и не оценил! Само переключение граф. режимов!!! плииз! :wallbash: |
Цитата:
Но это лучше чем переключать разрешение клавишами :) А так - точно так же делаются скроллеры, переключатели и прочая хрень. Я как-то пробывал писать меню, если найду исходник (у меня тут такой бардак что черт ногу сломит:) ) - закомментирую и на форум выложу. |
Понятно-понятно!
Если найдешь, но будет неплохо, если выложешь (если время будет) А так я сам постараюсь написать! Как умею, а если ступор(или проверить) то на форум! Тут я знаю, всегда помогут кодом или одскажут так, что 100% дойдет Так и все-таки! Как мое переключение граф. режимов!? Сам принцип работы изменения графики? :?? боооже...ну почему никто не видит этот мой вопрос по графе! :wallbash: правильно ли я так переключаю разрешение? |
fant - я же тебе подробно обяснил как работает ето
в чем проблема ? |
Цитата:
|
правильно :)
но как я думаю, тебе понадобится сохранить текущии настройки ? |
Этим я займусь завтра может быть, но если не завтра, то 21 после экзамна 100%. Тогда и буду очень активно (будут каникулы) работать над игрой. А пока поюзаю код Платона, и интегрирую смену графики в его код+ поправлю и сделаю ремейк того кода под свой лад...а щас ночь...все...спасибо за ответ...это еще не конец обсуждений...ушел....спать
|
У меня такая фигня
Код:
Вы не знаете почему так? мерцания происходят только в режими полноэкранном. раньше этого не было. Глюк именно примерах по работе с 2D! В 3d таких мерцаний нет...странно. А еще по завершении программы...эти мерцания как бы продолжаются на мониторе пару секунд. Потом все приходит в норму. А еще меню пытаюсь сделать. Но там такая фишка: Я загружаю изображение. Рисую Но оно рисуется с фоном! maskImage нужно? Не выходит...как этот фон убрать-то? Аттач с попыткой меню прилагается ... |
А по-твоему оно не должно мелькать? У тебя в BackBuffer белый квадрат на весь экран, а во FrontBuffer - черный экран. :)
Чтобы у кнопок не было фона, нужно использовать MаskImage, но для этого фон должен быть одноцветным, чего я не наблюдал у твоих кнопок. |
Понятно! Разобрался я с мельканиями!
Не понял только про фон! Фон у кнопок ОДНОГО цвета ведь! Никак не могу понять чего там лишнего! Я в ХареВебСайл клипал, и использовал "фон". Значит он одного цвета (я так предпологал) А как сделать его одним цветом тогда? |
Он не одного цвета, так как при сжатии картинки (степень зависит от выбранного качества) некоторые пиксели меняют свой цвет. Чтобы фон был одного цвета, рекомендую воспользоваться Фотошопом :)
|
Цитата:
И еще! Вот выложил код. Нужно нажимать: опции->графические опции->640 на 480 и почему-то у меня ошибка! Код+все картинки прилагаются! А тот код с роботами временно стоит оставить. Подскажите пожалуйста почему ошибка? И самое главное, как ее исправить! И...как же мне с maskImage быть? Есть ли варианты? |
Вот исправлена ошибка, только появился глюк: после смены графического режима все тормозит... незнаю почему...
|
понял в чем причина, надо заного ставить задний буффер
SetBuffer BackBuffer() :lol: :lol: :lol: |
Мы тут с Pax помутили с менюю...и вообщем я решил, чтобы не сбивались координаты надо из каждый раз писать заново.
Но есть такая команда ImageXHandle Оказывается, она может узнать координату по оси X 2D объекта! Как ни странно, но координату эта программа действительно показывает!. Теперь я придумал сделать так: Раз уж коорднинаты сбиваются, то PAX сделал граф. мышку, и имея графическую кнопоку можно проверить их на: ImagesCollide Example И работает ведь! Но ведь принцип работы такой: image1 - first image to test x1 - image1's x location y1 - image1's y location frame1 - image1's frame to test (optional) image2 - second image to test x2 - image2's x location y2 - image2's y location frame2 - image2's frame to test (optional) То есть опять надо координаты указывать. Но есть ведь ImageXHandle и ImageYHandle, который эти координаты находит, стало быть справедливо будет написать так: Код:
If ImagesCollide (MouseImage,MouseX(),MouseY(),0,Buttonexit, ImageXHandle(Buttonexit) ,ImageYHandle(Buttonexit),0) Тогда я пошел на хитрость: Код:
ImageXHandle(Buttonexit)=a Теперь я не знаю что делать! Кто может помочь с координатами? Как сделать так, что бы какой-нибудь командой выяснить координату, указать ее в команду коллизии, и что бы потом после смены графического режима не пришлось заново прописывать координаты объекта или координаты пересечения? :'(( |
Ну ты хитрюга :lol:
Код:
a=ImageXHandle(Buttonexit) |
Насколько я знаю, меню должно быть интерактивным. То есть например когда наводишь мышьку на кнопочку в меню (код смотреть в топике про бомбера), тодолжно происходить что-нить красивое (у меня сейчас просто указатель прыгает на кнопку)
Вопрос: Как практичнее (и может даже лучше) осуществить эту "интерактивность"? Может сделать плавное изменение цвета? Или что-нибудь еще? Я даже не знаю! Подскажите советом! Как сделать меню красивее!? (если у вас есть простенький код, где есть красивое меню, то буду благодарен, если с советом будет и код "в помощь" Вообщем это и весь мой вопрос! |
наклепать несколько состояний одной кнопки и использовать :)
|
В 3д меню делай.
Работает в разы быстрей и эффекты легко реализовать. |
Ну легко будет потом, вначле - сложнее.
К тому же многие ГУИ, работающие через 3д начинают дико глючить, если в игре используются несколько камер, меняется zoom и projection mode |
А вообще - я сам жду когда PAX доделает свою спрайтовую либуЮ чтобы ГУИ замутить =)
|
Что за спрайтовая либа ?
|
|
То, что можно с нарисоваными кнопочками, я то понимаю, что можно их нарисовать, и сделать даже как анимацию, но я хочу это обойти! Есть ли еще варианты?
А есть ли вариант что-нить сделать с цветом кнопок? Или их zoom ить...или что-нибьудь еще??? 3D меню никак не будет потому, что уже очень много сделано в 2D, да и не представляю я как 3d реализовать! Подскажите как можно еще разнообразить меню? |
Посмотрел. Задумка неплохая, но я предпочитаю каждый раз писать все с нуля, под конкретные задачи.
А с 2д в Блитц3д делать меню нет смысла. Тормозят имажи и очень ограничивают эффекты. В 3д возможностей полно: цвет, прозрачность, смена текстур. повороты, скейл. Быстро. просто, эффектно. Вот функция создания "3д имажа". Размещать перед камерой Код:
Function CreatePlane_m(File$) |
Взвесив все, я решил, что буду стараться делать кнопки программно! То есть не рисунками. Попробую сделать что-нить простое. Выложу в это топике простецкий пример, а потом будем дальше рассматривать...
А еще и подумав головой я решил, что пока стоит оставить все как есть, а меню дорабатывать только тогда, когда степерь завершенности игры будет 90% (без графики, разумеется) Я прав? |
мне бы логику автоматов для меню надо клепать сначала ... :(
|
2jimon:ничегонепонялтыбыхотябызапятыеставилиногда
|
2impersonalis : тебебытоженепомешалобызапятыеипробелыставитьпочаще :)
|
jimon
Игнорирование предупреждения админа + флуд. Доиграешься. |
alcoSHoLiK :
прошу тыкнуть меня в то место где сказано что я написал какуето глупость или сообщение не относяищеюся к теме imp просто написал что мне надо ставить больше запятых ... или что то другое ? |
Вообщем с главным меню в игре я разобрался, но как сделать меню непосредственно в самой игре!?
то есть приостановить игру и сделать активным меню? У меня есть код, как делать паузу Код:
;Пауза |
Создай функции:
1 загрузка меню 2 цикл меню 3 удаление меню Дальше понятно ? при выходе из игры, грузишь меню, переходишь в его цикл (назнач переменную которая отображает состояние меню - из игры зашел, или нет и по ее значению в меню выводи кнопки) при выходе из цикла меню проверяй, вышел ты совсем (в винду) или вернулся в игру (ретурн) если второе. то просто удаляй меню и играй дальше. все. |
То есть вместо паузы, сделать цикл меню - ето я понял, но тогда вопрос в том, как "остановить игру" ?
|
не останавливай, а выходи из цикла игры и запускай цикл меню
|
понял! Буду пробовать!) если что - напишу сюда)
|
Код:
Function fnMenuGame() Код:
If KeyHit(1) fnMenuGame() ТО ии, почему-то продолжает деятельность, да и бомба взорвется, хотя визуально все "останавливается, конечно |
Вероятно все события у тебя происходят по времени - следовательно всё "просиженное" в меню время будет учтено и обработано сразу же после возврата в игру.
|
да! Мне SBJoker предложил сделать так:
В цикле: Код:
If KeyHit(1) Then |
при нажатии ескейп - ВЫХОДИ из цикла игры совсем !
а не пытайся внутри цикла меню запускать (это сделать можно - но тебе проще выйти) |
А как совмем выйти? Я же хочу потом еще продолжить игру...
|
А как выйти совсем? Я же хочу еще и продолжить игру!
Это будет реально? |
Елки палки.
ну элементарно же, переменную заведи и отслеживай состояние: зашел в меню из игры - одно значение. зашел не из игры - другое. Другую переменную выхода из меню: возврат или начало новой игры. Если ты такой фигни придумать сам не можешь - что дальше будет ? :dontknow: |
2tormoz:
причём тут это? Его решение - запоминать состояние времени для необходимых объектов и восстанавливать его при выходе из меню. |
Кстати насчет переменных это идея...может они понадобятся?
А то у меня ошибка: Код:
Function fnMenuGame() DrawImage ButtonReturn_to_game ,300,100 Не сущесвует этого имеджа! Хотя как видно из кода, я каждый раз при входе в функию, гружу этот имеждж...странно, да? никто не знает, почему такой косяк? и как его исправить? |
Графику инициализируй один раз !
До входа в меню: .точка входа при смене разрешения инит графика . точка входа после основного цикла лоад ресурсы меню меню освобождаем ресурсы меню проверяем выход из меню:(переменную) если игра - грузим ресурсы игры если возврат в игру - не грузим если выход из игры то ЕНД если меняли разрешение в меню то ставим флаг(переменную) и гоу на начало основной цикл игра выход из цикла возврат в точку меню ========= Для нормального завершения при повторной инициализации графики создай функцию очистки типов и переменных (которые нужно очистить) Delete Each MyType - очищает весь тип MyType |
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, разумеется! |
Делай как я написал - схема отлажена временем.
|
Но я не совсем понял как по вашей схеме делать!?
Как я могу 1 раз инициализировать графику, если в меню она 640 на 480, а в игре - опционально! ? |
Думаю для самой игры надо сделать новое упрощенное меню дабы не менять разрешение экрана во время игры.
|
2Tormoz or Anybody!
Как мне реализовать меню в игре? Tormoz предложил конечно суперский вариант, но почему-то мне кажется, что я так и делаю, но у меня ничего не выходит из-за ошибки( (о которой я уже писал)...и ничего не могу с этим поделать! |
После адских мучений:
В цикле: Код:
If gamestate$="mainmenu" Код:
Function fnMenuGame() Проблема: Если из моего меню выйти в главное (нажатием ecs) то при входе в игру, все начнется с этого черного меню, что тоже неправильно, хотя: Код:
Case 1;new gamestate$= "game" у меня идет так: Код:
If gamestate$="mainmenu" Next RenderWorld Вообщем помогите с завершением цикла! И почему у меня игра начинается с черного экранчика этой заразной функции? :bad: |
Чем плох EXIT?
|
Если честно то ошибок столько что легче заново написать с нуля.
Ошибки не синтаксические. а стратегические. Делай как я тебе написал. иначе утонешь в логике. выходить из цикла элементарно по переменной: Код:
|
Часовой пояс GMT +4, время: 02:20. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot