Java-Gaming.org Hi !
 Featured games (90) games approved by the League of Dukes Games in Showcase (684) Games in Android Showcase (196) games submitted by our members Games in WIP (752) games currently in development
 News: Read the Java Gaming Resources, or peek at the official Java tutorials
Pages: [1]
 ignore  |  Print
 Affine Transformation Coordinate System Explain  (Read 1847 times) 0 Members and 1 Guest are viewing this topic.
8bitooze

Senior Newbie

 « Posted 2011-02-05 18: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]
krasse
 « Reply #1 - Posted 2011-02-06 11: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".

8bitooze

Senior Newbie

 « Reply #2 - Posted 2011-02-07 14: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".

Any assistence in this matter would be greatly appreciated.

Sincerely,

8BitOoze

[size=3]8BitOoze[/size]
krasse
 « Reply #3 - Posted 2011-02-07 17: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.

8bitooze

Senior Newbie

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

I don't understand what you mean.

 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]
krasse
 « Reply #5 - Posted 2011-02-07 21: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.

8bitooze

Senior Newbie

 « Reply #6 - Posted 2011-02-08 16: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.

 orrenravid (239 views) 2016-07-16 03:57:23 theagentd (308 views) 2016-07-11 14:28:54 Hydroque (394 views) 2016-07-06 05:56:57 Hydroque (551 views) 2016-07-03 08:52:54 GrandCastle (415 views) 2016-07-01 09:13:47 GrandCastle (408 views) 2016-07-01 09:09:45 CopyableCougar4 (462 views) 2016-06-25 16:56:52 Hydroque (430 views) 2016-06-22 02:17:53 SwampChicken (395 views) 2016-06-20 13:22:57 SwampChicken (308 views) 2016-06-20 13:22:49
 Archive 30x Slyth2727 24x Brynn 23x EgonOlsen 22x orangepascal 21x orange451 20x TritonDreyja 19x Spasi 18x Opiop 11x LiquidNitrogen 11x Longor1996 10x ziozio 10x princec 10x Phased 10x h.pernpeintner 9x theagentd 9x
 Making a Dynamic Plugin Systemby Hydroque2016-06-25 00:13:25Java Data structures2016-06-13 21:22:09Java Data structures2016-06-13 21:20:42FPS Camera Tutorialby Hydroque2016-05-22 05:40:58Website offering 3D Models specifically for games for freeby vusman2016-05-18 17:23:09Website offering 3D Models specifically for games for freeby vusman2016-05-09 08:50:56Website offering 3D Models specifically for games for freeby vusman2016-05-06 11:10:21Website offering 3D Models specifically for games for freeby vusman2016-04-29 12:56:17
 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