Java-Gaming.org Java4K winners: [ by our judges | by the community ]         
Featured games (67)
games approved by the League of Dukes
Games in Showcase (∞)
games submitted by our members



News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  Print  
  Finding angles in an image?  (Read 779 times)
0 Members and 1 Guest are viewing this topic.
Offline gbeebe

Full Member
**

Posts: 145
Medals: 5



« on: 2011-10-16 00:19:11 »

I'm working on a Scorched Earth / Worms type game.  The map is randomly generated "uneven" terrain.  Checking for collision is easy enough with .getRGB(), however I want some projectiles to bounce around before exploding.  How should I go about finding the angle of the surface that the projectile hit in a map like this? 

The blue background is a separate image from the ground graphic, and is not used for collision detection.  Also, when a projectile explodes, I will be erasing a circle out of the ground image.  I thought about using an array of lines to define the outline of the surface, but trying to figure out how to cut out a segment and adding lines for the hole that was created, sounds like a pain.  The easiest way seems to be scanning pixels around the projectile (after it collides with the ground) to try to figure out the angle, but then how far out should I check, and how would I figure what is too far out?  Has anyone here done something like this before?
Offline ReBirth

JGO Wizard
****

Posts: 1272
Medals: 19



« Reply #1 on: 2011-10-16 00:37:32 »

For bounce you can implement physics library or do something harder. In my approach, I will identity each image based on the horizon so I can fugure out the angle given by colliding it. Use some standar small images for terrain like

####
# | #
# | #
####

####
#   /#
# /  #
####

Offline Eli Delventhal
« League of Dukes »

JGO Kernel
*****

Posts: 3573
Medals: 44


Game Engineer


« Reply #2 on: 2011-10-16 01:04:47 »

It's not so hard, actually. The easiest way to do it is just to count adjacent pixels and have pixels on the right do +1 to the slope and on the left -1, more or less. Depending on how many pixels you sample (3x3 or 4x4 usually) you can get more defined slopes.

Here is some code I have that I used to find angles in a game I made a while ago.

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
Vector hitVector = new Vector(0,0);
for(int i = 0; i < surrounding.length; i++)
{
   Point point = surrounding[i];

   if(image.getRaster().getPixel((int) c.x + point.x, (int) c.y + point.y,size)[3] == 0) continue;

   if(point.x < 0) hitVector.x += -1.0f / (-2.0f + point.x);
   if(point.x > 0) hitVector.x += -1.0f / (2.0f + point.x);
   if(point.y < 0) hitVector.y += -1.0f / (-2.0f + point.y);
   if(point.y > 0) hitVector.y += -1.0f / (2.0f + point.y);
}


See my work:
OTC Software
<br />
Currently Working On:
Secret project...
Quote from: _Riven
I edit JGO in production, because I simply don't waste time writing bugs
Pages: [1]
  Print  
 
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Page created in 0.085 seconds with 20 queries.