PDA

Просмотр полной версии : [Вопрос] Вопрос по передвежению объекта



Витёк
21.03.2017, 08:48
Добрый день
С помощью какой формулы можно вычеслить кординаты для передвежение объета по оси
Вот к примеру я создал объект с поворотом 90
CreateObject(18648, object_x, object_y, object_z, 0.0, 0.0, 90.0);
как можно сделать чтобы он двигался строго по 90 градусов или по любому градусу который я ему поставлю

vovandolg
21.03.2017, 19:26
Для начального распознавания стойки объекта:


native GetObjectPos(objectid, &Float:X, &Float:Y, &Float:Z);
native GetObjectRot(objectid, &Float:RotX, &Float:RotY, &Float:RotZ);


Для работы с резким поворотом/передвижением:


native SetObjectPos(objectid, Float:X, Float:Y, Float:Z);
native SetObjectRot(objectid, Float:RotX, Float:RotY, Float:RotZ);


Для работы с регулируемой скоростью поворота/передвижения:


native MoveObject(objectid, Float:X, Float:Y, Float:Z, Float:Speed, Float:RotX = -1000.0, Float:RotY = -1000.0, Float:RotZ = -1000.0);


Дальше мозг напрягай и складывай алгоритм как тебе нужно всё вычислить и настроить))

Витёк
22.03.2017, 03:57
Для начального распознавания стойки объекта:


native GetObjectPos(objectid, &Float:X, &Float:Y, &Float:Z);
native GetObjectRot(objectid, &Float:RotX, &Float:RotY, &Float:RotZ);


Для работы с резким поворотом/передвижением:


native SetObjectPos(objectid, Float:X, Float:Y, Float:Z);
native SetObjectRot(objectid, Float:RotX, Float:RotY, Float:RotZ);


Для работы с регулируемой скоростью поворота/передвижения:


native MoveObject(objectid, Float:X, Float:Y, Float:Z, Float:Speed, Float:RotX = -1000.0, Float:RotY = -1000.0, Float:RotZ = -1000.0);


Дальше мозг напрягай и складывай алгоритм как тебе нужно всё вычислить и настроить))
в том то и дело что я вычеслить не могу (формулу не знаю)

vovandolg
23.03.2017, 19:13
#define OBJ_MOVE_SPEED (2.0) // скорость передвижения объекта
#define KOEF_ROT (45.0) // на сколько градусов нам нужно повернуть

// заносим значения
enum
{
ID_ROT_X,
ID_ROT_Y,
ID_ROT_Z,

ID_SIDE_PLUS,
ID_SIDE_MINUS
};
// выбираем из enum значение(по какой оси будет выполнятся поворот)
#define SET_ID_MOVE (ID_ROT_X) //выбираем первое значение по оси X
#define SET_SIDE_MOVE (ID_SIDE_MINUS) //выбираем значение minus(будем отнимать)

new move_obj, move_x, move_y, move_z, move_rot_x, move_rot_y, move_rot_z;

move_obj = CreateObject( 18648, object_x, object_y, object_z, 0.0, 0.0, 90.0 );

GetObjectPos( move_obj, move_x, move_y, move_z );
GetObjectRot( move_obj, move_rot_x, move_rot_y, move_rot_z );

switch(SET_ID_MOVE)
{
#if defined SET_SIDE_MOVE == ID_SIDE_MINUS
case ID_ROT_X: move_rot_x -= KOEF_ROT;
case ID_ROT_Y: move_rot_y -= KOEF_ROT;
case ID_ROT_Z: move_rot_z -= KOEF_ROT;
#else
case ID_ROT_X: move_rot_x += KOEF_ROT;
case ID_ROT_Y: move_rot_y += KOEF_ROT;
case ID_ROT_Z: move_rot_z += KOEF_ROT;
#endif
}

MoveObject( move_obj, move_x, move_y, move_z, OBJ_MOVE_SPEED, move_rot_x, move_rot_y, move_rot_z );

как то так наверное, не проверял на работоспособность.