When touching and dragging this guy I thought it would work but it allows me to drag two directions only and not the other two.
Anything obvious I’m missing?
function Kid:touched(touch)
-- Codea does not automatically call this method
if touchInRect(touch.x,touch.y,self.x,self.y,self.w,self.h) then
if touch.state == BEGAN then
-- sound()
print("you did it!")
end
if touch.state == MOVING then
if self.movable then
self.x = touch.x
self.y = touch.y
end
end
end
end
Which directions can you drag? You wouldnt, by chance have a translate hidden down in touchInRect? And just as a double check, your draw function for Kid does have self.x, self.y?
Up and right. I do have self.x and self.y. Is that bad?
Kid = class()
function Kid:init(name,x,y,w,h,layer)
-- you can accept and set parameters here
self.x = x
self.y = y
self.w = w
self.h = h
self.name = name
self.movable = true
self.layer = layer
end
function Kid:draw()
-- Codea does not automatically call this method
sprite(self.name,self.x,self.y,self.w,self.h)
end
function Kid:touched(touch)
-- Codea does not automatically call this method
if touchInRect(touch.x,touch.y,self.x,self.y,self.w,self.h) then
if touch.state == BEGAN then
-- sound()
print("you did it!")
end
if touch.state == MOVING then
if self.movable then
self.x = touch.x
self.y = touch.y
end
end
end
end
function touchInRect(tX, tY, x, y, w, h)
if tX >= x and tX <= x + w and tY >= y and tY <= y + h then
return true
else
return false
end
end
It’s the if statement inside of touchInRect, I believe. Looks like it’s filtering out any touches left or below the current position. It’s only accepting touches within the object width, all of them right and above the current spot.
Kid = class()
function Kid:init(name,x,y,w,h,layer)
-- you can accept and set parameters here
self.x = x
self.y = y
self.w = w
self.h = h
self.name = name
self.movable = true
self.layer = layer
self.domove = false
-- watch("self.domove")
self.pos = vec2(x,y)
self.position = vec2(x,y)
end
function Kid:draw()
-- Codea does not automatically call this method
sprite(self.name,self.x,self.y,self.w,self.h)
end
function Kid:touched(touch)
-- Codea does not automatically call this method
if touchInRect(touch.x,touch.y,self:left(),self:top(),self:right(),self:bottom()) then
-- if touch.state == MOVING then
if self.movable then
-- if self.domove then
self.x = touch.x
self.y = touch.y
self.position = vec2(self.x,self.y)
--end
end
-- end
return true
end
--print(self.domove)
end
function Kid:center()
return vec2(self.position.x, self.position.y + self.height / 2)
end
function Kid:left()
return self.position.x - self:halfwidth()
end
function Kid:right()
return self.position.x + self:halfwidth()
end
function Kid:top()
return self.position.y + self.h * 1.5
end
function Kid:bottom()
return self.position.y - self.h *1.5
end
function Kid:halfwidth()
return self.w / 2
end
function touchInRect(tX, tY, l, t, r, b)
-- print("tx"..tX)
-- print(l)
-- print(r)
-- print(tY)
-- print(t)
-- print(b)
if tX >= l and tX <=r and tY >= b and tY <= t then
-- print("true")
return true
else
return false
end
end