Пятница, 29 Марта 2024, 15:45

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » Basic » Goblin Note Уроки по Blitz3D
Goblin Note Уроки по Blitz3D
ЗелёныйГоблинДата: Суббота, 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
Базовые знания- это умение создать хоть что-то на экране, находящееся в движении по чему-то, и соприкасающееся с чем-то. (Основы ЯП)©Умный игродел
shizofrenДата: Суббота, 02 Февраля 2013, 13:59 | Сообщение # 4
Starting MS-DOS...
Сейчас нет на сайте
Урок существенно помог в создании инвентаря.

Моя команда
Форум игроделов » Программирование » Basic » Goblin Note Уроки по Blitz3D
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг