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

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

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

PureBasic Мощный кросс-платформенный язык среднего уровня на основе BASIC. Подходит для решения широкого круга задач.

Ответ
 
Опции темы
Старый 21.01.2012, 17:24   #1
ant0N
Бывалый
 
Аватар для ant0N
 
Регистрация: 10.06.2011
Адрес: В горах
Сообщений: 849
Написано 331 полезных сообщений
(для 853 пользователей)
Смех Движение ENTITY

здравствуйте!!! Скажите пожалуйста, знающие люди, как сделать чтобы Entity всегда двигался ко второму Entity.
у меня есть плоскость, на ней расположен куб, при клику мышкой у меня создается сфера, в том месте где я кликнул... Мне нужно чтобы куб всегда двигался к этой сфере по оси X и Z.
Purebasic 4.60
__________________
Абсолютли!
(Offline)
 
Ответить с цитированием
Старый 21.01.2012, 18:39   #2
FireOwl
Бывалый
 
Аватар для FireOwl
 
Регистрация: 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) за шаг.
На следующий шаг цикла опять вычислить вектор (вдруг шар сдвинулся)
и опять сдвигать.
__________________
N"Gasta! Kvata! Kvakis!
Ahkstas so novajxletero (oix jhemile) so Ranetauw.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ant0N (21.01.2012)
Старый 21.01.2012, 18:56   #3
DStalk
Разработчик
 
Аватар для DStalk
 
Регистрация: 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...
__________________
galaxies.su | dstalk.ru
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ant0N (21.01.2012)
Старый 21.01.2012, 19:36   #4
ant0N
Бывалый
 
Аватар для ant0N
 
Регистрация: 10.06.2011
Адрес: В горах
Сообщений: 849
Написано 331 полезных сообщений
(для 853 пользователей)
Ответ: Движение ENTITY

пишет синтаксическая ошибка
distance = Sqr((sX-cX)^2 + (sZ-cZ)^2)
__________________
Абсолютли!
(Offline)
 
Ответить с цитированием
Старый 21.01.2012, 19:41   #5
ant0N
Бывалый
 
Аватар для ant0N
 
Регистрация: 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
DStalk
Разработчик
 
Аватар для DStalk
 
Регистрация: 27.06.2009
Адрес: Рязань-Москва
Сообщений: 471
Написано 401 полезных сообщений
(для 1,072 пользователей)
Ответ: Движение ENTITY

Ага, в пурике не так в степень возводится - можно командой Pow(число,степень), но советуют обычным умножением - быстрее считает.

А насчет MoveEntity, придется наверно двигать отдельно по каждой оси...
__________________
galaxies.su | dstalk.ru
(Offline)
 
Ответить с цитированием
Старый 22.01.2012, 11:52   #7
ant0N
Бывалый
 
Аватар для ant0N
 
Регистрация: 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)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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