Lua coronasdk中的实时物理体标度问题

Lua coronasdk中的实时物理体标度问题,lua,coronasdk,Lua,Coronasdk,我的目标是创建一个平台,从一个x,y坐标到触摸事件,以这样的方式滑动手指将实时移动和调整平台大小。然而,问题是,如果在所述平台上有一个球,然后我移动平台,球将冻结并停止像球一样的动作,直到平台被操纵完毕 有没有一种方法可以让球在移动平台时继续正常运动 我已经包括了代码,所以你可以玩它,看看我的意思。查看我所说内容的最佳方法是单击创建平台,等待球落在平台上,然后拖动平台的末端 local physics = require("physics"); physics.start();

我的目标是创建一个平台,从一个x,y坐标到触摸事件,以这样的方式滑动手指将实时移动和调整平台大小。然而,问题是,如果在所述平台上有一个球,然后我移动平台,球将冻结并停止像球一样的动作,直到平台被操纵完毕

有没有一种方法可以让球在移动平台时继续正常运动

我已经包括了代码,所以你可以玩它,看看我的意思。查看我所说内容的最佳方法是单击创建平台,等待球落在平台上,然后拖动平台的末端

        local physics = require("physics");
physics.start();
physics.setDrawMode("hybrid");
W = display.contentWidth;
H = display.contentHeight;

balls = {};

local function createPlatform(event)
    if (event.phase == "began") then
        if(line) then
            line.parent:remove(line);
        end
        x = (event.x - (W/2 - 80));
        y = (event.y - (H/2));
        line = display.newLine(W/2 - 80, H/2, event.x, event.y)
        line.width = 5;
        physics.addBody(line, "static", {shape = {0, 0, x, y}});
        line.isBullet = true;
    end
    if (event.phase == "moved") then
        x = (event.x - (W/2 - 80));
        y = (event.y - (H/2));
        if (line) then
            line.parent:remove(line);
        end
        line = display.newLine(W/2 - 80, H/2, event.x, event.y)
        line.width = 5;
        physics.addBody(line, "static", {shape = {0, 0, x, y}});
        line.isBullet = true;
    end
    if (event.phase == "ended") then

    end
end

local function spawnBalls(event)

    i = 1;
    local function spawnb(event)
        rand = math.random(1, 4);
            if (rand == 1) then
                balls[i] = display.newCircle(math.random(140, 180), -30, 7.5);
                balls[i]:setFillColor(255,0,0);
                physics.addBody(balls[i], {radius = 7.5})
                balls[i].isBullet = true;
                i = i + 1;
                rand = math.random(1,4)
            elseif (rand == 2) then
                balls[i] = display.newCircle(math.random(140, 180), -30, 7.5);
                balls[i]:setFillColor(0, 255, 0);
                physics.addBody(balls[i], {radius = 7.5})
                balls[i].isBullet = true;
                i = i + 1;
                rand = math.random(1,4)
            elseif (rand == 3) then
                balls[i] = display.newCircle(math.random(140, 180), -30, 7.5);
                balls[i]:setFillColor(0, 0, 255)
                physics.addBody(balls[i], {radius = 7.5})
                balls[i].isBullet = true;
                i = i + 1;
                rand = math.random(1,4)
            elseif (rand == 4) then
                balls[i] = display.newCircle(math.random(140, 180), -30, 7.5);
                balls[i]:setFillColor(255, 255, 0);
                physics.addBody(balls[i], {radius = 7.5})
                balls[i].isBullet = true;
                i = i + 1;
                rand = math.random(1,4)
            end
        end
    timer.performWithDelay(1500, spawnb, -1);
end

spawnBalls();

Runtime:addEventListener("touch", createPlatform)

我认为这是因为您在Box2D有机会计算新的身体位置/速度(当移动手指时,鼠标在屏幕上)之前移除了身体(线)。。。您可以尝试增加位置迭代次数和帧速率……但由于性能损失,不建议这样做。
我建议旋转和缩放身体,但不要移除身体,并添加一个新的身体。可以使用.rotation和.xScale/.yScale

我没有试过,但我会这样做。
我对科罗纳也有点陌生……所以不能保证。

@lansen没有这样的运气。使用旋转,而不删除物理实体仍然会产生相同的行为。位置和速度停止计算,直到平台不再移动,然后球再次开始正常运动。即使在增加位置/速度迭代尝试时也会发生此情况。。。不要把这条线变成一个整体。然后测试是否有球击中它,并对它施加一个力(模拟它击中线)。这对于初始击中来说是可行的…但是,如果它在物理体上滚动,那么保持它在线上会变得非常复杂…除非我说如果(event.phase=“start”),那么球[I]:applyForce(0,-0.5);最后,施加一个很小的力,使它几乎脱离线,然后立即后退,再次接触它,并重复。我来玩玩它