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

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

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

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 07.05.2007, 02:04   #1
WaReZ_MEN
Модератор
 
Регистрация: 20.06.2006
Сообщений: 363
Написано 24 полезных сообщений
(для 44 пользователей)
Перемещени объектов

Перемещени объектов с помощью мыши в 3д стратегий... как лючше сделать? кто подскажет? (интересуют плавныфй паворот и непосредствено анимация движения) Просьба не писать что то типа береш угол поварачиваеи и перемещаеш... Хочется поподробнеи так как пытался сделать сам получается не очень...
(Offline)
 
Ответить с цитированием
Старый 07.05.2007, 02:22   #2
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Re: Перемещени объектов

WareZ_MEN, а ты чо за стратегию пишеш? мож лучше к нам присоеденишся, а?
насчет угла:
скорее всего тебе нужен плавный поворот тока вокруг оси Y. Имеем два объекта ent1,ent2. ent1 нужно плавно повернуть на ent2.
1. Определяем разность углов, командой DeltaYaw, синтаксис такой dy=deltayaw(ent1,ent2), возвращает угол, на который надо повернуть объект ent1, чтобы он стал "смотреть" на объект ent2.
2. Собственно поварачиваем объект на некоторую часть етого значения, например TurnEntity ent1,0,deltaYaw(ent1,ent2)*0.1,0.
3. Возможно надо поварачивать объект по другому (РТС как - никак), т.е. чтобы объект поварачивался на нное число градусов пока не станет смотреть на ent2, для етого мы делаем так:
spd - скорость с которой крутится объект, тогда
if abs(deltayaw(ent1,ent2))>spd ; если объект повернут на угол, больше предельной скорости вращения
turnentity ent1,0,sgn(deltayaw(ent1,ent2))*spd,0
;sgn - возвращает знак аргумента, т.е. положительное число вернет 1, отрицательное -1, а ноль вернет 0.
else
turnentity ent1,0,deltayaw(ent1,ent2),0
; повернем наш объек прям на тот
endif

вроде все, могу ошибаться в команде sgn, возможно она пишется как sign.

по поводу перемещения - MoveEntity. Двигать скорее всего придется тогда и только тогда, когда етот самый результат (DeltaYaw), меньше определенного значения (45 например), чтоб объект не пытался уехать назад.
(Offline)
 
Ответить с цитированием
Старый 07.05.2007, 03:26   #3
WaReZ_MEN
Модератор
 
Регистрация: 20.06.2006
Сообщений: 363
Написано 24 полезных сообщений
(для 44 пользователей)
Re: Перемещени объектов

HolyDel спасибо за предложение Вынужден отказатся Я видал эту функция у вас в проекте Вот пытался ей воспользоватся, но получается фигна какая то обект все врема поварацивается не лицом а задом
до тех пор пока яне ставлю в dy=deltayaw(ent1,ent2) не ставлю dy=-deltayaw(ent1,ent2). Но тогда получается что анемация не останавливается.
TurnSelectUnits() я вызываю в основном цикле...
....
 Type Obj
	 Field ss 
	 Field Selected 
	 Field Piv
	 Field K	
 End Type
....
s.Obj=New Obj
s\ss =LoadAnimMesh("Data\Models\Units\WorkerGo.b3d");
ScaleEntity s\ss,.006,.006,.006
LoadAnimSeq s\ss,"Data\Models\Units\WorkerSkeletGO.b3d"
s\Selected=True
s\Piv=CreatePivot()
s\k=0
PositionEntity s\piv,5,2,5
PositionEntity s\ss,5,2,5
....
Function MouseHitMap(I,J)
 Map(I,J)=1
 s.Obj=First Obj
 PositionEntity s\piv,(I*1),1,(J*1)
End Function

Function TurnSelectUnits()
   For s.Obj=Each  Obj
       	If s\Selected=True Then
            If s\K=0 Then s\K=1    		             
            yaw1=PointEntityYaw(s\ss,s\Piv,1)
            If  Int(yaw1)<>0 And AnimSeq=0       
                If s\K=1 
                   Animate s\ss,1,.2,1,0                 
                   s\K=2
                EndIf              
            EndIf  
            If  Abs(yaw1)< 1 			          
                S\k=0
                Animate s\ss,0,0,0,0
            EndIf  
   	    EndIf
   Next   
