forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   PureBasic (http://forum.boolean.name/forumdisplay.php?f=90)
-   -   Движение ENTITY (http://forum.boolean.name/showthread.php?t=16216)

ant0N 21.01.2012 17:24

Движение ENTITY
 
здравствуйте!!! Скажите пожалуйста, знающие люди, как сделать чтобы Entity всегда двигался ко второму Entity.
у меня есть плоскость, на ней расположен куб, при клику мышкой у меня создается сфера, в том месте где я кликнул... Мне нужно чтобы куб всегда двигался к этой сфере по оси X и Z.
Purebasic 4.60

FireOwl 21.01.2012 18:39

Ответ: Движение 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) за шаг.
На следующий шаг цикла опять вычислить вектор (вдруг шар сдвинулся)
и опять сдвигать.

DStalk 21.01.2012 18:56

Ответ: Движение 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...

ant0N 21.01.2012 19:36

Ответ: Движение ENTITY
 
пишет синтаксическая ошибка
Код:

distance = Sqr((sX-cX)^2 + (sZ-cZ)^2)

ant0N 21.01.2012 19:41

Ответ: Движение ENTITY
 
Цитата:

Сообщение от Dstalk (Сообщение 217408)
Код:

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, т.е в твоем случае куб будет все время двигаться в одну сторону не зависимо от того куда он повернут

DStalk 21.01.2012 20:57

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

А насчет MoveEntity, придется наверно двигать отдельно по каждой оси...

ant0N 22.01.2012 11:52

Ответ: Движение 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
Все это мне нужно для создания игры. Хочу сделать на Пурике примитивную стратегию


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

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