Trouble getting x and y position, on a canvas

SlavaVB

Member
Licensed User
Longtime User
Hi, i wrote an app recently that tells you the x and y of the place where you touch the screen, however it doesn't work if there's a canvas on top of it. Any ideas or suggestions?

Thanks!
 

SlavaVB

Member
Licensed User
Longtime User
I got everything to work! check out my final code...

B4X:
Sub Process_Globals

   
   Dim Accelerometer As PhoneAccelerometer
   Dim AccX As Double
   Dim AccY As Double
   
   
   Dim Timer1 As Timer
   
   Dim xx(100) As Double
   Dim yy(100) As Double
   Dim vx(100) As Double
   Dim vy(100) As Double
   Dim ax(100) As Double
   Dim ay(100) As Double
   Dim r(100) As Double
   Dim dt As Double
   
   Dim w As Double
   Dim h As Double
   Dim diffx As Double
   Dim diffy As Double
   Dim dist1 As Double
   Dim dist2 As Double
   
   Dim xval As Double
   Dim yval As Double

   
End Sub

Sub Globals
   Dim Canvas1 As Canvas
   

   
End Sub

Sub Activity_Create(FirstTime As Boolean)
   
   
   
   canvas1.Initialize(Activity)
   
   Globe
End Sub


Sub Globe
   



   
   w = Canvas1.Bitmap.Width 
   h = Canvas1.Bitmap.Height
   
   xx(0) = w/2
   yy(0) = h/2
   vx(0) = Rnd(-5,5)
   vy(0) = Rnd(-5,5)
   ax(0) = 0
   ay(0) = 0
   r(0) = 100
   
   For i = 1 To 99
      xx(i) = Rnd(0,w)
      yy(i) = Rnd(0,h)
      vx(i) = Rnd(-50,50)   
      vy(i) = Rnd(-50,50)
      ax(0) = 0
      ay(0) = 0
      r(i) = Rnd(10,15)
   Next 
   
   dt = .1
   
   Accelerometer.StartListening("Accelerometer") 
     
     Timer1.Initialize("MainEvent", 10)   
   Timer1.Enabled = True
    
  
End Sub

Sub MainEvent_Tick
      
      For i = 0 To 99
      
         For j = 0 To 99
            ax(j) = 0.0;
            ay(j) = 0.0;
         Next
            
         For j = 0 To 99
         
            If i <> j Then
               diffx = xx(i) - xx(j)
               diffy = yy(i) - yy(j)
               dist1 = Sqrt(Power(diffx,2)+Power(diffy,2))
               dist2 = r(i) + r(j)
               
               If dist1 < dist2 Then
                  deltaDistance = (dist2 - dist1)
               
                  xval = (((deltaDistance * 10.0) / dist2) * diffx)
                  yval = (((deltaDistance * 10.0) / dist2) * diffy)
                  
                  ax(i) = ax(i) + xval
                       ay(i) = ay(i) + yval
 
               End If
            
            End If
         Next
      
         vx(i) = (vx(i) + (ax(i) * dt)) * .99 + AccX
         vy(i) = (vy(i) + (ay(i) * dt)) * .99 + AccY
           xx(i) = xx(i) + (vx(i) * dt)
         yy(i) = yy(i) + (vy(i) * dt)
       
         If xx(i)-r(i) < 0 Then
            vx(i) = -vx(i)
            xx(i) = 0 + r(i)
         End If
         If yy(i)-r(i) < 0 Then
            vy(i) = -vy(i)
            yy(i) = 0 + r(i)
         End If
         If xx(i)+r(i) > w Then
            vx(i) = -vx(i)
            xx(i) = w - r(i)
         End If
         If yy(i)+r(i) > h Then
            vy(i) = -vy(i)
            yy(i) = h - r(i)
         End If
         
         
      Next 
      
        Canvas1.DrawColor(Colors.Black)
      
      Canvas1.DrawCircle(xx(0),yy(0),r(0),Colors.Red,True,5)
      For i = 1 To 99
         Canvas1.DrawCircle(xx(i),yy(i),r(i),Colors.Green,True,5)
      Next 
        Activity.Invalidate
      DoEvents 

End Sub
Sub Activity_Touch (Action As Int, X As Float, Y As Float)
   xx(0) = x
   yy(0) = y
   vx(0) = 0
   vy(0) = 0
   
End Sub

Sub Activity_Resume
    Accelerometer.StartListening("Accelerometer")
    Timer1.Enabled = True
End Sub

Sub Activity_Pause (UserClosed As Boolean)
   Accelerometer.StopListening
    Timer1.Enabled = False
End Sub



Sub Accelerometer_AccelerometerChanged (X As Float, Y As Float, Z As Float)
    
   
   AccX = -(x/10) * 100
   Accy = (y/10) * 100

   
End Sub


let me know how you like it
 
Upvote 0

SlavaVB

Member
Licensed User
Longtime User
you can change the timer interval and the DT variable to 1 or something even larger. that should fix the lagging, it lags most when theres a lot of concurrent collisions... do you know by any chance how tot urn on and off the flash light... i was thinking of making a universal remote with it (it should be bright enough for the wavelength to not matter... i think)
 
Upvote 0

thedesolatesoul

Expert
Licensed User
Longtime User
do you know by any chance how tot urn on and off the flash light... i was thinking of making a universal remote with it (it should be bright enough for the wavelength to not matter... i think)

there is an app here for the flashlight by francoisg: http://www.b4x.com/forum/basic4android-share-your-creations/11664-flashlight-app.html#post65126

but you cannot use the flashlight as a remote. you need an infra-red light source and i dont think that the flash light will produce infra-red light?
 
Upvote 0

SlavaVB

Member
Licensed User
Longtime User
Upvote 0

SlavaVB

Member
Licensed User
Longtime User
Do you by any chance know why my app doesn't isntall when i moved it to another directory? I tried copying the source and doing the settings manually by hand, but after downloading onto my device, it said, Application not installed... do you know what this means?
 
Upvote 0

SlavaVB

Member
Licensed User
Longtime User
is there a way to make your own object class in basic4android? im thinking of making a FEA jello cube simulation
 
Upvote 0
Top