2014-05-02 54 views
0

好的,我正在创建一个应用程序,我已经创建了触摸和拖动效果。我不知道如何编码用户放开物体的部分,它会飞起来,因此就是“扔”。Corona SDK中的“Throw”概念

local body = event.target 
local phase = event.phase 
local stage = display.getCurrentStage() 
--- 
if event.phase == "began" then 
    --begin focus 
    display.getCurrentStage():setFocus(self, event.id) 
    self.isFocus = true 
    self.markX = self.x -- store x location of object 
    self.markY = self.y -- store y location of object 
    physics.addBody(happy) 

elseif self.isFocus then 
    if event.phase == "moved" then 
     physics.addBody(happy) 
     -- drag touch object 

     local x = (event.x - event.xStart) + self.markX 
     local y = (event.y - event.yStart) + self.markY 
     self.x, self.y = x, y -- move object based on calculations above 

    elseif event.phase == "ended" then 
     -- end focus 
     display.getCurrentStage():setFocus(self, nil) 
     self.isFocus = false 

    end 
end 

return true 

再次,我试图让用户能够抛出对象,而不是只是拖动它。此外,如果任何人都可以帮助触摸并保持定时器,使对象消失并重生,那么将非常感激。

回答

0

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

local startTouchMove = 0 

.... 

local function touchListener(event) 

    if event.phase == "began" then 
     ... 
     self.markX = event.x -- store x location of object 
     self.markY = event.y -- store y location of object 
     startTouchMove = system.timer() 
     ... 

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

     elseif event.phase == "ended" then 
      -- set the instantaneous velocity based on touch motion 
      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 
+0

我该如何在这种情况下编码? – user3596560

+0

@ user3596560已更新 – Schollii