End Function


Function PointEntityYaw(ent1,ent2,speedy#=1) ;Плавно поворачивает один объект на другой только по оси Y
	dy#=DeltaYaw(ent1,ent2)
	If Abs(dy#)>speedy# Then TurnEntity ent1,0,speedy#*Sgn(dy),0,1 Else TurnEntity ent1,0,dy#,0,1
 	Return dy
End Function
(Offline)
 
Ответить с цитированием
Старый 07.05.2007, 21:01   #4
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Re: Перемещени объектов

попробуй :
If Abs(dy#)>speedy# Then TurnEntity ent1,0,speedy#*Sgn(-dy),0,1 Else TurnEntity ent1,0,-dy#,0,1
(Offline)
 
Ответить с цитированием
Старый 08.05.2007, 01:40   #5
WaReZ_MEN
Модератор
 
Регистрация: 20.06.2006
Сообщений: 363
Написано 24 полезных сообщений
(для 44 пользователей)
Re: Перемещени объектов

HolyDel вообще разницы нет где я минус поставлю я писал о нем выше... Да поварачивается нормально но анимация не останавливается... тоесть не срабатывает условие
         .....
           Global yaw1
         ....
           yaw1=PointEntityYaw(s\ss,s\Piv,1)
            If  Abs(yaw1)< 1           
                S\k=0
                Animate s\ss,0,0,0,0
            EndIf
Может есть еще предложения?
(Offline)
 
Ответить с цитированием
Старый 08.05.2007, 01:53   #6
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Re: Перемещени объектов

да, сорри за дезу, чо то я ступил.
посмотри, чо ф-ия возвращает, и уже на основе этого ставь условие.
возможно так if abs(yaw-180)<2 , или чо то в етом роде.
кстати, а поворачивается объект нормально? туда куда надо?

ЗЫ. в WT они поччему то крутятся куда надо.
(Offline)
 
Ответить с цитированием
Старый 08.05.2007, 02:31   #7
WaReZ_MEN
Модератор
 
Регистрация: 20.06.2006
Сообщений: 363
Написано 24 полезных сообщений
(для 44 пользователей)
Re: Перемещени объектов

Да поварачивается туда куда нужно а что функция возвращает понять не могу как то страно выводится будто 2 значания меняются очень быстро вроде как -178 и 180 чета такое носложно сказать наверняка...
if abs(yaw-180)<2 не помогло
(Offline)
 
Ответить с цитированием
Старый 08.05.2007, 02:41   #8
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Re: Перемещени объектов

if abs(abs(yaw)-180)<3
(Offline)
 
Ответить с цитированием
Старый 08.05.2007, 02:45   #9
WaReZ_MEN
Модератор
 
Регистрация: 20.06.2006
Сообщений: 363
Написано 24 полезных сообщений
(для 44 пользователей)
Re: Перемещени объектов

В серавно... вот ели минус убрать то останавливается но поварачивается задом...
(Offline)
 
Ответить с цитированием
Старый 08.05.2007, 02:51   #10
WaReZ_MEN
Модератор
 
Регистрация: 20.06.2006
Сообщений: 363
Написано 24 полезных сообщений
(для 44 пользователей)
Re: Перемещени объектов

Сори затупил пипец..... все разобрался
я if abs(abs(yaw)-180)<3 я скопировал твою строчку а переменую не переименовал yaw у меня то yaw1 Спасибо за помощь!
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выделение объектов. Delta_Q 3D-программирование 3 01.10.2007 03:55
Множество объектов Taugeshtu 3D-программирование 10 31.07.2007 10:27
Вхождения объектов Inrio 3D-программирование 10 01.07.2007 08:34
Вычитание объектов voron 3D-программирование 2 19.10.2006 06:20
Шлейф для объектов SubZer0 Полезные функции 10 10.10.2005 20:23


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


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