forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Выделить и переместить объект мышкой! (http://forum.boolean.name/showthread.php?t=7229)

ELIAS 24.10.2008 22:28

Выделить и переместить объект мышкой!
 
Всем привет;)
Собираюсь делать на блитце редактор карт для своей игры. Его образец в принципе у меня уже есть, сделан на дарке про... Вся задача лишь в том чтобы переписать его на блитц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


Isono 25.10.2008 10:12

Ответ: Выделить и переместить объект мышкой!
 
Вопрос такой, знаешь ли ты Blitz 3D или не знаешь или совсем новичек?)

ELIAS 25.10.2008 13:09

Ответ: Выделить и переместить объект мышкой!
 
Цитата:

Вопрос такой, знаешь ли ты Blitz 3D или не знаешь или совсем новичек?)
Ну вообще полтора месяца уже на блитце сижу... Основы конечно знаю!
Вообще у меня огромный опыт программирования на Dark Basic Pro...Но он мне последнее время разонравился, вот и решил на блитц пересесть.
Я на Дарке уж половину игры сделал! Достаточно сложной шароварки...

Кстати никто не знает что с gamesanatomy случилось??? Или это только у меня форум не грузится???:''(( Такой хороший сайт...

ABTOMAT 25.10.2008 13:41

Ответ: Выделить и переместить объект мышкой!
 
Цитата:

Там самое трудное функция drag_object
MouseX
MouseY
MouseXSpeed
MouseYSpeed
CameraPick
PickedX
PickedY
PickedZ
PickedEntity
Type

тебе в помощь

Isono 25.10.2008 13:43

Ответ: Выделить и переместить объект мышкой!
 
Молодца что перешел на Blitz тока тут команды длиннее, но вообщем лучше...
Я тоже начинал с Dark Basic года 3 назад... С него легче переходить.
Команды вообщем схожие, думаю сам сообразишь, а про что игра если не секрет?)

ELIAS 25.10.2008 13:49

Ответ: Выделить и переместить объект мышкой!
 
Игра жанра 3dаркада-платформер с мультяшной графикой...Ну есль это ни о чем не говорит, то самая наверно популярная игра этого жанра SantaClausinTrouble... :)

Isono 25.10.2008 13:54

Ответ: Выделить и переместить объект мышкой!
 
Клёва, ну удачи, давай изучай BLitz глубже;)

ELIAS 25.10.2008 14:24

Ответ: Выделить и переместить объект мышкой!
 
Спасибо!;) Стараюсь, только вот щас с физикой ещё разбираюсь с Newton... Не получается сделать летающие платформы...Трудно...Да вот ещё вот эта проблема...Ну надо думать...Всё непросто:rolleyes:

Isono 25.10.2008 18:59

Ответ: Выделить и переместить объект мышкой!
 
Юзай лучше действительно, PhysХ, он на много лучше, а ключики можно и спросить(например где нибудь прямо здесь в личке если ты канешна из России)))):-D


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot