RU/Matrix
Матрицы — одна из самых мощных возможностей ООП в MTA. Матрицы были и раньше с функцией getElementMatrix, но мы получали ужасную для работы таблицу. Теперь, с новым классом Matrix, мы можем создавать и волшебно манипулировать матрицами.
Методы
Использование матриц
Предположим, вы хотите созать мусорное ведро - объект 1337 - в двух еденицах впереди игрока. Вы не хотите вручную работать с тригонометрией и запутанными таблицами. Вы просто хотите получить позицию в двух еденицах впереди игрока, учитывая его вращение. Вам понадобятся только эти функции Matrix.getForward. Matrix.getPosition и getElementMatrix. Это просто:
Object ( 1337, player.matrix.position + player.matrix.forward * 2 )
Why not stick to the good ol' tables?
Say you'd like to get find the position underneath a vehicle. This is the position at any rotation. So if it was upside down, the Z value would be higher than the vehicle Z value. If the vehicle was the right way round, the Z value for underneath car would be less than the Z value for the car.
-- -- Вместо: -- local matrix = getElementMatrix(vehicle) local offX = 0 * matrix[1][1] + 0 * matrix[2][1] - 1 * matrix[3][1] + matrix[4][1] local offY = 0 * matrix[1][2] + 0 * matrix[2][2] - 1 * matrix[3][2] + matrix[4][2] local offZ = 0 * matrix[1][3] + 0 * matrix[2][3] - 1 * matrix[3][3] + matrix[4][3] local pX, pY, pZ = getElementPosition(vehicle) local positionBelow = {offX-pX, offY-pY, offZ-pZ} -- -- Вы можете просто сделать так: -- local positionBelow = vehicle.position - vehicle.matrix.up