Java-Gaming.org
 Featured games (81) games approved by the League of Dukes Games in Showcase (497) Games in Android Showcase (114) games submitted by our members Games in WIP (563) games currently in development
 News: Read the Java Gaming Resources, or peek at the official Java tutorials
Pages: [1]
 ignore  |  Print
 Connecting two points.  (Read 1090 times) 0 Members and 1 Guest are viewing this topic.
lethargic

Junior Newbie

 « Posted 2005-12-14 11:12:49 »

Hi.
I don't have much experience with graphics, but my question is pretty straight foward.
This question might go a bit into geometry.

If I have two points on a canvas, and I want to say.. make a sprite travel from one to the other in a straight line, how would I do that?

For example, if I have (23, 43) and (130, 20), how would I best track every coordinate between them?
Like, if I could just get the "direction" to go in I could easily track it myself, is the delta like direction?
How would I get that??
oNyx

JGO Coder

Medals: 2

pixels! :x

 « Reply #1 - Posted 2005-12-14 11:45:33 »

Linear interpolation would be a simple solution. However, getting the speed right would be a tad painful with this approach.

(23, 43) and (130, 20)... that would be (107, -23) as vector, which could be then normalized and after that you can just move the character in that direction x units per frame (a simple multiplication).

LWJGL for example comes with some vector classes. Just get the source and take a look at how that stuff is done.

cylab

JGO Ninja

Medals: 49

 « Reply #2 - Posted 2005-12-14 12:41:21 »

The delta would be the "raw" form of the direction and corresponds exactly to the vector (107, -23) oNyx pointed out. To normalize a vector means to divide this vector, so that the line you draw along this direction is exactly of the length 1, meaning dividing the x/y delta values by the overall lenght of your "raw" direction. You can calculate this using the formula of pythagoras: double len=Math.sqrt(Math.pow(x,2)+Math.pow(y,2)).

Normalizing the direction vector has the advantage of representing the x and y deltas you need to travel 1 unit in the desired direction.

A decent vector library can take away the details of such operations and offers the benefit of easy transition from 2D graphics to 3D graphics, so I would suggest to get some reading on linear algebra and vector math in detail. I can recommend the book "Essential Mathematics for Games and Interactive Applications"
http://www.amazon.com/gp/product/155860863X/qid=1134564195/sr=8-2/ref=sr_8_xs_ap_i2_xgl14/002-9312530-3104828?n=507846&s=books&v=glance

but it might be a bit much to swollow (700 pages, but it includes nearly all game related mathematics needed)

Mathias - I Know What [you] Did Last Summer!
lethargic

Junior Newbie

 « Reply #3 - Posted 2005-12-15 02:06:27 »

Thank you very much, this is a great place to start.
Kommi

Junior Member

All opinions will be lined up and shot!

 « Reply #4 - Posted 2005-12-15 20:17:41 »

I have code that does what you want, will post it up when I get home

Kommi
Maverick

Senior Newbie

 « Reply #5 - Posted 2005-12-17 23:59:33 »

See if this helps you:
 1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27 `public float toXPos;    public float toYPos;    public float vectX;    public float vectY;    public int initialYpos;    public int initialXpos;    private int dist;    public float d = 0;    public Rectangle targetRectangle;// in constructor        initialYpos = (int)yPos;        initialXpos = (int)xPos;        this.toXPos = (float)(fighterRectangle.getX()+Math.random()*(fighterRectangle.getWidth()));        this.toYPos = (float)(fighterRectangle.getY()+Math.random()*(fighterRectangle.getHeight()));        vectY =(toYPos-yPos);        vectX = (toXPos-xPos);        dist = (int)(Math.sqrt(vectX*vectX + vectY*vectY))/10; //by changin the 10 you will vary the speed of the object.//in updatepublic void update(){        d++;        xPos = (int)(d/dist*vectX + initialXpos);        yPos = (int)(d/dist*vectY+initialYpos);        rectangle.x = xPos;        rectangle.y = yPos;    }`

pd: did not try it. but i beleive it should work.
forgot to tell you, this will pick a random point of a rectangle to shoot to, if you want to always shoot straight just assign toXPos and toYPos an exact value.
Pages: [1]
 ignore  |  Print

You cannot reply to this message, because it is very, very old.

 Add your game by posting it in the WIP section, or publish it in Showcase. The first screenshot will be displayed as a thumbnail.
 BurntPizza (21 views) 2014-09-19 03:14:18 Dwinin (35 views) 2014-09-12 09:08:26 Norakomi (62 views) 2014-09-10 13:57:51 TehJavaDev (87 views) 2014-09-10 06:39:09 Tekkerue (42 views) 2014-09-09 02:24:56 mitcheeb (65 views) 2014-09-08 06:06:29 BurntPizza (47 views) 2014-09-07 01:13:42 Longarmx (35 views) 2014-09-07 01:12:14 Longarmx (40 views) 2014-09-07 01:11:22 Longarmx (36 views) 2014-09-07 01:10:19
 BurntPizza 37x Riven 18x Rayvolution 17x princec 17x basil_ 16x ags1 16x KevinWorkman 15x kevglass 12x LiquidNitrogen 11x nsigma 11x theagentd 11x HeroesGraveDev 9x The Lion King 7x Gibbo3771 6x cylab 6x EgonOlsen 6x
 List of Learning Resources2014-08-16 10:40:00List of Learning Resources2014-08-05 19:33:27Resources for WIP games2014-08-01 16:20:17Resources for WIP games2014-08-01 16:19:50List of Learning Resources2014-07-31 16:29:50List of Learning Resources2014-07-31 16:26:06List of Learning Resources2014-07-31 11:54:12HotSpot Optionsby dleskov2014-07-08 01:59:08
 java-gaming.org is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑gaming.org