|
24.10.2008, 22:28
|
#1
|
Знающий
Регистрация: 31.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений (для 6 пользователей)
|
Выделить и переместить объект мышкой!
Всем привет
Собираюсь делать на блитце редактор карт для своей игры. Его образец в принципе у меня уже есть, сделан на дарке про... Вся задача лишь в том чтобы переписать его на блитц3д)))
Но сразу же столкнулся с проблемой...Не могу сделать алгоритм для выделения и перемещения и вращения объекта мышкой... На дарке с этим проблем не было, так как этот код был в хелпе!
чтобы было понятно о чем идёт речь можно скачать отсюда примерчик Скачать PMforForum.rar с WebFile.RU
900 кб.
Вообще код достаточно непростой, по крайней мере для меня) Именно код перемещения и вращения мышью...Всё остальное то в этом примере я сам писал...
Ну вот, кто нить знает как забабацать это в блитце??? Желательно кодом Вот везде есть этот пример для выделения объекта мышью...Но перемещения и вращения я ещё не встречал... Надеюсь на Вашу помощь
Вот кстати код уж выкину заодно:
Ну написан на дарке...но с комментами...Там самое трудное функция drag_object... Именно её мне и надо но в блитц!
Rem Выбираем объект
Rem Создан: 14/07/2003 18:54:11
rem Запуск приложения
sync on : sync rate 60
rem Создаем пол
make object plain 1,300,300
position object 1,0,-50,200
xrotate object 1,270
rem Создаем объект, который будем тащить
make object cube 999, 50
hide object 999
make object cube 2,100
position object 2, 0,0,200
make object Sphere 3,100
position object 3, 0,0,200
rem Устанавливаем камеру и свет
set point light 0,-100,500,-100
position camera -200,0,-200
point camera 0,0,0
rem Основной цикл
do
If keystate(15)=1
Wait 400
If Tab = 0
Tab =1
else
Tab = 0
endif
endif
rem Вызываем подпрограмму, чтобы тащить объект
gosub _drag_object
rem Подсказка пользователю
center text 320,20,"Щелкните на объекте и удерживайте кнопку мыши, чтобы тащить объект."
center text 320,40,"Вращение по правой кнопке мыши."
center text 320,60,"Жмите TAB для включения режима управления камерой! Управляйте клавишами стрелками!)))"
center text 320,80,"Жмите ещё раз TAB для выхода из режима управления камерой"
center text 320,100,"Используйте колёсико мыши для приближения\удаления"
rem Обновляем экран
sync
rem Конец цикла
loop
_drag_object:
if mouseclick()=0 then pickmode=0 : cursorobj=0
mclick=mouseclick()
if mclick>0
if pickmode=0
cursorobj=pick object(mousex(),mousey(),2,10)
if cursorobj>0
pickmode=mclick
pickdistance#=get pick distance()
pickfromx#=get pick vector x()
pickfromy#=get pick vector y()
pickfromz#=get pick vector z()
if pickmode=1
objx#=object position x(cursorobj)
objy#=object position y(cursorobj)
objz#=object position z(cursorobj)
else
objx#=object angle x(cursorobj)
objy#=object angle y(cursorobj)
objz#=object angle z(cursorobj)
pickdiffx#=mousemovey() : pickdiffx#=0
pickdiffy#=mousemovex() : pickdiffy#=0
endif
else
highlightobj=0
endif
endif
if pickmode>0
if pickmode=1
pick screen mousex(),mousey(),pickdistance#
picktox#=get pick vector x()
picktoy#=get pick vector y()
picktoz#=get pick vector z()
pickdiffx#=picktox#-pickfromx#
pickdiffy#=picktoy#-pickfromy#
pickdiffz#=picktoz#-pickfromz#
grid=0
if grid=1
pickdiffx#=int(pickdiffx#/5)*5
pickdiffy#=int(pickdiffy#/5)*5
pickdiffz#=int(pickdiffz#/5)*5
endif
position object cursorobj,objx#+pickdiffx#,objy#+pickdiffy#,objz#+pickdiffz#
else
pickdiffx#=pickdiffx#+mousemovey()
pickdiffy#=pickdiffy#+mousemovex()
grid=0
if grid=1
tpickdiffx#=int(pickdiffx#/22.5)*22.5
tpickdiffy#=int(pickdiffy#/22.5)*22.5
else
tpickdiffx#=pickdiffx#
tpickdiffy#=pickdiffy#
endif
rotate object cursorobj,wrapvalue(objx#-tpickdiffx#),wrapvalue(objy#-tpickdiffy#),objz#
endif
endif
endif
`Движение камеры
If Tab=1
crs#=0.2
am#=mousemovez()
r#=r#+am#
if r#<50 then r#=50
Y#=Y#+ mousemovez()
if upkey()=1
move camera 1
Y# = Newxvalue(Y#,Wrapvalue(Camera Angle z()),camspeDirectPoint#)
X# = Newxvalue(X#,Wrapvalue(Camera Angle Y()),camspeDirectPoint#)
Z# = Newzvalue(Z#,Wrapvalue(Camera Angle Y()),camspeDirectPoint#)
endif
if downkey()=1
X# = Newxvalue(X#,Wrapvalue(Camera Angle Y()),-camspeDirectPoint#)
Z# = Newzvalue(Z#,Wrapvalue(Camera Angle Y()),-camspeDirectPoint#)
endif
if leftkey()=1
X# = Newxvalue(X#,Wrapvalue(Camera Angle Y()-90),camspeDirectPoint#)
Z# = Newzvalue(Z#,Wrapvalue(Camera Angle Y()-90),camspeDirectPoint#)
endif
if rightkey()=1
X# = Newxvalue(X#,Wrapvalue(Camera Angle Y()+90),camspeDirectPoint#)
Z# = Newzvalue(Z#,Wrapvalue(Camera Angle Y()+90),camspeDirectPoint#)
endif
if keystate(210)=1
Y# = Y# + coef#
endif
if keystate(211)=1
Y# = Y# - coef#
endif
position object 999,X#,Y#,Z#
rem Эти строки кода объяснить сложно: они управляют камерой:)
inc a#,crs#*mousemovey()
inc b#,crs#*mousemovex()
e#=object position x(999)+r#*cos(270-b#)*cos(a#)
d#=object position y(999)+r#*sin(a#)
f#=object position z(999)+r#*sin(270-b#)*cos(a#)
position camera e#,d#,f#
point camera object position x(999),object position y(999),object position z(999)
endif
`Приближение и удаление камеры
camspeDirectPoint#=10
crs#=0.2
am#=mousemovez()
r#=r#+am#
if r#<50 then r#=50
Y#=Y#+ mousemovez()
position object 999,X#,Y#,Z#
e#=object position x(999)+r#*cos(270-b#)*cos(a#)
d#=object position y(999)+r#*sin(a#)
f#=object position z(999)+r#*sin(270-b#)*cos(a#)
position camera e#,d#,f#
point camera object position x(999),object position y(999),object position z(999)
return
|
(Offline)
|
|
25.10.2008, 10:12
|
#2
|
Оператор ЭВМ
Регистрация: 25.08.2008
Сообщений: 29
Написано 3 полезных сообщений (для 4 пользователей)
|
Ответ: Выделить и переместить объект мышкой!
Вопрос такой, знаешь ли ты Blitz 3D или не знаешь или совсем новичек?)
|
(Offline)
|
|
25.10.2008, 13:09
|
#3
|
Знающий
Регистрация: 31.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений (для 6 пользователей)
|
Ответ: Выделить и переместить объект мышкой!
Вопрос такой, знаешь ли ты Blitz 3D или не знаешь или совсем новичек?)
|
Ну вообще полтора месяца уже на блитце сижу... Основы конечно знаю!
Вообще у меня огромный опыт программирования на Dark Basic Pro...Но он мне последнее время разонравился, вот и решил на блитц пересесть.
Я на Дарке уж половину игры сделал! Достаточно сложной шароварки...
Кстати никто не знает что с gamesanatomy случилось??? Или это только у меня форум не грузится??? Такой хороший сайт...
|
(Offline)
|
|
25.10.2008, 13:41
|
#4
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Выделить и переместить объект мышкой!
Там самое трудное функция drag_object
|
MouseX
MouseY
MouseXSpeed
MouseYSpeed
CameraPick
PickedX
PickedY
PickedZ
PickedEntity
Type
тебе в помощь
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
25.10.2008, 13:43
|
#5
|
Оператор ЭВМ
Регистрация: 25.08.2008
Сообщений: 29
Написано 3 полезных сообщений (для 4 пользователей)
|
Ответ: Выделить и переместить объект мышкой!
Молодца что перешел на Blitz тока тут команды длиннее, но вообщем лучше...
Я тоже начинал с Dark Basic года 3 назад... С него легче переходить.
Команды вообщем схожие, думаю сам сообразишь, а про что игра если не секрет?)
|
(Offline)
|
|
25.10.2008, 13:49
|
#6
|
Знающий
Регистрация: 31.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений (для 6 пользователей)
|
Ответ: Выделить и переместить объект мышкой!
Игра жанра 3dаркада-платформер с мультяшной графикой...Ну есль это ни о чем не говорит, то самая наверно популярная игра этого жанра SantaClausinTrouble...
|
(Offline)
|
|
25.10.2008, 13:54
|
#7
|
Оператор ЭВМ
Регистрация: 25.08.2008
Сообщений: 29
Написано 3 полезных сообщений (для 4 пользователей)
|
Ответ: Выделить и переместить объект мышкой!
Клёва, ну удачи, давай изучай BLitz глубже
|
(Offline)
|
|
25.10.2008, 14:24
|
#8
|
Знающий
Регистрация: 31.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений (для 6 пользователей)
|
Ответ: Выделить и переместить объект мышкой!
Спасибо! Стараюсь, только вот щас с физикой ещё разбираюсь с Newton... Не получается сделать летающие платформы...Трудно...Да вот ещё вот эта проблема...Ну надо думать...Всё непросто
|
(Offline)
|
|
25.10.2008, 18:59
|
#9
|
Оператор ЭВМ
Регистрация: 25.08.2008
Сообщений: 29
Написано 3 полезных сообщений (для 4 пользователей)
|
Ответ: Выделить и переместить объект мышкой!
Юзай лучше действительно, PhysХ, он на много лучше, а ключики можно и спросить(например где нибудь прямо здесь в личке если ты канешна из России))))
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 18:52.
|