"Throw"概念在Corona SDK中

好的,我正在创建一个应用程序,我已经创建了触摸和拖动效果。我不知道如何编写用户松开对象并使其飞行的部分,因此需要“扔”部分的代码。

local body = event.target
local phase = event.phase
local stage = display.getCurrentStage()
---
if event.phase == "began" then
    --开始聚焦
    display.getCurrentStage():setFocus( self, event.id)
    self.isFocus = true
    self.markX = self.x    -- 存储物体的x位置
    self.markY = self.y    -- 存储物体的y位置
    physics.addBody(happy)

elseif self.isFocus then
    if event.phase == "moved" then
        physics.addBody(happy)
        -- 拖动触摸物体

        local x = (event.x - event.xStart) + self.markX
        local y = (event.y - event.yStart) + self.markY
        self.x, self.y = x, y    -- 基于上面的计算移动对象

    elseif event.phase == "ended" then
        -- 结束聚焦
        display.getCurrentStage():setFocus( self, nil)
        self.isFocus = false

    end
end

return true

再次强调,我想要用户能够扔物体而不仅仅是拖动它。此外,如果有人能够帮助设计触摸和按住计时器,使物体消失并重新出现,那将不胜感激。

点赞
用户869951
用户869951

你可能会在释放时计算速度:在触摸开始阶段计算触摸位置 (x1,y1),在触摸结束阶段计算触摸位置 (x2, y2), 以及两者之间的时间 : 然后通过 object.setLinearVelocity() 将对象的线性速度设置为此值 (它是一个2D向量)。如果物体是非静态的,则会使其运动。运动将取决于它是动态的还是运动学的。如果是动态的,速度将被设置,然后将根据施加到物体上的外部力而改变(例如重力)。例如:

local startTouchMove = 0

....

local function touchListener(event)

    if event.phase == "began" then
        ...
        self.markX = event.x    -- 存储对象的x位置
        self.markY = event.y    -- 存储对象的y位置
        startTouchMove = system.timer()
        ...

    elseif self.isFocus then
        if event.phase == "moved" then
            ...

        elseif event.phase == "ended" then
            -- 根据触摸运动设置瞬时速度
            local dt = system.timer() - startTouchMove
            if dt ~= 0 then
                local velX = ( event.x - self.markX ) / dt
                local velY = ( event.y - self.markY ) / dt
                yourObject:setLinearVelocity(velX, velY)
            end
        end
    end
end
2014-05-04 05:27:56