Jump to content

Дада (: фулдилка


Recommended Posts

  • Replies 2.4k
  • Created
  • Last Reply

Top Posters In This Topic

attachElements

Что значит плавала? Оо

да в одиночке есть такое, объект в виде маркера над элементом двигается вверх/вниз.

Надо это исправить хД

Кто какую музыку слушает? =)

штыдно сказать, качнул ща танцевальные хиты 90-х, слушаю.. есть знакомые всем хиты..

Link to comment

Чёто я упустил один момент в своей мта-жизни.. Есть событие onClientPreRender.. есть время между кадрами, которое даёт событие.. И как с помощью этого времени сделать плавный переход цвета, например от красного к белому? Т.е. чтобы независимо от FPS, чтобы у всех одинаково (например за 5 сек).

штыдно сказать, качнул ща танцевальные хиты 90-х, слушаю.. есть знакомые всем хиты..

Это сейчас.. А вообще какой стиль?)

Link to comment

стиля нет, но не металл

я, кстати, делал такой плавный переход цвета за указанное время. Как бы то ни было, нужно знать текущий фпс, ну хотя бы за последнюю секунду.

  • цвет должен быть представлен в виде RGB или RGBA отдельными числами
  • 5 секунд * текущийФПС - это столько шагов нужно для изменения цвета
  • разницу исходного и желаемого цвета делим на вышеуказанное - это размеры шагов
  • и в каждом кадре прибавляешь к цвету, отнимая от кол-ва шагов, следя, чтобы за рамки 0..255 значения не выбились

Link to comment

Нельзя полагаться на fps, и onClientPreRender вызывается с той же частотой что и onClientRender, только перед тем как начинается прорисовываться кадр. Он нужен для плавных изменений в мире, как например смена позиции камеры, чтобы изменения не отставали на кадр. Тут надо отмерять по времени с getTickCount().

function colorLerp ( from, to, t ) -- переход, 0-1 
    local diff = to - from 
    if ( t < 0 ) then t = 0 
    elseif ( t > 1 ) then t = 1 end 
    return from + diff * t 
end 
  
local e = getTickCount () + 5000 -- закончим через 5 сек 
addEventHandler ( "onClientPreRender", root, function () 
    local t = 1 + ( e - getTickCount () ) / 5000 -- сколько прошло времени от начала до конца, относительно (от 0 до 1) 
    local color = colorLerp ( 0xFF0000, 0x0000FF, t ) -- от красного к синему 
end ) 

Что-нить в таком духе

Link to comment
О.о вот это да

пЫ.сЫ.-а ты говоришь я здрт ,вот кто выше писал реал задроты ))

Ты? Ну, ясно.

Склеивай 2 сообщения в 1.

да в одиночке есть такое, объект в виде маркера над элементом двигается вверх/вниз.

Верно.

attachElements

Ну это понятно, а стандартная функция есть? Как в соседнем мультиплеере.

И подскажите ID объекта стрелки.

Link to comment

А чё, больше никто музыку не слушает, все деловые? =D

О.о вот это да

пЫ.сЫ.-а ты говоришь я здрт ,вот кто выше писал реал задроты ))

Прекрати людей оскор:Oть. С чего ты взяла что они задроты?

P.S. Ты хоть пиши кому отвечаешь.

Link to comment
Потому что они умнее и образованнее его. :D

И ему обидно, что он не знает того, что знают они.

да канечно,в особенности ты ,самый умный :\

ой ,все кароче ,обсуждайте дальше свой гта

Link to comment

