Активный
- Тема Автор
- #1
Объекты создают уникальные карты. Разберем продвинутые техники.
Массовое создание объектов
Анимация объектов
Взаимодействие с объектами
Важные моменты:
- Оптимизируйте количество объектов
- Используйте правильные дистанции прорисовки
- Анимируйте объекты эффективно
- Сохраняйте ID объектов
Продвинутая работа с объектами создает уникальные карты!
Массовое создание объектов
Код:
CreateObjectArray(modelid, count, Float:baseX, Float:baseY, Float:baseZ, Float:spacing)
{
new objects[100];
for(new i = 0; i < count; i++)
{
objects[i] = CreateObject(modelid,
baseX + (i * spacing),
baseY,
baseZ,
0.0, 0.0, 0.0, 300.0);
}
return objects;
}
Анимация объектов
Код:
new Float:objectRotation[MAX_OBJECTS];
new objectRotationSpeed[MAX_OBJECTS];
public OnGameModeInit()
{
// Создание вращающегося объекта
new objectid = CreateObject(19379, 0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 300.0);
objectRotationSpeed[objectid] = 1; // скорость вращения
SetTimer("RotateObjects", 100, true);
return 1;
}
forward RotateObjects();
public RotateObjects()
{
for(new i = 0; i < MAX_OBJECTS; i++)
{
if(objectRotationSpeed[i] != 0)
{
objectRotation[i] += float(objectRotationSpeed[i]);
if(objectRotation[i] >= 360.0)
{
objectRotation[i] = 0.0;
}
SetObjectRot(i, 0.0, 0.0, objectRotation[i]);
}
}
}
Взаимодействие с объектами
Код:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(newkeys & KEY_SECONDARY_ATTACK)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
// Поиск ближайшего объекта
new nearestObject = FindNearestObject(playerid, x, y, z);
if(nearestObject != -1)
{
InteractWithObject(playerid, nearestObject);
}
}
return 1;
}
FindNearestObject(playerid, Float:x, Float:y, Float:z)
{
new nearestObject = -1;
new Float:nearestDistance = 999999.0;
for(new i = 0; i < MAX_OBJECTS; i++)
{
new Float:objX, Float:objY, Float:objZ;
GetObjectPos(i, objX, objY, objZ);
new Float:distance = floatsqroot(
floatpower(x - objX, 2) +
floatpower(y - objY, 2) +
floatpower(z - objZ, 2));
if(distance < nearestDistance && distance < 3.0)
{
nearestDistance = distance;
nearestObject = i;
}
}
return nearestObject;
}
Важные моменты:
- Оптимизируйте количество объектов
- Используйте правильные дистанции прорисовки
- Анимируйте объекты эффективно
- Сохраняйте ID объектов
Продвинутая работа с объектами создает уникальные карты!