Direction will be in the range -180 to 180 so don't use abs! Always use sin/cos for y/x respectively when in y+ down 2D coordinate systems, otherwise x/y respectively.
Here is kind of what you want // tickDelta should be something like .016f to .033f - definitely should total 1.0f per second :) float tickDelta = (currentMs - lastMs) / 1000f; // now mMoveSpeed can be expressed in units-per-second and it'll work at any framerate if you multiply by tickdelta float touchDelta = (float)(TouchY - V.CurY) / (TouchX - V.CurX); float dirRads = (float)Math.atan(touchDelta); float amountX = (float)Math.cos(dirRads) * mMoveSpeed * tickDelta; float amountY = (float)Math.sin(dirRads) * mMoveSpeed * tickDelta; x += amountX; y += amountY; // no additional checks needed. This is how you do 2D directional movement. // this assumes that either TouchX/TouchY or V is set only when the touch is touched down initially so that a vector is made when the touch moves and that value is not updated. On Aug 26, 8:40 pm, Jeffrey <jeffisagen...@gmail.com> wrote: > I know this is more of a general programming question, but my Android > friends here have always been helpful. I am trying to make an image > move from one part of the screen to a position the user touches, as a > constant speed. I don't know the best way to go about doing this and > the way I have been trying to get to work is taxing my brain too much. > > I have been using geometry to calculate slope, then using Sin * > movement speed to calculate the difference in X,Y coordinates. > > This is the code I'm looking at: > > TouchX = V.TX; (This is the touch event coordinates > TouchY = > V.TY; ) > > Slope = (TouchY - V.CurY) / (TouchX - V.CurX); (this > figures out > the slope of the line to the touch point) > DegreeSlopeY = Math.atan(Slope); > DegreeSlopeY = Math.abs(DegreeSlopeY); > (this is so > that I can calculate the direction the image should travel along the > slope) > DegreeSlopeX = (90.0000000000000 - DegreeSlopeY); > NewY = (mMoveSpeed * Math.sin(DegreeSlopeY)); (This > calculates the > shift in Y axis for the image) > NewX = (mMoveSpeed * Math.sin(DegreeSlopeX)); (This > calculates the > shift in X axis for the image) > if(TouchX < V.CenterX) NewX = -NewX; (This is to > finish > calculating the correct X axis direction to travel) > if(TouchY < V.CenterY) NewY = -NewY; (This is to > finish > calculating the correct X axis direction to travel) > > The problem that I'm having is the image is veering way of course when > traveling in Y heavy paths. When traveling horizontally it works > almost perfect. > > I know there is probably an easier way though I don't know how to use > a lot of things (like OpenGLES) so if your advice is to use a > different method please link a tutorial for that method if you know of > one. > > Thanks in advance. -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en