|
PureBasic Мощный кросс-платформенный язык среднего уровня на основе BASIC. Подходит для решения широкого круга задач. |
21.01.2012, 17:24
|
#1
|
Бывалый
Регистрация: 10.06.2011
Адрес: В горах
Сообщений: 849
Написано 331 полезных сообщений (для 853 пользователей)
|
Движение ENTITY
здравствуйте!!! Скажите пожалуйста, знающие люди, как сделать чтобы Entity всегда двигался ко второму Entity.
у меня есть плоскость, на ней расположен куб, при клику мышкой у меня создается сфера, в том месте где я кликнул... Мне нужно чтобы куб всегда двигался к этой сфере по оси X и Z.
Purebasic 4.60
__________________
Абсолютли!
|
(Offline)
|
|
21.01.2012, 18:39
|
#2
|
Бывалый
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений (для 1,836 пользователей)
|
Ответ: Движение ENTITY
Ну, я PureBasic давно учил уже не помню, но, чисто теоретически, надо
постоянно обновлять положение куба в главном цикле, и двигать:
x1,y1 - куб
x2,y2 - сфера
x=(x1-x2) (разности координат)
y=(y1-y2)
d=sqrt(x*x+y*y) (расстояние между сферой и кубом)
nx=x/d (нормализованый вектор, для движения куба)
ny=y/d
И сдвигать куб на (nx*speed, ny*speed) за шаг.
На следующий шаг цикла опять вычислить вектор (вдруг шар сдвинулся)
и опять сдвигать.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
21.01.2012, 18:56
|
#3
|
Разработчик
Регистрация: 27.06.2009
Адрес: Рязань-Москва
Сообщений: 471
Написано 401 полезных сообщений (для 1,072 пользователей)
|
Ответ: Движение ENTITY
sX=EntityX(#Sphere):sZ=EntityZ(#Sphere)
cX=EntityX(#Cube):cZ=EntityZ(#Cube)
distance = SQR((sX-cX)^2 + (sZ-cZ)^2)
if distance>2 then EntityLookAt(#Cube, sX, 0, sZ):MoveEntity(#Cube, 0, 0, 1)
Куб всегда обращен к сфере и движется вперед, если расстояние между ними больше 2...
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
21.01.2012, 19:36
|
#4
|
Бывалый
Регистрация: 10.06.2011
Адрес: В горах
Сообщений: 849
Написано 331 полезных сообщений (для 853 пользователей)
|
Ответ: Движение ENTITY
пишет синтаксическая ошибка
distance = Sqr((sX-cX)^2 + (sZ-cZ)^2)
__________________
Абсолютли!
|
(Offline)
|
|
21.01.2012, 19:41
|
#5
|
Бывалый
Регистрация: 10.06.2011
Адрес: В горах
Сообщений: 849
Написано 331 полезных сообщений (для 853 пользователей)
|
Ответ: Движение ENTITY
Сообщение от Dstalk
sX=EntityX(#Sphere):sZ=EntityZ(#Sphere)
cX=EntityX(#Cube):cZ=EntityZ(#Cube)
distance = SQR((sX-cX)^2 + (sZ-cZ)^2)
if distance>2 then EntityLookAt(#Cube, sX, 0, sZ):MoveEntity(#Cube, 0, 0, 1)
Куб всегда обращен к сфере и движется вперед, если расстояние между ними больше 2...
|
Кстати, в вурике MoveEntity работает как в Blitz3d TranslateEntity, т.е в твоем случае куб будет все время двигаться в одну сторону не зависимо от того куда он повернут
__________________
Абсолютли!
|
(Offline)
|
|
21.01.2012, 20:57
|
#6
|
Разработчик
Регистрация: 27.06.2009
Адрес: Рязань-Москва
Сообщений: 471
Написано 401 полезных сообщений (для 1,072 пользователей)
|
Ответ: Движение ENTITY
Ага, в пурике не так в степень возводится - можно командой Pow(число,степень), но советуют обычным умножением - быстрее считает.
А насчет MoveEntity, придется наверно двигать отдельно по каждой оси...
|
(Offline)
|
|
22.01.2012, 11:52
|
#7
|
Бывалый
Регистрация: 10.06.2011
Адрес: В горах
Сообщений: 849
Написано 331 полезных сообщений (для 853 пользователей)
|
Ответ: Движение ENTITY
Всем спасибо за помощь, самый полезный совет мне дали на другом форуме
нужно было так
;Движение к кубу
IF EntityX(#cube)<EntityX(#sphere)
EntityLocate(#cube, EntityX(#cube)+0.1,EntityY(#cube),EntityZ(#cube))
EndIf
IF EntityX(#cube)>EntityX(#sphere)
EntityLocate(#cube, EntityX(#cube)-0.1,EntityY(#cube),EntityZ(#cube))
EndIf
IF EntityZ(#cube)>EntityZ(#sphere)
EntityLocate(#cube, EntityX(#cube),EntityY(#cube),EntityZ(#cube)-0.1)
EndIf
IF EntityZ(#cube)<EntityZ(#sphere)
EntityLocate(#cube, EntityX(#cube),EntityY(#cube),EntityZ(#cube)+0.1)
EndIf
P.S
Все это мне нужно для создания игры. Хочу сделать на Пурике примитивную стратегию
__________________
Абсолютли!
Последний раз редактировалось ant0N, 22.01.2012 в 12:57.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:27.
|