Java-Gaming.org    
Featured games (91)
games approved by the League of Dukes
Games in Showcase (579)
games submitted by our members
Games in WIP (499)
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  
  Affine Transformation Coordinate System Explain  (Read 1314 times)
0 Members and 1 Guest are viewing this topic.
Offline 8bitooze

Senior Newbie





« Posted 2011-02-05 19:14:39 »

I am using Affine Transformation to position my game objects on screen. My applet is 320 * 240, yet the leftmost edge is -80 for one of the objects so far and the rightmost being 240. The object in question is a 32 * 8 rectangle shape. To me it seems my coordinates are "crooked". Could someone please explain this to me? Any assistance in this matter would be greatly appreciated.

Sincerely,

8BitOoze

[size=3]8BitOoze[/size]
Offline krasse
« Reply #1 - Posted 2011-02-06 12:36:02 »

Is it 2D or 3D?

How do you create the transformation? Directly with the matrix or using a helper function like translate(), rotate(), lookAt() etc. ?

It is possible to create a shew transformation with with an affine transform, if that is what you mean by "crooked".

Show some of your code! Smiley

Offline 8bitooze

Senior Newbie





« Reply #2 - Posted 2011-02-07 15:32:19 »

Quote
Is it 2D or 3D?
2D

Quote
How do you create the transformation? Directly with the matrix or using a helper function like translate(), rotate(), lookAt() etc. ?
Using g2d.translate(object.getX(), object.getY());

Quote
It is possible to create a shew transformation with with an affine transform, if that is what you mean by "crooked".

Show some of your code! Smiley
Ok, here's a link to the latest version of my code with the shrewed affine transformation link

Any assistence in this matter would be greatly appreciated.

Sincerely,

8BitOoze

[size=3]8BitOoze[/size]
Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline krasse
« Reply #3 - Posted 2011-02-07 18:01:22 »

The problem is that you both translate the shape in the constructor for Ball and Paddle AND in the drawing.

This is the explanation for the extra offset. Just set the translation in the constructors to zero and it will work.

Offline 8bitooze

Senior Newbie





« Reply #4 - Posted 2011-02-07 21:01:18 »

I don't understand what you mean.

Paddle constructor:
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
// class constructor
  public Paddle(double x, double y, double width, double height)
   {
      // set the paddles x position
     setX(x);
      // set the paddles y position
     setY(y);
      // set the paddles width
     setWidth(width);
      // set the paddles height
     setHeight(height);
      // set the paddles shape
     setShape(new Rectangle((int)getX(), (int)getY(), (int)getWidth(), (int)getHeight()));
   }


Ball Constructor:
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
// class constructor
  public Ball(double x, double y, double width, double height)
   {
      // set the balls x position
     setX(x);
      // set the balls y position
     setY(y);
      // set the balls width
     setWidth(width);
      // set the balls height
     setHeight(height);
      // set the balls shape
     setShape(new Rectangle((int)getX(), (int)getY(), (int)getWidth(), (int)getHeight()));
   }


I don't see any g2d.transform() in there anywhere. If you mean changing my EightBitOoze constructor as follows:
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
public final void init()
   {
      // create the backbuffer for smooth graphics
     backbuffer = new BufferedImage(getSize().width, getSize().height, BufferedImage.TYPE_INT_RGB);
      g2d = backbuffer.createGraphics();

      // create the identity transform
     identity = new AffineTransform();

      // create an instance of the paddle object
     paddle = new Paddle(getSize().width / 4, 106, 32, 8);

      // set the paddle's x velocity
     paddle.setVX(2);

      // create an instance of the ball object
     ball = new Ball(getSize().width / 4, 10, 8, 8);

      // set the players score to 0
     score = 1234;

      // start the user input listener
     addKeyListener(this);
   }


And changing the update method to:
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  
public final void update(Graphics g)
   {
      // erase the background
     g2d.setPaint(Color.LIGHT_GRAY);
      g2d.fillRect(0, 0, getSize().width, getSize().height);

      // draw the statusbar
     g2d.setPaint(Color.GREEN);
      g2d.fillRect(0, getSize().height - STATUSBARHEIGHT, getSize().width, STATUSBARHEIGHT);

      // draw the players score
     g2d.setPaint(Color.WHITE);
      g2d.drawString("Score: " + Integer.toString(score), 0, (getSize().height - STATUSBARHEIGHT) + (STATUSBARHEIGHT /2));

      // draw the ball
     g2d.setPaint(Color.BLUE);
      g2d.translate(ball.getX(), ball.getY());
      g2d.fill(ball.getShape());

      // draw the paddle
     g2d.translate(paddle.getX(), paddle.getY());
      g2d.fill(paddle.getShape());

      // repaint the applet window
     paint(g);
   }


Then please let me know as I'm not sure what you mean when you say I'm translating on the ball/paddle constructor when I can't see a single translate call in them. Any assistance in this matter would be greatly appreciated.

Sincerely,

8BitOoze

[size=3]8BitOoze[/size]
Offline krasse
« Reply #5 - Posted 2011-02-07 22:38:03 »

The shape is translated with this statement:
1  
2  
3  
4  
setShape(new Rectangle((int)getX(), (int)getY(), (int)getWidth(), (int)getHeight()));

// Should be this instead:
// setShape(new Rectangle(0, 0, (int)getWidth(), (int)getHeight()));


In the animation you draw the same shape translated once more but then you draw the shape that is positioned at the initial (getX(), getY()) position and you get an offset.

Offline 8bitooze

Senior Newbie





« Reply #6 - Posted 2011-02-08 17:15:10 »

The shape is translated with this statement:
1  
2  
3  
4  
setShape(new Rectangle((int)getX(), (int)getY(), (int)getWidth(), (int)getHeight()));

// Should be this instead:
// setShape(new Rectangle(0, 0, (int)getWidth(), (int)getHeight()));


In the animation you draw the same shape translated once more but then you draw the shape that is positioned at the initial (getX(), getY()) position and you get an offset.

Wow i didn't know that thanks. I did what you said and it worked.

Sincerely,

8BitOoze

[size=3]8BitOoze[/size]
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.

xsi3rr4x (31 views)
2014-04-15 18:08:23

BurntPizza (28 views)
2014-04-15 03:46:01

UprightPath (43 views)
2014-04-14 17:39:50

UprightPath (26 views)
2014-04-14 17:35:47

Porlus (42 views)
2014-04-14 15:48:38

tom_mai78101 (64 views)
2014-04-10 04:04:31

BurntPizza (124 views)
2014-04-08 23:06:04

tom_mai78101 (224 views)
2014-04-05 13:34:39

trollwarrior1 (190 views)
2014-04-04 12:06:45

CJLetsGame (198 views)
2014-04-01 02:16:10
List of Learning Resources
by SHC
2014-04-18 03:17:39

List of Learning Resources
by Longarmx
2014-04-08 03:14:44

Good Examples
by matheus23
2014-04-05 13:51:37

Good Examples
by Grunnt
2014-04-03 15:48:46

Good Examples
by Grunnt
2014-04-03 15:48:37

Good Examples
by matheus23
2014-04-01 18:40:51

Good Examples
by matheus23
2014-04-01 18:40:34

Anonymous/Local/Inner class gotchas
by Roquen
2014-03-11 15:22:30
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
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!