Если я правильно понял вашу проблему, что-то вроде этого должно работать:
function xys()
local x, y, s = SSxPOSA, SSyPOSA, SSsizeA
return coroutine.wrap(
function()
while x >= SSxPOSB and y >= SSyPOSB and s >= SSsizeB do
coroutine.yield(x,y,s)
x = x - 0.1
y = y - 0.5
s = s - 0.8
end
end)
end
SSxPOSA = 0.00
SSxPOSB = -12.00
SSyPOSA = 0.00
SSyPOSB = -6.55
SSsizeA = 1.00
SSsizeB = 0.2
for x,y,s in xys() do
print(x,y,s)
--Object1X(x)
--Object1Y(y)
--Object1Scale(s)
end
И, поскольку сравнение с плавающей точкой не всегда дает ожидаемый результат, вероятно, лучше преобразовать в целые числа и разделить непосредственно перед использованием. Вот так:
function xys()
local x, y, s = SSxPOSA, SSyPOSA, SSsizeA
return coroutine.wrap(
function()
while x >= SSxPOSB and y >= SSyPOSB and s >= SSsizeB do
coroutine.yield(x/100,y/100,s/100)
x = x - 10
y = y - 50
s = s - 80
end
end)
end
SSxPOSA = 0
SSxPOSB = -1200
SSyPOSA = 0
SSyPOSB = -655
SSsizeA = 100
SSsizeB = 20
for x,y,s in xys() do
print(x,y,s)
--Object1X(x)
--Object1Y(y)
--Object1Scale(s)
end
Вы также можете сделать это без сопрограмм:
function xys()
local x, y, s = SSxPOSA, SSyPOSA, SSsizeA
return function()
if x < SSxPOSB or y < SSyPOSB or s < SSsizeB then return end
local xx, yy, ss = x/100, y/100, s/100
x = x - 10
y = y - 50
s = s - 80
return xx,yy,ss
end
end