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

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

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

FAQ Туториалы и часто задаваемые вопросы

Ответ
 
Опции темы
Старый 20.09.2007, 20:15   #1
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Сообщение Редактор карт

Создание редактора карт(для новичков).
Сейчас я вас научю как создать простой но вполне многофункциональный редактор карт.
Соственно начнем с азов. Напишем инициализацию главного окна:

;Сдесь находятся все глобальные переменные
Global camera
Global world

Graphics3D 1024,768,32,1
SetBuffer BackBuffer()

camera=CreateCamera()
PositionEntity camera,0,5,0

world=CreatePlane()
EntityPickMode world,2

Repeat
RenderWorld
Flip
Until KeyHit(1)
End

Это так сказать заготовка нашего редактора. Сдесь глобально объявлены переменные camera(для камеры соответственно), world(естественно для мира).
Наш редактор будет создавать все объекты на плоскости. У мира я поставил EntityPickMode равным 2 это для того чтобы Pick осуществлялся посредством полигонов.

Поехали дальше. Дальше надо создать тип для объектов на карте, он у нас будет называться MObject. Вот его объявление:

Type MObject
Field Stena
End Type

Этот тип содержит пока единственный параметр - Stena.

Дальше напишем ф-цию создания той самой стены. Вот ее объявление:

Function CreateStena(X#,Y#,Z#,P#,YA#,R#,SX#,SY#,SZ#)
o.MObject=New MObject
o\entity=CreateCube()
PositionEntity o\entity,X#,Y#,Z#
ScaleEntity o\entity,SX#,SY#,SZ#
RotateEntity o\entity,P#,YA#,R#
EntityPickMode o\entity,2
End Function

Эта ф-ция создает новый объект MObject который в свою очередь заполняется, нужными параметрами. У-У-У-Ф... А у функции то параметров не мало. Первые три это координаты в простанстве, вторые три угол наклона по осям XYZ, и последние три это размер стены по XYZ.

А теперь в главном цикле пропишем следующее:

pik=CameraPick(camera,MouseX(),Mouse())
If pik = world Then
If MouseHit(1) Then
CreateStena(PickedX(),PickedY(),PickedZ(),0,0,0,0. 5,2,2)
End If
End If

Этот кусок кода выполняет функцию создания новой стены. Ее позиция будет такой куда вы ткнули мышкой по плоскости.

Ой чуть не забыл. Надо просписать четыре строчки коды для управления движением камеры(эти строчки прописываем в главном цикле):

If KeyDown(200) Then MoveEntity camera,0,0,.1
If KeyDown(20 Then MoveEntity camera,0,0,-.1
If KeyDown(203) Then MoveEntity camera,.1,0,0
If KeyDown(205) Then MoveEntity camera,-.1,0,0

Далее надо еще кое-что ниписать в главном цикле - движение указателя мыши. Естественно пишем(После RenderWorld, но перед Flip):

Text MouseX(),MouseY(),"^"
Вот теперь указатель мыши готов к употреблению .

Дальше самое интересное...

ЗАГРУЗКА И СОХРАНЕНИЕ КАРТЫ.
Ну а теперь напишем две функции - одну для загрузки другую для сохрания.
Сохрание:


Function WriteMap(Path$)
file=WriteFile(Path$)
For m.MObject = Each MObject
WriteFloat file,EntityX(m\entity)
WriteFloat file,EntityY(m\entity)
WriteFloat file,EntityZ(m\entity)
WriteFloat file,EntityPitch(m\entity)
WriteFloat file,EntityYaw(m\entity)
WriteFloat file,EntityRoll(m\entity)
WriteFloat file,MeshWidth(m\entity)
WriteFloat file,MeshHeight(m\entity)
WriteFloat file,MeshDepth(m\entity)
Next

End Function
Загрузки:
Function LoadMap(Path$)
fil=ReadFile(Path$)
;Удаляем старые стены
For m.MObject = each MObject

Next
While Not Eof(file)
X#=ReadFloat(File)
Y#=ReadFloat(File)
Z#=ReadFloat(File)
P#=ReadFloat(File)
YA#=ReadFloat(File)
R#=ReadFloat(File)
SX#=ReadFloat(File)
SY#=ReadFloat(File)
SZ#=ReadFloat(File)
CreateStena(X#,Y#,Z#,P#,YA#,R#,SX#,SY#,SZ#)
Wend
End Function

Ну а затем в цикле пропишем следующие строки кода для загрузки и сохранения карты.

If KeyHit(64) Then WriteMap("map.shm") ;F6
If KeyHit
(65) Then LoadMap("map.shm") ;F7
Продолжение завтра
__________________

(Offline)
 
Ответить с цитированием
Эти 5 пользователя(ей) сказали Спасибо mr.DIMAS за это полезное сообщение:
Android (15.12.2009), Blender (24.01.2010), EvilChaotic (22.07.2009), Gide_ (22.02.2009), Ziro(AL) (09.03.2010)
Старый 20.09.2007, 20:22   #2
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Re: Редактор карт

Нехватает функции управления объектом.. ну разместил ты объект - кубик ... а как повернуть его, растянуть, сжать... удалить, в конце концов...

Кстати, делал уже на подобие редактор свой. если кому надо, могу дать исходник.
(Offline)
 
Ответить с цитированием
Старый 20.09.2007, 20:37   #3
dimanche13
Мастер
 
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений
(для 252 пользователей)
Re: Редактор карт

Мне новичку - ни фига не понятно... я опомниться не успел и вникнуть что к чему, а уже сохранение и загрузка... "помедленней пжлста, я записываю"
(Offline)
 
Ответить с цитированием
Старый 20.09.2007, 20:51   #4
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: Редактор карт

Имхо хорошая тема, но не расскрыл ты темы редактора.
Во первыйх как уже сказали нету модифицирования (редактор - тот что изменяет).
Далее как тоже подметили, нехватка комментов. Т.к. тема для новичков, относительно помменть участки кода.
А вообще нужно развить будет Очень полезно.
(Offline)
 
Ответить с цитированием
Старый 20.09.2007, 22:17   #5
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Re: Редактор карт

Кстати, делал уже на подобие редактор свой. если кому надо, могу дать исходник
.млин е мае. написал что продолжение бует завтра. ну да ладно завтра завтра, пока время есть пишу далее
__________________

(Offline)
 
Ответить с цитированием
Старый 20.09.2007, 22:19   #6
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Re: Редактор карт

а...а.а...А при чем тут мой редактор???
(Offline)
 
Ответить с цитированием
Старый 20.09.2007, 22:24   #7
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Re: Редактор карт

НЕ прычем. просто случайно не ту цитату выбрал
__________________

(Offline)
 
Ответить с цитированием
Старый 20.09.2007, 23:46   #8
NitE
злобный флудер
 
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений
(для 1,476 пользователей)
Re: Редактор карт

тема прикольеная прочитал статью ради интереса и ... ну и все, мне понравилось )) думаю всем кто неумеет будет очень интересно и позновательно ))))
(Offline)
 
