4 Replies - 167 Views - Last Post: 07 August 2012 - 08:26 AM Rate Topic: -----

#1 RookieCookie  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 27
  • Joined: 05-August 12

AffineTransformed image to draw on coords help

Posted 07 August 2012 - 06:52 AM

Hello,

I have just affinetrasformed my image to rotate 45 degrees.
The draw code goes like this:

g2.drawImage(Ships.CruiserImage(), tx, null);//tx being the AffineTransform and null the imageObserver.


How do I draw it to specific coords?
Is This A Good Question/Topic? 0
  • +

Replies To: AffineTransformed image to draw on coords help

#2 cfoley  Icon User is offline

  • Cabbage
  • member icon

Reputation: 1508
  • View blog
  • Posts: 3,219
  • Joined: 11-December 07

Re: AffineTransformed image to draw on coords help

Posted 07 August 2012 - 07:09 AM

concatenate a translation instance to your transform.

Edit: or preConcatenate. I can never remember which to use in this situation.

This post has been edited by cfoley: 07 August 2012 - 07:12 AM

Was This Post Helpful? 0
  • +
  • -

#3 RookieCookie  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 27
  • Joined: 05-August 12

Re: AffineTransformed image to draw on coords help

Posted 07 August 2012 - 07:24 AM

View Postcfoley, on 07 August 2012 - 07:09 AM, said:

concatenate a translation instance to your transform.

Edit: or preConcatenate. I can never remember which to use in this situation.


Thats new for me, could you please put up an example so that I can see what you are talking about?
Was This Post Helpful? 0
  • +
  • -

#4 cfoley  Icon User is offline

  • Cabbage
  • member icon

Reputation: 1508
  • View blog
  • Posts: 3,219
  • Joined: 11-December 07

Re: AffineTransformed image to draw on coords help

Posted 07 August 2012 - 08:15 AM

Here is a short program that lets you drive a (triangular) car around the screen. The car object stores one AffineTransform for its position and rotation and this is modified appropriately every game tick.

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Polygon;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;


public class Car {
	private static final double speed = 4;
	private static final double rotationSpeed = 3.0 / 180.0 * Math.PI;
	
	private AffineTransform transform;
	private final Image image;
	
	
	public Car(Color colour) {
		transform = AffineTransform.getTranslateInstance(100, 100);
		image = generateImage(colour);
	}
	
	private static Image generateImage(Color colour) {
		BufferedImage result = new BufferedImage(50, 50, BufferedImage.TYPE_4BYTE_ABGR);
		Shape outline = new Polygon(
				new int[] {25, 49, 0},
				new int[] {0, 49, 49},
				3);
		Graphics2D g = result.createGraphics();
		g.setPaint(colour);
		g.fill(outline);
		g.setPaint(Color.black);
		g.draw(outline);
		//g.dispose();
		return result;
	}
	
	public void moveForwards() {
		transform.translate(0, -speed);
	}

	public void moveBackwards() {
		transform.translate(0, speed);
	}
	
	public void rotateClockwise() {
		transform.rotate(rotationSpeed, 25, 25);
	}

	public void rotateAnitclockwise() {
		transform.rotate(-rotationSpeed, 25, 25);
	}
	
	public void draw(Graphics2D g) {
		g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
		g.drawImage(image, transform, null);
	}

}



import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;


public class Tarmac extends JPanel implements KeyListener {
	
	private boolean forwards, backwards, right, left;
	private Car car;
	private Timer timer;
	
	public Tarmac() {
		car = new Car(Color.red.darker());
		timer = new Timer(15, new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				gameLoop();
			}
		});
		timer.start();
	}
	
	private void gameLoop() {
		if (forwards)  car.moveForwards();
		if (backwards) car.moveBackwards();
		if (left)      car.rotateAnitclockwise();
		if (right)     car.rotateClockwise();
		repaint();
	}

	@Override
	public void keyPressed(KeyEvent e) {
		int code = e.getKeyCode();
		if (code == KeyEvent.VK_UP)    forwards  = true;
		if (code == KeyEvent.VK_DOWN)  backwards = true;
		if (code == KeyEvent.VK_LEFT)  left      = true;
		if (code == KeyEvent.VK_RIGHT) right     = true;
	}

	@Override
	public void keyReleased(KeyEvent e) {
		int code = e.getKeyCode();
		if (code == KeyEvent.VK_UP)    forwards  = false;
		if (code == KeyEvent.VK_DOWN)  backwards = false;
		if (code == KeyEvent.VK_LEFT)  left      = false;
		if (code == KeyEvent.VK_RIGHT) right     = false;
	}
	
	@Override
	public void paintComponent(Graphics g) {
		g.setColor(Color.LIGHT_GRAY);
		g.fillRect(0, 0, getWidth(), getHeight());
		car.draw((Graphics2D)g);
	}

	@Override
	public void keyTyped(KeyEvent e) {
		// not used
	}
	
	public static void main(String[] args) {
		JFrame demo = new JFrame("Demo");
		demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		demo.setSize(800, 600);
		Tarmac t = new Tarmac();
		demo.add(t);
		demo.addKeyListener(t);
		demo.setVisible(true);
	}

}


