如何在 Corona 的 Lua 中绘制圆的一部分?

发布于 2024-12-11 19:27:21 字数 197 浏览 0 评论 0原文

很久以前是我最后一次需要这个:)

我只是喜欢创建一个带有一段和不同填充或透明的圆圈。 所以我就像一个秒表一样按时间(60 秒)填满圆圈。

函数类型 a > showegment (xcircle,ycircle,radius,秒) :}@

欢迎任何通向该解决方案的短线。 该代码需要在 Lua 中的 Corona 框架内运行。

long time ago is last time I needed that :)

I simple like to create a circle with a segment and a different filling or transparent.
So i just have like a stopwatch filling up the circle by time (60 seconds).

function kind a > showsegment (xcircle,ycircle,radius, seconds) :}@

any short lines leading to that solution, are welcome.
The code needs to work within the Corona Framework, in Lua.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夏末染殇 2024-12-18 19:27:21

我认为你不能。使用带有 alpha 和色调的图像不是一个选择吗?
是的,您必须创建 60 个对象,每个刻度一个,但图像无论如何都会被缓存,因此您只需加载它并为其分配内存一次。接下来的每一个实例都很便宜。

I don't think you can. Using image with alpha and tint is not an option?
Yes, you'll have to create 60 objects, one for every tick, but images are cached anyway, so you only loading it and allocating memory for it once. Every next instance is cheap.

久夏青 2024-12-18 19:27:21

我不确定这是否是您要找的,但是看到这个问题让我很好奇,所以我搞乱了它并想出了这个(如果这是您要找的):
勾选=0;
刻度={};

cr = 250; -- Circle radius
hr = 0.9; -- hand radius
hw = 10; -- hand width
mr = 0.25; -- middle radius (fg)

bg = display.newCircle(cr, cr, cr); -- background
for i=1,360 do
    local w = hr * (cr * 2);
    local x = (w/2)+(((cr*2) - w)/2);
    local t = display.newRect(x,x,hw,w);
    t:rotate(i-1);
    t:setFillColor(0,0, 0);

    table.insert(ticks, t);
end


function drawTick(e)
    print("tick "..tick);
    local dg = display.newGroup();
    local w = hr * (cr * 2);
    local x = (w/2)+(((cr*2) - w)/2);
    local t = display.newRect(dg, 0, -w/4, 10, w/2);

    dg.x = x;
    dg.y = x;
    t:setFillColor(0, 1, 0);
    dg:rotate(tick-1);

    table.insert(ticks, t);
    fg = display.newCircle(cr,cr,mr*cr);

    if tick < 361 then
        tick = tick + 1
        timer.performWithDelay(50, drawTick);
    end
end

timer.performWithDelay(0, drawTick);

编辑:我稍微清理了一下代码。

I am not sure if this is what you're looking for, but seeing the question it made me curious, so I messed around with it and figured this (if it's what you're looking for):
tick = 0;
ticks = {};

cr = 250; -- Circle radius
hr = 0.9; -- hand radius
hw = 10; -- hand width
mr = 0.25; -- middle radius (fg)

bg = display.newCircle(cr, cr, cr); -- background
for i=1,360 do
    local w = hr * (cr * 2);
    local x = (w/2)+(((cr*2) - w)/2);
    local t = display.newRect(x,x,hw,w);
    t:rotate(i-1);
    t:setFillColor(0,0, 0);

    table.insert(ticks, t);
end


function drawTick(e)
    print("tick "..tick);
    local dg = display.newGroup();
    local w = hr * (cr * 2);
    local x = (w/2)+(((cr*2) - w)/2);
    local t = display.newRect(dg, 0, -w/4, 10, w/2);

    dg.x = x;
    dg.y = x;
    t:setFillColor(0, 1, 0);
    dg:rotate(tick-1);

    table.insert(ticks, t);
    fg = display.newCircle(cr,cr,mr*cr);

    if tick < 361 then
        tick = tick + 1
        timer.performWithDelay(50, drawTick);
    end
end

timer.performWithDelay(0, drawTick);

EDIT: I cleaned up the code a bit.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文