Hi !
Featured games (91)
games approved by the League of Dukes
Games in Showcase (756)
Games in Android Showcase (229)
games submitted by our members
Games in WIP (842)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  Connecting two points.  (Read 2277 times)
0 Members and 1 Guest are viewing this topic.
Offline lethargic

Junior Newbie

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

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??
Offline 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.

弾幕 ☆ @mahonnaiseblog
Offline cylab

JGO Kernel

Medals: 180

« 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"

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!
Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline lethargic

Junior Newbie

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

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

Junior Devvie

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

Offline Maverick

Senior Newbie

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

See if this helps you:
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 update
public void update(){
        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  

DesertCoockie (53 views)
2018-05-13 18:23:11

nelsongames (84 views)
2018-04-24 18:15:36

nelsongames (75 views)
2018-04-24 18:14:32

ivj94 (760 views)
2018-03-24 14:47:39

ivj94 (88 views)
2018-03-24 14:46:31

ivj94 (644 views)
2018-03-24 14:43:53

Solater (103 views)
2018-03-17 05:04:08

nelsongames (185 views)
2018-03-05 17:56:34

Gornova (427 views)
2018-03-02 22:15:33

buddyBro (1087 views)
2018-02-28 16:59:18
Java Gaming Resources
by philfrei
2017-12-05 19:38:37

Java Gaming Resources
by philfrei
2017-12-05 19:37:39

Java Gaming Resources
by philfrei
2017-12-05 19:36:10

Java Gaming Resources
by philfrei
2017-12-05 19:33:10

List of Learning Resources
by elect
2017-03-13 14:05:44

List of Learning Resources
by elect
2017-03-13 14:04:45

SF/X Libraries
by philfrei
2017-03-02 08:45:19

SF/X Libraries
by philfrei
2017-03-02 08:44:05 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‑
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!