This post has been edited by cfoley: 07 August 2012 - 08:15 AM

Was This Post Helpful? 2
  • +
  • -

#5 RookieCookie  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 27
  • Joined: 05-August 12

Re: AffineTransformed image to draw on coords help

Posted 07 August 2012 - 08:26 AM

View Postcfoley, on 07 August 2012 - 08:15 AM, said:

Here is a short program that lets you drive a (triangular) car around the screen. The car object stores one AffineTransform for its position and rotation and this is modified appropriately every game tick.

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Polygon;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;


public class Car {
	private static final double speed = 4;
	private static final double rotationSpeed = 3.0 / 180.0 * Math.PI;
	
	private AffineTransform transform;
	private final Image image;
	
	
	public Car(Color colour) {
		transform = AffineTransform.getTranslateInstance(100, 100);
		image = generateImage(colour);
	}
	
	private static Image generateImage(Color colour) {
		BufferedImage result = new BufferedImage(50, 50, BufferedImage.TYPE_4BYTE_ABGR);
		Shape outline = new Polygon(
				new int[] {25, 49, 0},
				new int[] {0, 49, 49},
				3);
		Graphics2D g = result.createGraphics();
		g.setPaint(colour);
		g.fill(outline);
		g.setPaint(Color.black);
		g.draw(outline);
		//g.dispose();
		return result;
	}
	
	public void moveForwards() {
		transform.translate(0, -speed);
	}

	public void moveBackwards() {
		transform.translate(0, speed);
	}
	
	public void rotateClockwise() {
		transform.rotate(rotationSpeed, 25, 25);
	}

	public void rotateAnitclockwise() {
		transform.rotate(-rotationSpeed, 25, 25);
	}
	
	public void draw(Graphics2D g) {
		g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
		g.drawImage(image, transform, null);
	}

}



import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;


public class Tarmac extends JPanel implements KeyListener {
	
	private boolean forwards, backwards, right, left;
	private Car car;
	private Timer timer;
	
	public Tarmac() {
		car = new Car(Color.red.darker());
		timer = new Timer(15, new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				gameLoop();
			}
		});
		timer.start();
	}
	
	private void gameLoop() {
		if (forwards)  car.moveForwards();
		if (backwards) car.moveBackwards();
		if (left)      car.rotateAnitclockwise();
		if (right)     car.rotateClockwise();
		repaint();
	}

	@Override
	public void keyPressed(KeyEvent e) {
		int code = e.getKeyCode();
		if (code == KeyEvent.VK_UP)    forwards  = true;
		if (code == KeyEvent.VK_DOWN)  backwards = true;
		if (code == KeyEvent.VK_LEFT)  left      = true;
		if (code == KeyEvent.VK_RIGHT) right     = true;
	}

	@Override
	public void keyReleased(KeyEvent e) {
		int code = e.getKeyCode();
		if (code == KeyEvent.VK_UP)    forwards  = false;
		if (code == KeyEvent.VK_DOWN)  backwards = false;
		if (code == KeyEvent.VK_LEFT)  left      = false;
		if (code == KeyEvent.VK_RIGHT) right     = false;
	}
	
	@Override
	public void paintComponent(Graphics g) {
		g.setColor(Color.LIGHT_GRAY);
		g.fillRect(0, 0, getWidth(), getHeight());
		car.draw((Graphics2D)g);
	}

	@Override
	public void keyTyped(KeyEvent e) {
		// not used
	}
	
	public static void main(String[] args) {
		JFrame demo = new JFrame("Demo");
		demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		demo.setSize(800, 600);
		Tarmac t = new Tarmac();
		demo.add(t);
		demo.addKeyListener(t);
		demo.setVisible(true);
	}

}



Thanks! +1
Was This Post Helpful? 0
  • +
  • -

Page 1 of 1