2016-04-04 9 views
1
  1. Wenn ich die sehr oben (sagen wir, y=5) berühren, sollte ein Objekt stoppen zu bewegen, wenn es y=50
  2. erreicht Wenn ich die Boden berühren (wir y=300 sagen), sollte ein Objekt stoppen bewegen wenn es erreicht y=250

Hier ist, was ich bisher getan haben:Corona SDK: Wie erstellt man unberührten Bereich am oberen und unteren Rand des Bildschirms?

local function movePlayer(event) 
    if(event.phase == "ended") then 
     transition.to(player, {y=event.y, time=3000}) 
    end 
end 

Wie mache ich das?

Antwort

1

Dies ist leicht zu lösen mit einfachen Vergleichslogik, fügen Sie diese Funktion und verwenden Sie sie mit den Argumenten, die Sie gerne (Spieler x und y zum Beispiel), um ihre Werte zu begrenzen, bevor Sie auf den Player anwenden.

Diese Funktion akzeptiert drei Argumente - Zahlenwert, Untergrenze und Obergrenze. Und es gibt eine Zahl zurück, die garantiert ist, innerhalb von diese Grenzen zu sein.

ist dies die Funktion

function math.clamp(value, low, high) 
    if low and value <= low then 
     return low 
    elseif high and value >= high then 
     return high 
    end 
    return value 
end 

Verwendungsbeispiel

local actualSpeed = math.clamp(calculatedSpeed, 0, 200) 

local temperature = math.clamp(temperature, -270) 

player.x = math.clamp(player.x, 0, map.width) 

cannon.rotation = math.clamp(cannon.rotation, -90, 90) 

local age = math.clamp(age, 1, 120) 

-- Six has higher probability than any other number 
local luckyDice = math.clamp(math.random(1, 10), nil, 6) 

source for further reading

EDIT:

local backGround = display.newRect(display.actualContentWidth/2,display.actualContentHeight/2,display.actualContentWidth,display.actualContentHeight) 
backGround:setFillColor(0.5, 0.5, 0.5, 1.0) 


local player = display.newCircle(100,100,50) 

function math.clamp(value, low, high) 
    if low and value <= low then 
     return low 
    elseif high and value >= high then 
     return high 
    end 
    return value 
end 


function movePlayer(event) 
    if(event.phase == "moved") then 
     local xPosition = event.x 
     local yPosition = event.y 

     xPosition = math.clamp(xPosition, 0, 150) 
     yPosition = math.clamp(yPosition, 0, 150) 

     transition.to(player, {x=xPosition,y=yPosition,time = 30}) 

    end 
end 


player.touch = movePlayer 

player:addEventListener("touch", movePlayer) 
backGround:addEventListener("touch", movePlayer) 
+1

Danke, das ist wahrscheinlich das, was ich brauche, aber für den Moment verstehe ich nicht ganz, wie ich es für meine Funktion movePlayer verwenden soll (ich habe gerade angefangen zu programmieren) – marques

+0

Ich habe meine Antwort bearbeitet und einen Code hinzugefügt ist einfach zu verstehen und zu testen, es verwendet die genannte Lösung, wenn Sie noch Hilfe benötigen, sagen Sie uns. – DeyaEldeen