2012-04-08 6 views
0

Ich arbeite gerade an einem Projekt und es enthält eine Option für eine zu zeichnende Linie. Aber ich kann normalerweise nicht maximale Länge der Linie einstellen. Wie kann ich das machen? HierWie stelle ich die maximale Länge einer Zeichenlinie ein? (Corona SDK)

ist der Code, der Abstandsformel (wie ich glaube):

local function distanceBetween(e, prev) 
     local distanceBetween = 0 
    local dist_x = e.x - prevX ; local dist_y = e.y - prevY; 
    local distanceBetween = math.sqrt((dist_x*dist_x) + (dist_y*dist_y)) 
    return distanceBetween 
end 

Und hier ist eine Zeile Code:

local lines = {} 
    local myLines = {}  
    local prevX,prevY 



    local i = 1 

    --prevX = x1, prevY = y1, e.x = x2, e.y = y2 

    local function drawLine(e) 
     distanceBetween = false 
     if(e.phase == "began") then 
     myLines[i] = {} 
     prevX = e.x 
     prevY = e.y 
      elseif(e.phase == "moved")then 
       if prevX then 
        myLines[i][#myLines[i] + 1] = display.newLine(prevX,prevY,e.x,e.y) 
        myLines[i][#myLines[i]]:setColor(255,255,0) 
        myLines[i][#myLines[i]].width = 5 
        myLines[i][#myLines[i]].alpha=1 
        myLines[i][#myLines[i]].myName = "Line" 
        dist_x = e.x - prevX 
        dist_y = e.y - prevY 
        physics.addBody(myLines[i][#myLines[i]], "static", { density = 1, friction = 0.5, bounce = 1.6, shape = {0, 0, dist_x, dist_y, 0, 0} }) 
        lineGroup:insert(myLines[i][#myLines[i]]) 



        distanceBetween = true 
         if (distanceBetween > 50) then 
         drawLine("ended") 
         end 
        end -- this is how i think line should be maximized 

        prevX = e.x 
        prevY = e.y 
      elseif(e.phase == "ended")then 
       prevX = nil 
       prevY = nil 
       i = i + 1 
       removeLine(myLines[#myLines-1]) 
      end 
     end 
     Runtime:addEventListener("touch",drawLine); 

Antwort

0

Edited: das funktioniert gut in meinen Corona App. Ist das das was du versuchst?

local physics = require "physics" 
physics.start() 

local lines = {} 
local lineGroup = display.newGroup() 
local prevX,prevY 
local isDrawing = false 
local i = 0 

local function distanceBetween(x1, y1, x2, y2) 
    local dist_x = x2 - x1 
    local dist_y = y2 - y1 
    local distanceBetween = math.sqrt((dist_x*dist_x) + (dist_y*dist_y)) 
    return distanceBetween 
end 

local function drawLine(e) 
    if(e.phase == "began") then 
     prevX = e.x 
     prevY = e.y 
     isDrawing = true 
     i = i + 1 
    elseif(e.phase == "moved") then 
     local distance = distanceBetween(prevX, prevY, e.x, e.y) 
     if(isDrawing and distance < 100) then 
      if(lines[i]) then lineGroup:remove(i) end 
      lines[i] = display.newLine(prevX, prevY, e.x, e.y) 
      lines[i]:setColor(255, 255, 0) 
      lines[i].width = 5 

      local dist_x = e.x - prevX 
      local dist_y = e.y - prevY 
      physics.addBody(lines[i], "static", { density = 1, friction = 0.5, bounce = 1.6, shape = {0, 0, dist_x, dist_y, 0, 0} }) 
      lineGroup:insert(lines[i]) 
     end 
    elseif(e.phase == "ended") then 
     isDrawing = false 
    end 
end 

Runtime:addEventListener("touch",drawLine) 
+0

Hey Mann, danke! Eigentlich denke ich genau, wie man gerade Linien statt gekrümmte zeichnet ... Könntest du bitte dabei helfen? das wäre wirklich toll! – barmyman

+0

Und Ihr Code gibt mir seltsame Fehler: versuchen, Arithmetik auf lokalen 'x2' (ein Nullwert) – barmyman

+0

Oh, schien es zu beheben, indem x1, x2, y1, y2 = 0 als lokale, aber ist das richtig? und jetzt habe ich diesen fehler: versuchen sie, upvalue 'distanceBetween' (ein nummer wert) aufrichtig hoffe ich werde ihnen helfen! – barmyman