фулдилка оживилась после смены названия (: .. даже случайные прохожие тут повякивать стали

Нельзя полагаться на fps, и onClientPreRender вызывается с той же частотой что и onClientRender, только перед тем как начинается прорисовываться кадр. Он нужен для плавных изменений в мире, как например смена позиции камеры, чтобы изменения не отставали на кадр. Тут надо отмерять по времени с getTickCount().

В моем словесном примере баланс между подсчетами в каждом кадре и точностью по времени. Я делал такие же подсчеты в каждом кадре, но после тестов двух вариантов стало понятно, что такая точность не нужна, когда дело касается просто визуализации. Когда промежуток времени небольшой для изменения цвета, а обычно, это так и есть, то тиками можно ничего не мерить. Потому что для всех по ощущениям этот эффект итак будет одинаков по времени.

Link to comment

Просто цвет я взял за пример, а так очень важно это учитывать при плавном повороте персонажа (при низком фпс это будет очень медленно).

Я пока решение вижу что-то вроде этого:

-- Пример для onClientPreRender 
-- current - текущий угол поворота игрока 
-- target - угол поворота к которому нужно повернуться 
-- timeSlice - аргумент возвращаемый onClientPreRender 
  
setPedRotation( localPlayer, current + math.sin( math.rad( target - current ) ) * ( timeSlice * .5 ) ); 

Link to comment

Где взять инфу о Module SDK ? Что-то не могу найти ничего по экспортам.. Вообще никакой инфы.

Тебе по времени нужна абсолютная точность?

Нет, главное чтобы на разном FPS было одинаково.

Link to comment
Почему когда меняешь самотыки, вибраторы в MTA она просто вылетает.. Я думал они просто не заменятся, есть-ли способы?

У меня тоже проблема была с заменой модели tec9, при ее замене, даже на стандартную модель, просто мта крэшило, когда брал ее в руки

Link to comment
Почему когда меняешь самотыки, вибраторы в MTA она просто вылетает.. Я думал они просто не заменятся, есть-ли способы?

Да, эти предметы нельзя заменить, уже проверено не один раз. На баг трекере уже есть такой вопрос.

Где взять инфу о Module SDK ? Что-то не могу найти ничего по экспортам.. Вообще никакой инфы.
Тебе по времени нужна абсолютная точность?

Нет, главное чтобы на разном FPS было одинаково.

На заметку: модули не имеют полного доступа к МТА возможностям. Поэтому Module SDK только для тех серверных инструментов, которые не лезут в сам функционал МТА, а лишь добавляют какой-то независимый функционал. На мой взгляд, проще реализовать большинство фич на уровне скриптинга. Поэтому лезть в Module SDK надо только в крайнем случае и при хорошем знании С++. Как все работает можно узнать из готовых стандартных модулей - http://code.google.com/p/multitheftauto-modules/

Насчет плавного изменения цвета с необязательной точностью.. Рабочий пример. Код оптимизирован (выдернул из своей библы с DX элементами). Хотя код и большой, но весь упор сделан на то, чтобы при каждом кадре было минимум вычислений и проверок.

--[[ 
    префиксы в названия переменных, означают тип переменной: 
    f = function, t = table, n = number, b = boolean 
     
    tColor и tNewColor должны быть таблицами вида {r,g,b,a}, 
    например, {255,128,64,255}, {148,0,10,117} 
]] 
  
local tColor = {255,0,0,255} -- текущий цвет 
local nFPS, nFPSCounter = 36, 0 -- для подсчета FPS 
  
local tRecolor = { -- параметры плавного измнения цвета 
    bIsActive = false, -- активно или нет 
    tColorStep = {}, -- шаг для каждой составляющей цвета 
    nSteps = 0, -- кол-во шагов 
    tTargetColor = {} -- новый цвет 
} 
  
  
-- плавное изменение цвета 
function fRecolor ( tNewColor, nSeconds ) 
    tRecolor.bIsActive = false -- выключим, если было включено 
    tRecolor.nSteps = math.ceil( nFPS * nSeconds ) -- всего шагов 
  
    for n = 1, 4 do 
        tRecolor.tColorStep[n] = ( tNewColor[n] - tColor[n] ) / tRecolor.nSteps 
        tRecolor.tTargetColor[n] = tNewColor[n] 
    end 
  
    tRecolor.bIsActive = true 
end 
  
  
addEventHandler( 'onClientResourceStart', resourceRoot, 
    function() 
        -- FPS счетчик 
        setTimer( function() nFPS = nFPSCounter; nFPSCounter = 0 end, 1000, 0 ) 
  
        -- для примера плавное изменение цвета каждые 3 сек, 
        setTimer(  
            function() 
                fRecolor( { math.random(0,255), -- случайный цвет 
                            math.random(0,255),  
                            math.random(0,255),  
                            math.random(0,255), },  
                          1.5 ) -- меняется за 1.5 сек 
            end, 
            3000, 
            0 
        ) 
    end 
) 
  
addEventHandler( 'onClientRender', root, 
    function() 
        -- FPS счетчик 
        nFPSCounter = nFPSCounter + 1 
         
        -- изменение цвета, если оно активно 
        if tRecolor.bIsActive then 
            if tRecolor.nSteps <= 0 then 
                for n=1,4 do tColor[n] = tRecolor.tTargetColor[n] end 
                tRecolor.bIsActive = false 
            else 
                for n=1,4 do tColor[n] = tColor[n] + tRecolor.tColorStep[n] end 
             
                if tRecolor.nSteps <= 2 then 
                    for n = 1, 4 do 
                        if      tColor[n] < 0   then tColor[n] = 0 
                        elseif  tColor[n] > 255 then tColor[n] = 255 end 
                    end 
                end 
  
                tRecolor.nSteps = tRecolor.nSteps - 1 
            end 
        end 
         
        -- простой квадратик для примера, у него будет меняться цвет 
        dxDrawRectangle( 300,300, 200,200, tocolor(tColor[1],tColor[2],tColor[3],tColor[4]) ) 
    end 
) 

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

Link to comment
вибраторы, бита, катана, тек9

отстой... я хотел попробовать сделать ассасинс крид мод, катану и биту на меч и булаву заменить... дерьмово. а в будущих версиях будет доступно?

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.

×
×
  • Create New...