Ответить с цитированием
Старый 21.09.2007, 20:53   #9
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Re: Редактор карт

Идем дальше. Сосбсно сейчас мы научимся масштабировать, двигать объекты.
Для этого всего расширяем тип MObject.
Type MObject
Field Entity
Field SX#,SY#,SZ#
Field X#,Y#,Z#
Field Picked
End Type
Все эти обновления нужны для того что я выше перечислил, а параметр Picked нужен для того чтобы проверять выбран ли объект или нет. Едем далее. Создаем ф-цию масштабирования и движения.

Function Deformation()
For m.mobject=Each Mobject
If m\picked=1 Then
If KeyDown(2) Then
ScaleEntity m\entity,MeshWidth(m\entity)+0.01,MeshHeight(m\ent ity),MeshDepth(m\entity)
End If
If KeyDown(3) Then
ScaleEntity m\entity,MeshWidth(m\entity)-0.01,MeshHeight(m\entity),MeshDepth(m\entity)
End If
If KeyDown(4) Then
ScaleEntity m\entity,MeshWidth(m\entity),MeshHeight(m\entity)+ .01,MeshDepth(m\entity)
End If
If KeyDown(5) Then
ScaleEntity m\entity,MeshWidth(m\entity),MeshHeight(m\entity)-.01,MeshDepth(m\entity)
End If
If KeyDown(6) Then
ScaleEntity m\entity,MeshWidth(m\entity),MeshHeight(m\entity), MeshDepth(m\entity)+.01
End If
If KeyDown(7) Then
ScaleEntity m\entity,MeshWidth(m\entity),MeshHeight(m\entity)-.01,MeshDepth(m\entity)-0.01
End If


