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

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

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

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

Ответ
 
Опции темы
Старый 10.03.2011, 20:20   #1
umnick
AnyKey`щик
 
Регистрация: 10.03.2011
Сообщений: 6
Написано 2 полезных сообщений
(для 2 пользователей)
Пауза и свет

Здравствуйте,ув. программисты,недавно начал знакомиться с Blitz3D,а точнее 4 дня как...Так вот,при "расработке своей первой "игры"" , возникла проблема.Не могу сделать меню и паузу. Так же непонятная проблема со светом , почему-то свет не падает на "пол" , в результате чего тот остается темным.
А что бы не писать тут поэму,выкладываю исходник сего "шедевра".Буду очень благодарен , если кто-нибудь сможет помочь мне.Заранее спасибо

Не получилось прикрепить файл,заливаю на rgost.

Исходник
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
LLI.T.A.L.K.E.R. (10.03.2011)
Старый 10.03.2011, 20:40   #2
Ganociy
Разработчик
 
Аватар для Ganociy
 
Регистрация: 02.06.2009
Адрес: Город Герой Ленинград
Сообщений: 392
Написано 33 полезных сообщений
(для 74 пользователей)
Ответ: Пауза и свет

RotateEntity light,90,0,0
EntityFx plane,1

По поводу меню и паузы:
http://forum.boolean.name/showthread.php?t=13890&page=2
http://forum.boolean.name/showthread...t=%EC%E5%ED%FE
http://forum.boolean.name/showthread...t=%EC%E5%ED%FE
__________________
Самый первый и самый великий программист - это Бог.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
umnick (10.03.2011)
Старый 10.03.2011, 20:41   #3
Ganociy
Разработчик
 
Аватар для Ganociy
 
Регистрация: 02.06.2009
Адрес: Город Герой Ленинград
Сообщений: 392
Написано 33 полезных сообщений
(для 74 пользователей)
Ответ: Пауза и свет

Помню сам на этом материале учился (твоя игра. Верней не совсем твоя)) )
__________________
Самый первый и самый великий программист - это Бог.
(Offline)
 
Ответить с цитированием
Старый 10.03.2011, 20:47   #4
umnick
AnyKey`щик
 
Регистрация: 10.03.2011
Сообщений: 6
Написано 2 полезных сообщений
(для 2 пользователей)
Ответ: Пауза и свет

Спасибо большое,свет заработал.С меню буду разбираться.
Да,игра действительно не моя) Ну,точнее на половину)За то,за эти 4 дня , как родная мне стала :D
(Offline)
 
Ответить с цитированием
Старый 10.03.2011, 21:17   #5
LLI.T.A.L.K.E.R.
Мастер
 
Аватар для LLI.T.A.L.K.E.R.
 
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений
(для 504 пользователей)
Ответ: Пауза и свет

Нормально!
Только кубики другого цвета, тона нужно, а то при большой скорости и тряске "вслепую" уже играл.
Потом модель красного сочного яблока прикрепи! (Или разных цветов с разными бонусами)
Модель змейки попробуй анимированую сделать. (Сначала так подумал, чтобы ножками топала, но это уже ящер будет )

Можно ещё Terrain как пол сделать..
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
umnick (10.03.2011)
Старый 10.03.2011, 21:28   #6
umnick
AnyKey`щик
 
Регистрация: 10.03.2011
Сообщений: 6
Написано 2 полезных сообщений
(для 2 пользователей)
Ответ: Пауза и свет

Спасибо за совет,уже сам начал думать заменить "змейку" и перетянуть текстуры по новой.Еще куча плюх в разработке.бонусы там всякие и т.п. Хочу еще переделать подсчет жизней из текста в спрайт,или картинку.Как прогрессбар только наоборот,ну короче вы поняли)
(Offline)
 
Ответить с цитированием
Старый 10.03.2011, 21:35   #7
LLI.T.A.L.K.E.R.
Мастер
 
Аватар для LLI.T.A.L.K.E.R.
 
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений
(для 504 пользователей)
Ответ: Пауза и свет

Динамическая камера (если не будет мешать при обзоре местности)
PointEntity cam,Player ; после этого места можешь дописать

Zoom#=1+(EntityDistance(cam,Player)-35)*0.1 ; 35 это расстояние по Y от камеры до змейки
CameraZoom cam,Zoom# ; установка зума на переменную Zoom#
Быстрый разворот назад (это так на усмотрение удобней будет или нет):
 If KeyHit(208) TurnEntity Player,0,-180,0
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
umnick (10.03.2011)
Старый 10.03.2011, 21:57   #8
umnick
AnyKey`щик
 
Регистрация: 10.03.2011
Сообщений: 6
Написано 2 полезных сообщений
(для 2 пользователей)
Ответ: Пауза и свет

Это все хорошо,но я так и не нашел пример реализации паузы.Пробовал делать через WaitTimer , но не вышло. Есть идеи?
(Offline)
 
Ответить с цитированием
Старый 10.03.2011, 23:17   #9
LLI.T.A.L.K.E.R.
Мастер
 
Аватар для LLI.T.A.L.K.E.R.
 
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений
(для 504 пользователей)
Ответ: Пауза и свет

Вот ButtonSystem:
http://rghost.ru/4714246

И некая попытка соединить в твою игру:
http://rghost.ru/4714341

Что нужно доделать:
создать новую кнопку (для GameScr=2) с названием "В Меню"

2St_AnGer, Ага я на Select-Case и сделал..
Проблема в UpdateWorld RenderWorld, написания Text-ов, ну и в конце Flip.

Т.е. чтобы было видно меню и на заднике игра - нужно рендерить в каждом case.
Фишка в чём, что нужно сначала игровую механику просчитать (движения игрока/врагов), потом рендер, в конце меню нарисовать и тексты, а потом Flip.

В общем в примере я затерялся - Update и Render (из-за кнопочек) до расчётов написал. Надо это под конец Case переместить.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо LLI.T.A.L.K.E.R. за это полезное сообщение:
St_AnGer (10.03.2011), umnick (10.03.2011)
Старый 10.03.2011, 23:18   #10
St_AnGer
Элита
 
Аватар для St_AnGer
 
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,067
Написано 1,185 полезных сообщений
(для 2,828 пользователей)
Ответ: Пауза и свет

Делать всю игру в структуре Select-Case. Один case отвечает за меню, второй за игровой процесс, третий (допустим) за меню паузы. При нажатии на клавишу паузы уходить в третий case, в котором отрисовка мира продолжается, но действия никакие не происходят. Как то так. Самая простая реализация помоему.
__________________
Main PC:
Intel Core i5 4260U 1.44 GHz + LPDDR3 1x4096 1600 MHz + Intel HD Graphics 5000.

Asus Ёжик T101-MT:
Intel Atom N-570 1.66 Ghz + DDR2 2x1024 800 Mhz + Intel GMA 3150 128 Mb DDR2


Скачать Doom 2D: Remake v0.3.8a
(Online)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
umnick (10.03.2011)
Старый 10.03.2011, 23:43   #11
umnick
AnyKey`щик
 
Регистрация: 10.03.2011
Сообщений: 6
Написано 2 полезных сообщений
(для 2 пользователей)
Ответ: Пауза и свет

Спасибо,завтра буду разбираться
(Offline)
 
Ответить с цитированием
Старый 11.03.2011, 11:32   #12
Черный крыс
 
Сообщений: n/a
Ответ: Пауза и свет

Весьма примитивно и не гибко.
Обычно делают так :
1) Прописывают флаги состояний игры.
2) Формируется хук отрисовки / обновления и он же (хук) регистрируется в системе при запуске приложения.
3) Любое состояние управляется с помощью системы событий.

Все это дело есть в БМаксе. В Б3Д надо делать самому ( хуки и события ).

в конечном итоге управление состояниями сводится к такому виду :

'Обьявление констант и хуков
Const GAME_MENU:Byte = 0
Const GAME_GAME:Byte = 1
Const GAME_PAUSE:Byte = 2
Const GAME_END:Byte = 125
 
' регистрируем события :
AllocUserEventID(GAME_MENU,"МЕНЮ!")
AllocUserEventID(GAME_GAME,"ИГРА!")
...
 
' Обработчик событий :
Function UpdateState:Object(id:Int,data:Object,context:Object)
    ' Здесь обрабатываются все игровые события
 
     ' Если обработчик ничего не обработал то необходимо :
    Return data
EndFunction
 
' Регистрация обработчика в системе событий
AddHook(EmitEventHook, UpdateState) ' Функция регистрируется в системе событий
 
Function Draw(id:Int)
    ' рисование ( id говорит о том, что надо рисовать )
EndFunction
 
Function Update(id:Int, dt:Float)
     ' Обновление ( id говорит о том, что надо обновлять )
EndFunction
 
' ХУК
Function Hook:Object(id:Int,data:Object,context:Object)
    ' id - содержит текущее состояние программы
    Local dt:Float = UpdateDeltaTime() ' Обновление значения дельты времени
    ...
    по полученным данным обновляем и рисуем все, что надо
 
    Update(id,dt)
 
    Draw(id)
    
    Return data
EndFunction
 
' Регистрируем хук в системе
AddHook(FlipHook,Hook) ' Хук вызовится перед Flip()
...
 
' Цикл
 
Repeat
    Cls()
    Flip(True) ' Запуск всех хуков, после этого произойдет смена буффера
Forever
 
' Управляется так :
 
CreateEvent(GAME_PAUSE, 1, 0, 0, 0, Null).Emit()
' Это озночает что мы послали системе сообщение о смене игрового стейта на
' ИГРА В ПАУЗЕ
Одной строчкой кода мы запускаем хук EmitEventHook, в котором обработается созданое событие, в обработке события примет участие и наш созданный выше обработчик.

Смотри сорсы БМакса. Ничего сложного нет. =)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо за это полезное сообщение:
LLI.T.A.L.K.E.R. (11.03.2011), umnick (11.03.2011)
Старый 11.03.2011, 13:02   #13
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений
(для 1,012 пользователей)
Ответ: Пауза и свет

Спасибо,завтра буду разбираться
Если разбираться,то сразу...и ещё..НАжми F1 перед командой если не знаешь что такое..(для етого желательно скачать русскую версию хелпа.)
__________________
Сайт: http://iexpo.ml
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
umnick (11.03.2011)
Старый 11.03.2011, 15:46   #14
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,853 пользователей)
Ответ: Пауза и свет

Сообщение от Diablo1909 Посмотреть сообщение
Весьма примитивно и не гибко.
Обычно делают так :
1) Прописывают флаги состояний игры.
2) Формируется хук отрисовки / обновления и он же (хук) регистрируется в системе при запуске приложения.
3) Любое состояние управляется с помощью системы событий.

Все это дело есть в БМаксе. В Б3Д надо делать самому ( хуки и события ).

в конечном итоге управление состояниями сводится к такому виду :

'Обьявление констант и хуков
Const GAME_MENU:Byte = 0
Const GAME_GAME:Byte = 1
Const GAME_PAUSE:Byte = 2
Const GAME_END:Byte = 125
 
' регистрируем события :
AllocUserEventID(GAME_MENU,"МЕНЮ!")
AllocUserEventID(GAME_GAME,"ИГРА!")
 ...
Одной строчкой кода мы запускаем хук EmitEventHook, в котором обработается созданое событие, в обработке события примет участие и наш созданный выше обработчик.

Смотри сорсы БМакса. Ничего сложного нет. =)
Ужас! Вот честно! Не легче ли:
Type TState Abstract
   Global 
Current:TState
   Method Update
() Abstract
   
Method Draw() Abstract
EndType

TState
.Current = New TGameState

Repeat
   TState
.Current.Update()
   
TState.Current.Draw()
   
Flip()
Until Keyhit(Key_Escape)



Type GameState Extends TState
   Field PlayerName
$ = "LoL"   

   
Method Update()
   
EndMethod

   Method Draw
()
    
DrawText("Player name: "+PlayerName,0,0)
   
EndMethod
EndType

Type GameOverState 
Extends TState
   Method Update
()
   
EndMethod

   Method Draw
()
    
DrawText("Nice try, ass hole!",0,0)
   
EndMethod
EndType 
Нужно ещё добавить Init() и Destroy() для стейтов и будет ещё лучше.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Randomize за это полезное сообщение:
LLI.T.A.L.K.E.R. (11.03.2011), umnick (11.03.2011)
Старый 11.03.2011, 18:38   #15
Черный крыс
 
Сообщений: n/a
Ответ: Пауза и свет

Сообщение от Randomize Посмотреть сообщение
Ужас! Вот честно! Не легче ли:
Type TState Abstract
   Global 
Current:TState
   Method Update
() Abstract
   
Method Draw() Abstract
EndType
 
TState
.Current = New TGameState
 
Repeat
   TState
.Current.Update()
   
TState.Current.Draw()
   
Flip()
Until Keyhit(Key_Escape)
 
 
 
Type GameState Extends TState
   Field PlayerName
$ = "LoL"   
 
   
Method Update()
   
EndMethod
 
   Method Draw
()
    
DrawText("Player name: "+PlayerName,0,0)
   
EndMethod
EndType
 
Type GameOverState 
Extends TState
   Method Update
()
   
EndMethod
 
   Method Draw
()
    
DrawText("Nice try, ass hole!",0,0)
   
EndMethod
EndType 
Нужно ещё добавить Init() и Destroy() для стейтов и будет ещё лучше.
Хмм....весьма примитивно и снова не гибко.
На самом деле твой метод ужасен.
Зачем плодить отдельные классы на состояния?
Init() и Destroy() для игрового состояния - это вообще бред.
Во вторых при твоем подходе весьма затруднительно будет комбинировать стейты между собой, а тут все просто : CreateEvent(GAME_WORLD_DRAW_ONLY | GAME_PAUSE).Emit() - дали команду движку что приложение находится в паузе. А движок уже сам допиливает этот флаг ( рисовать но не обновлять мир + рисовать и обновлять меню паузы). флаг GAME_PAUSE - отвечает только за отрисовку потемневшего задника + обновление и отрисовку менюхи, а за застывший задний кадр отвечает впередиидущий флаг состояния. На то она и гибкость - что жестко ничего привязывать не надо.
Если тебя испугал тот громозкий код, то там происходит всего-то - инициализация при запуске программы, зато главный цикл - 3 строчки кода. И мне не надо запоминать и где то хранить переменные стэйтов, а вместо этого просто комбинировать 6-7 основных стэйт-флагов. =)

ЗЫ Во всех нормальных программах управление ядром осуществляется через события.
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо за это полезное сообщение:
LLI.T.A.L.K.E.R. (11.03.2011), umnick (11.03.2011)
Ответ


Опции темы

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

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


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


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