Активный
- Тема Автор
- #1
Объекты позволяют создавать уникальные карты и декорации. Разберем работу с ними.
Создание объекта
Параметры:
- modelid - ID модели объекта
- x, y, z - координаты
- rX, rY, rZ - углы поворота
- drawDistance - дистанция прорисовки
Управление объектами
Колбэки объектов
Пример: движущаяся платформа
Пример: вращающийся объект
Персональные объекты
Материалы и текстуры
Пример: текст на объекте
Важные моменты:
- Максимум 1000 объектов на сервере
- Используйте персональные объекты для индивидуальных эффектов
- Оптимизируйте drawDistance для производительности
- Сохраняйте ID объектов для управления
Объекты открывают безграничные возможности для создания карт!
Создание объекта
Код:
CreateObject(modelid, Float:x, Float:y, Float:z, Float:rX, Float:rY, Float:rZ, Float:drawDistance);
// Пример:
new objectid = CreateObject(19379, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 300.0);
Параметры:
- modelid - ID модели объекта
- x, y, z - координаты
- rX, rY, rZ - углы поворота
- drawDistance - дистанция прорисовки
Управление объектами
Код:
// Переместить объект
MoveObject(objectid, Float:x, Float:y, Float:z, Float:speed);
// Повернуть объект
RotateObject(objectid, Float:rX, Float:rY, Float:rZ, Float:speed);
// Установить позицию
SetObjectPos(objectid, Float:x, Float:y, Float:z);
// Установить поворот
SetObjectRot(objectid, Float:rX, Float:rY, Float:rZ);
// Удалить объект
DestroyObject(objectid);
// Прикрепить к игроку
AttachObjectToPlayer(objectid, playerid, Float:offsetX, Float:offsetY, Float:offsetZ, Float:rX, Float:rY, Float:rZ);
// Прикрепить к транспорту
AttachObjectToVehicle(objectid, vehicleid, Float:offsetX, Float:offsetY, Float:offsetZ, Float:rX, Float:rY, Float:rZ);
Колбэки объектов
Код:
public OnObjectMoved(objectid)
{
// Объект завершил движение
new string[64];
format(string, sizeof(string), "Объект %d завершил движение", objectid);
print(string);
return 1;
}
public OnPlayerObjectMoved(playerid, objectid)
{
// Персональный объект игрока завершил движение
return 1;
}
Пример: движущаяся платформа
Код:
new platformObject;
new Float:platformPositions[][3] = {
{100.0, 100.0, 10.0},
{200.0, 100.0, 10.0},
{200.0, 200.0, 10.0},
{100.0, 200.0, 10.0}
};
new currentPosition = 0;
public OnGameModeInit()
{
platformObject = CreateObject(19379, 100.0, 100.0, 10.0, 0.0, 0.0, 0.0, 300.0);
SetTimer("MovePlatform", 5000, true);
return 1;
}
forward MovePlatform();
public MovePlatform()
{
currentPosition++;
if(currentPosition >= sizeof(platformPositions))
{
currentPosition = 0;
}
MoveObject(platformObject,
platformPositions[currentPosition][0],
platformPositions[currentPosition][1],
platformPositions[currentPosition][2],
5.0);
}
public OnObjectMoved(objectid)
{
if(objectid == platformObject)
{
// Платформа достигла точки
}
return 1;
}
Пример: вращающийся объект
Код:
new rotatingObject;
new Float:currentRotation = 0.0;
public OnGameModeInit()
{
rotatingObject = CreateObject(19379, 0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 300.0);
SetTimer("RotateObject", 100, true);
return 1;
}
forward RotateObject();
public RotateObject()
{
currentRotation += 1.0;
if(currentRotation >= 360.0)
{
currentRotation = 0.0;
}
SetObjectRot(rotatingObject, 0.0, 0.0, currentRotation);
}
Персональные объекты
Код:
// Создание объекта только для одного игрока
CreatePlayerObject(playerid, modelid, Float:x, Float:y, Float:z, Float:rX, Float:rY, Float:rZ, Float:drawDistance);
// Управление персональными объектами
SetPlayerObjectPos(playerid, objectid, Float:x, Float:y, Float:z);
SetPlayerObjectRot(playerid, objectid, Float:rX, Float:rY, Float:rZ);
DestroyPlayerObject(playerid, objectid);
Материалы и текстуры
Код:
// Установить материал объекта
SetObjectMaterial(objectid, materialindex, modelid, txdname[], texturename[], materialcolor);
// Установить текст объекта
SetObjectMaterialText(objectid, text[], materialindex, materialsize, fontface[], fontsize, bold, fontcolor, backcolor, textalignment);
Пример: текст на объекте
Код:
new textObject = CreateObject(19379, 0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 300.0);
SetObjectMaterialText(textObject, "Добро пожаловать!", 0, OBJECT_MATERIAL_SIZE_256x128,
"Arial", 24, 1, 0xFFFFFFFF, 0x00000000, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
Важные моменты:
- Максимум 1000 объектов на сервере
- Используйте персональные объекты для индивидуальных эффектов
- Оптимизируйте drawDistance для производительности
- Сохраняйте ID объектов для управления
Объекты открывают безграничные возможности для создания карт!