It seems that I cant understand multitouch. Here is my touch function with all the mess that is included:
function Player:touched(touch)
--Move
if touch.state==BEGAN then
self.touches[touch.id]=touch
end
for k,touchs in pairs(self.touches) do
if touchs.state==MOVING and touchs.x>0 and touchs.x<150 and
touchs.y>0 and touchs.y<150 then
self.speed=touchs.y/9
end
--Look x and y
if touchs.state==BEGAN then
self.dax=touchs.x
self.lyx=touchs.y
end
if touchs.state==MOVING and touchs.x>150 then
self.da=self.dalx-(touchs.x-self.dax)
self.angle=self.da/80
self.tly=self.lylx-(self.lyx-touchs.y)
self.tly=self.tly/100
if self.tly>1.5 then self.tly=1.5 end
if self.tly<-1.5 then self.tly=-1.5 end
end
if touchs.state==ENDED then
self.touch[touchs.id]=nil
self.speed=0
self.dax=0
self.dalx=self.da
self.lylx=self.tly
self.lyx=0
end
end
end
Oh, didnt mean to be unclear. What I want to acheive is to get the multitouch in the code to work, as it didnt when I tried it before posting this question. There is a problem somewhere, but I cant find it…
oh really? You want it to work? Silly me, i thought you wanted it not to work!
From the indication you’ve given me up to now, my most appropiate proposal would be: ‘make it work then, by correcting the bugs’. No, dont thank me, it is natural to help when i can.
Now, if you can be a bit more specific on describing what result you want exactly, maybe i will be able to be more specific too.
Haha, well I might not always be so clear.
However, what I want is the user to have one finger touching/adjusting the speed and another finger to look around. After figuring out the basics of multitouch I executed my code but the game didn’t respond. So thats the problem that I am incapable of solving.
I suspect that your code is getting called too often. Split it into
function Player:touched(touch)
--Move
if touch.state==BEGAN then
self.touches[touch.id]=touch
end
end
function Player:processTouches()
for k,touchs in pairs(self.touches) do
if touchs.state==MOVING and touchs.x>0 and touchs.x<150 and
touchs.y>0 and touchs.y<150 then
self.speed=touchs.y/9
end
--Look x and y
if touchs.state==BEGAN then
self.dax=touchs.x
self.lyx=touchs.y
end
if touchs.state==MOVING and touchs.x>150 then
self.da=self.dalx-(touchs.x-self.dax)
self.angle=self.da/80
self.tly=self.lylx-(self.lyx-touchs.y)
self.tly=self.tly/100
if self.tly>1.5 then self.tly=1.5 end
if self.tly<-1.5 then self.tly=-1.5 end
end
if touchs.state==ENDED then
self.touch[touchs.id]=nil
self.speed=0
self.dax=0
self.dalx=self.da
self.lylx=self.tly
self.lyx=0
end
end
end
@MMGames From what I got out of your questions, you want 2 squares that will control 2 different things. Here is a small example with 2 squares. Since I don’t know exactly what you want them to do, I just displayed the left and right x,y values as you move your fingers around the squares. You can take the touched function and add whatever code you want each square to do.
displayMode(FULLSCREEN)
function setup()
s1=vec2(0,0) -- x,y left square
s2=vec2(0,0) -- x,y right square
end
function draw()
background(40, 40, 50)
fill(255)
rect(100,100,150,150) -- display left square
rect(WIDTH-250,100,150,150) -- display right square
text(s1.x.." "..s1.y,200,HEIGHT/2) -- show left x,y values
text(s2.x.." "..s2.y,WIDTH-200,HEIGHT/2) -- show right x,y values
end
function touched(t)
if t.state==BEGAN or t.state==MOVING then
-- check left square
if t.x>100 and t.x<250 and t.y>100 and t.y<250 then
-- do whatever when the left square is touched
s1.x=t.x -- left square x,y positions
s1.y=t.y
end
-- chack right square
if t.x>WIDTH-250 and t.x<WIDTH-100 and t.y>100 and t.y<250 then
-- do whatever when the right square is touched
s2.x=t.x -- right square x,y positions
s2.y=t.y
end
end
end
That’s why I proposed gesture API since the beginning of Codea (was Codify). There are times when you just don’t want to get messy with touch detection.
Simple. You just need to update the variable in the tabe. It’s assigning a clone, not a pointer. Remove the first if statement to check if the touch’s state is BEGAN. This should work.
function Player:touched(touch)
--Move
self.touches[touch.id]=touch
for k,touchs in pairs(self.touches) do
if touchs.state==MOVING and touchs.x>0 and touchs.x<150 and
touchs.y>0 and touchs.y<150 then
self.speed=touchs.y/9
end
--Look x and y
if touchs.state==BEGAN then
self.dax=touchs.x
self.lyx=touchs.y
end
if touchs.state==MOVING and touchs.x>150 then
self.da=self.dalx-(touchs.x-self.dax)
self.angle=self.da/80
self.tly=self.lylx-(self.lyx-touchs.y)
self.tly=self.tly/100
if self.tly>1.5 then self.tly=1.5 end
if self.tly<-1.5 then self.tly=-1.5 end
end
if touchs.state==ENDED then
self.touch[touchs.id]=nil
self.speed=0
self.dax=0
self.dalx=self.da
self.lylx=self.tly
self.lyx=0
end
end
end