ЗелёныйГоблин | Дата: Суббота, 28 Июля 2012, 17:05 | Сообщение # 1 |
In-Games
Сейчас нет на сайте
| Goblin Note(Тетрадка Гоблина) - это серия уроков по одному из лёгких движков Blitz3D. Скажу сразу, до гуру блитза я ещё недоплыл. Но я хочу научить других людей тому что научился, только в наиболее понятной подаче. Пытаться научить Вас с нуля я не буду, этого добра и так навалом. Напишут один из серии уроков с хеллоу ворлдом, а дальше шиш. Я же начну сразу с середины так как не факт что уроков будет больше чем один, а так хоть польза будет. Хватит предисловия, начнём.
Так, тема нашего урока - взаимодействие с предметами. Например, Ваш герой должен нажать на кнопку что-бы открылась дверь, а Вы как назло незнаете как сделать так что-бы её можно было нажать на определенном растоянии и только если камера будет наведена на кнопку. Что же делать? В этом уроке мы и разберём создания такого взаимодействия на примере кнопки для открытия двери. Всё, наконец то приступим к программированию. Для начала сделаем основу, а именно: 1. ГГ-Куб х1 - но камера от первого лица, следовательно куб мы не увидим. 2. Мир-Плэйн х1 - земля. 3. Кнопка-Куб х1 - поставим неподалёку от игрока. 4. Обьект-Куб х1 - будет прятаться при нажатии на кнопку. Мне бы хотелось что-бы всё вышеперечисленное Вы написали сами(это не так уж и сложно), но учитывая лень русского народа(трудоголикам и не русским прошу не обижаться) всё же приведу код основы:
Code Graphics3D 800,600,32 SetBuffer BackBuffer() ;Создание обьектов
;Назначим постоянный свет AmbientLight 255,255,255
;Создадим игрока Cube=CreateCube() PositionEntity Cube,0,0,14 ;Создадим камеру Cam=CreateCamera(Cube)
;Создадим небо и землю World=CreatePlane() World_Tex=LoadTexture("PlaneTex.png") ScaleTexture World_Tex,3,3 EntityTexture World,World_Tex PositionEntity World,0,-5,0
;Создадим кнопку Button=CreateCube() ScaleEntity Button,0.5,0.5,0.5 PositionEntity Button,2,0,4 ;Создаим обьект который прячется кнопкой Cube2=CreateCube() PositionEntity Cube2,5,-5,4
;Главный цикл Repeat If KeyDown(17) MoveEntity Cube,0,0,0.5 If KeyDown(30) TurnEntity Cube,0,2,0 If KeyDown(31) MoveEntity Cube,0,0,-0.5 If KeyDown(32) TurnEntity Cube,0,-2,0 RenderWorld() Flip Until KeyHit(1) Это наша основа, смею напомнить что текстуру PlaneTex.png нарисуйте сами и положите в папку с кодом. Теперь нам нужно указать режим взаимодействия обьекта с мышью и установить имя обьекта. Пишем после PositionEntity Button: Code EntityPickMode Button,2 NameEntity Button,"btn"
Первая команда указывает режим взаимодействия обьекта с мышью. Первый аргумент - обьект, второй аругмент режим взаимодействия. Их всего 4: 0: не проверяется (по умолчанию) 1: Сфера (используется EntityRadius) 2: Полигоны 3: Куб (используется EntityBox) Мы использовали режим 2, что-бы особо не заморачиваться. Вторая команда присваивает обьекту Cube2 имя "Cube". Это будет нужно для проверки указывает ли мышь на обьект Cube2 или нет. Пол дела сделано, теперь сразу после управление в главном цикле пишем: Code If MouseHit(1) = True ; Проверяет нажата ли левая кнопка мыши, если нажата то продолжает испольнять код ent = CameraPick(cam,MouseX(),MouseY()) ; присваивает переменной ent обьект который был выделен курсором в момент нажатия на ЛКМ If ent ; проверяет, существует ли вообще этот обьект If EntityDistance(ent, cube) < 5 ; проверяет расстояние обьекта ent до игрока, если оно меньше 5 то продолжает name$ = EntityName(ent); проверяет имя обьекта ent If name = "btn" HideEntity Cube2 ; если имя обьекта "btn"(наша кнопка) то скрывает обьект Cube2(который создан для того что-бы его скрыли) EndIf EndIf EndIf Дабы Вы поняли код расположенный выше я прокоментировал каждую его строчку. Для особо ленивых, весь код:
Code ;Назначим постоянный свет AmbientLight 255,255,255
;Создадим игрока Cube=CreateCube() PositionEntity Cube,0,0,14 ;Создадим камеру Cam=CreateCamera(Cube)
;Создадим небо и землю World=CreatePlane() World_Tex=LoadTexture("PlaneTex.png") ScaleTexture World_Tex,3,3 EntityTexture World,World_Tex PositionEntity World,0,-5,0 EntityPickMode Button,2 NameEntity Button,"btn" ;Создадим кнопку Button=CreateCube() ScaleEntity Button,0.5,0.5,0.5 PositionEntity Button,2,0,4
;Создаим обьект который прячется кнопкой Cube2=CreateCube() PositionEntity Cube2,5,-5,4
;Main Loop Repeat If KeyDown(17) MoveEntity Cube,0,0,0.5 If KeyDown(30) TurnEntity Cube,0,2,0 If KeyDown(31) MoveEntity Cube,0,0,-0.5 If KeyDown(32) TurnEntity Cube,0,-2,0 If MouseHit(1) = True ent = CameraPick(cam,MouseX(),MouseY()) If ent If EntityDistance(ent, cube) < 5 name$ = EntityName(ent) If name = "btn" HideEntity Cube2 EndIf EndIf EndIf RenderWorld() Flip Until KeyHit(1) Готово. Осмысливаем мой небольшой урок в голове и портируем его в свой проект. Теперь герой всё таки сможет открыть ту злую дверь. Все мои недочёты и пожелания пишите сюда, буду исправляться.Добавлено (28.07.2012, 17:05) --------------------------------------------- Если никто не пишет о недочетах то значит всё идеально? А если даже я так не думаю, то значит мои труды полная ересь?
Bakuman Death Note The Future Diary Базовые знания- это умение создать хоть что-то на экране, находящееся в движении по чему-то, и соприкасающееся с чем-то. (Основы ЯП)©Умный игродел
|
|
| |
LDMT | Дата: Воскресенье, 29 Июля 2012, 11:50 | Сообщение # 2 |
почетный гость
Сейчас нет на сайте
| вот тебе урок от гуру блица :-)
http://myblitz3d.narod.ru/modexlesson.jpg
|
|
| |
ЗелёныйГоблин | Дата: Воскресенье, 29 Июля 2012, 12:12 | Сообщение # 3 |
In-Games
Сейчас нет на сайте
| Quote (LDMT) вот тебе урок от гуру блица :-) Что ты мне хотел этим сказать? Мне больше интересно твоё мнение о уроке. Кстати скоро планирую игру сделать на блице, как раз модекс пригодиться. Спасибо за урок =)
Bakuman Death Note The Future Diary Базовые знания- это умение создать хоть что-то на экране, находящееся в движении по чему-то, и соприкасающееся с чем-то. (Основы ЯП)©Умный игродел
|
|
| |