2016-03-05 71 views
-1

我有一个变量,当函数被调用时,乘以1.01。我想要的是,而不是仅仅看到变量“跳”到另一个值,看到它顺利并逐渐增加,直到达到该值。使编号转换平滑

例子:

x = 1000 
    function gets called 
    x = x * 1.01 
--> x value is now 1010, but when I show it on screen, I would like it to go 1000, 1001, 1002,...,1010 in certain amount of time 
--> instead of just 1000 -> 1010 

到目前为止我的代码:

function Multiply() 
       local random = math.random(1, 102) 
        if random ~= 1 then 
         Multiplier = Multiplier * 1.01 
         MultiplierDisplay.text = "x" .. string.format("%.3f", Multiplier) 

         Gain = Multiplier * PlaceYourBetTextField.text - PlaceYourBetTextField.text 
         GainDisplay.text = "Gain: " .. string.format("%.0f", Gain) 
        else 
         timer.cancel(MultiplyTimer) 
         Multiplier = 1 
        end 
       end 
       MultiplyTimer = timer.performWithDelay(125, Multiply, 0) 
+0

所以......你有这样做有什么问题? –

+0

编辑:我改写了我的问题,我问错了,对不起。 我不知道如何执行...当我的函数乘以大数时,它只是从10000跳到10100.我想要1去1.这很难解释...希望有人可以tho 。 – FICHEKK

+0

我完全理解你的问题。我的问题是你做了什么试图解决它?显然,你不会认为这个数字会奇迹般地呈现中间值,所以显然你需要编写一些代码来使其达到这个目的。你试图写什么代码来实现这个目标?你试过什么算法? –

回答

0

你将必须选择多少的时间来实现这种转变。 我假设因为你在乘东西,你会想要一个恒定的几何变化,而不是一个常数的算术变化。

你会做

local x=1000 

local x0=0 
local x1=0 
local time0=0 
local time1=0 

local function changex(newx,time) 
    x0=x 
    x1=newx 
    time0=os.clock() 
    time1=time0+time 
end 

,然后你的主循环:

while true do 
    local t=os.clock() 
    if t<time0 then 
     x=x0 
    elseif t<time1 then 
     local tratio=(t-time0)/(time1-time0) 
     x=x0*(x1/x0)^tratio 
    else 
     x=x1 
    end 
    pause() 
end