Light Racer 2.0 - Day 31 - Anywhere Touch Swipe Control

I had previously written a little app that I was going to call "Fingerpaint" but I never released it because there already seemed to be other apps on the market that did that better. I did get it working and I'm glad I did because it made me very familiar with how to process sliding touches. I copied the code out of that sketch app and modified it to process touches for Light Racer. Now the user can touch anywhere on the screen and swipe in the direction they'd like the racer to go.

Day 31 - What was done:

I added anywhere touch swipe control.

Essentially what the code does is when the user swipes their finger, I turn the line segment from the start to the end in to a vector and then look at the angle of the vector. If the vector up is 0 degrees and down is 180 with the right half being positive and the left half being negative then from -45 to 45 degrees would be up, 45 to 135 would be right, 135 to 180,-180 to -135 is down and -135 to -45 is left. This worked very well. You can swipe anywhere you want on the screen as long or short as you like and it can be a little off-angle. So long as it's mostly in the right direction, the code will understand.

So how does one get a vector from two points? Easy! Say x1 and y1 are the starting points and x2 and y2 are the ending points.

First, to determine if this touch should be accepted, we need to set a certain threshold to get rid of over sensitivity.

int distance = Math.abs(x2 - x1) + Math.abs(y2 - y1);
if (distance > TOUCH_SENSITIVITY) {
float angleR = LightRacerUtil.fastatan2(x2 - x1, y2 - y1);
// process the angle, apply as input
}

That distance is just a simple manhattan distance. It is the total number of x+y points to get from the start to finish. It may make more sense to use euclidean distance but this is a little faster and works fine. Then I just use my fast atan2 to get the angle of the vector. My fast atan2 is about 50% faster than the regular one but is also much less accurate. It can be off by as much as 4 degrees. In all of my testing though, I didn't have any problems with the touch even with that margin of error so I stuck with it.

It's still better to use the trackball but I think users will enjoy being able to touch control, especially when it works well like this.

Discuss this and other topics in the forums

Post new comment

The content of this field is kept private and will not be shown publicly.
Add image
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <table> <tr> <td>
  • Lines and paragraphs break automatically.
  • Images can be added to this post.
  • Image links with 'rel="lightbox"' in the <a> tag will appear in a Lightbox when clicked on.
  • Image links with 'rel="lightshow"' in the <a> tag will appear in a Lightbox slideshow when clicked on.
  • Links to HTML content with 'rel="lightframe"' in the <a> tag will appear in a Lightbox when clicked on.
  • Links to video content with 'rel="lightvideo"' in the <a> tag will appear in a Lightbox when clicked on.
  • Links to inline or modal content with 'rel="lightmodal"' in the <a> tag will appear in a Lightbox when clicked on.

More information about formatting options

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.