If KeyDown( Then
PositionEntity m\entity,EntityX(m\entity)+0.01,EntityY(m\entity), EntityZ(m\entity)
End If
If KeyDown(9) Then
PositionEntity m\entity,EntityX(m\entity)-0.01,EntityY(m\entity),EntityZ(m\entity)
End If

If KeyDown(10) Then
PositionEntity m\entity,EntityX(m\entity),EntityY(m\entity)+0.01, EntityZ(m\entity)
End If
If KeyDown(11) Then
PositionEntity m\entity,EntityX(m\entity),EntityY(m\entity)-0.01,EntityZ(m\entity)
End If

If KeyDown(12) Then
PositionEntity m\entity,EntityX(m\entity),EntityY(m\entity),Entit yZ(m\entity)-.01
End If
If KeyDown(13) Then
PositionEntity m\entity,EntityX(m\entity),EntityY(m\entity),Entit yZ(m\entity)+.01
End If
End If
Next

End Function

Вот. Млин правда управление кривее не придумаешь... ну да ладно... сейчас я разъясню усё... короче клавиши наверху(те что от 1-7) управляют масштабированием объекта, а от 7 до = (включительно) передвижение.

Ой ёмаё. Чуть не забыл надо подправить коечто в главном цикле. Вот после этого

pik=CameraPick(camera,MouseX(),Mouse())
If pik = world Then
If MouseHit(1) Then
CreateStena(PickedX(),PickedY(),PickedZ(),0,0,0,0. 5,2,2)
End If
End If

Пишем вот это:

If pik=m\entity then
m\picked=1-m\picked
End if

И в начале цикла пишем:

For m.mobject = Each Mobject

И в конце перед RenderWorld:

Next

Ну вот редактор у нас расширился.
__________________

(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Gide_ (22.02.2009)
Старый 21.09.2007, 20:54   #10
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Re: Редактор карт

Млин тупой смайл кусочек кода испортил
__________________

(Offline)
 
Ответить с цитированием
Старый 21.09.2007, 21:05   #11
Trilliput
Знающий
 
Регистрация: 27.07.2006
Сообщений: 250
Написано 6 полезных сообщений
(для 7 пользователей)
Re: Редактор карт

Ммм.. Выкладывай в конце целый код.
(Offline)
 
Ответить с цитированием
Старый 21.09.2007, 21:14   #12
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Re: Редактор карт

1. как уже сказали, полный код
2. Продолжение будет????
(Offline)
 
Ответить с цитированием
Старый 21.09.2007, 21:14   #13
dimanche13
Мастер
 
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений
(для 252 пользователей)
Re: Редактор карт

Не плохо было б объяснять что мы делаем,и как делаем, а то "напишите так и будет вам счастье"...
(Offline)
 
Ответить с цитированием
Старый 21.09.2007, 21:18   #14
alcoSHoLiK
Дэвелопер
 
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений
(для 110 пользователей)
Re: Редактор карт

mr.DIMAS
Обрамляй код тегом [ code ] [ /code]. Он смайлы режет.
(Offline)
 
Ответить с цитированием
Старый 21.09.2007, 21:26   #15
Trilliput
Знающий
 
Регистрация: 27.07.2006
Сообщений: 250
Написано 6 полезных сообщений
(для 7 пользователей)
Re: Редактор карт

Просьба: если и пишеш туториал по редакторам, то пытайся учить тому как сделать нормальный редактор (например управление при помощи клавиш как то странно, мне оно кажется скорее дублирующим. Лучше использовать для маштабирования, перемещения и тп мышку).
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Посоветуйте игру(РПГ) Yalenz Болтовня 63 10.06.2009 16:19
Редактор карт для игр на движке irrlicht Dronchik 3D Моделирование 5 20.01.2008 18:33
Как сделать игру? alcoSHoLiK FAQ 10 26.08.2007 01:22
Редактор 2D карт. Enemy Болтовня 8 05.01.2007 09:33
Редактор карт vadim2 3D-программирование 7 28.07.2006 18:28


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


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