Эта библиотека physics.inc (или Objects Physics) - проект, над которым велись работы ещё в 2013 году. Physics.inc - это очень простая реализация физики снарядов в SA-MP, позволяющая управлять 2D или 3D перемещением объектов (в идеале, шаров), столкновениями или даже взаимодействием с миром San Andreas.
лагин ColAndreas от Pottus и Crayder позволяет вычислять столкновения с каждым объектом на карте San Andreas и постоянно обновлять нижнюю и верхнюю границы Z объекта, использующего физику.
Если вы хотите использовать функции ColAndreas (PHY_UseColAndreas и PHY_OnObjectCollideWithSAWorld), укажите
#define COLANDREAS
перед включением "physics.inc".
Предупреждение: взаимодействие между этой библиотекой и ColAndreas может быть неэффективным и отнимать много времени на написание кода!
Примеры:
- В папке gamemodes вы можете найти несколько примеров того, что вы можете сделать с этой библиотекой.
Бассейн - Это идеальный пример 2D-физики, с шариками, которые могут сталкиваться между собой или со стенами. Нажмите , чтобы удержать мяч. Нажмите , чтобы нанести удар / передать мяч. Нажмите ALT, чтобы отбить мяч. Нажмите F, чтобы выполнить перекрестный / высокий удар.? Ударьте по мячу (нажмите RMB/ALT/F), когда он будет на высоте головы, чтобы нанести удар головой. Индикатор включения, когда вы удерживаете клавиши RMB/ALT/F.
Футбол - Здесь физика трехмерна (используется ось z). Этот скрипт также использует функцию "цилиндр столкновения" для штанги ворот.
Бросить предмет - Более простой пример трехмерной физики, с командой, это просто подбросить Дигл в воздух.
command(launch, playerid, params[])
{
#define SPEED (10.0)
#define Z_SPEED (4.0)
#define GRAVITY (13.0)
? ? ? ? new modelid = 348; // Deagle Model ID
new Float:x, Float:y, Float:z, Float:ang;
GetPlayerPos(playerid, x, y, z);
GetPlayerFacingAngle(playerid, ang);
new obj = CreateObject(modelid, x, y - 0.5 * floatcos(-(ang 90.0), degrees), z, 93.7, 120.0, ang 60.0);
? PHY_InitObject(obj);
PHY_SetObjectVelocity(obj, SPEED * floatsin(-ang, degrees), SPEED * floatcos(-ang, degrees), Z_SPEED);
PHY_SetObjectFriction(obj, 100); // This will stop the object when it touchs the ground.
PHY_SetObjectGravity(obj, GRAVITY);
PHY_SetObjectZBound(obj, z - 1.0, _, 0.0);
ApplyAnimation(playerid,"GRENADE","WEAPON_throwu",3.0,0,0,0,0,0);
return 1;
}
Физика объектов - Пример на американском бильярде
Objects Physics + ColAndreas = FAP