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?




Posted 07 August 2012 - 06:52 AM
g2.drawImage(Ships.CruiserImage(), tx, null);//tx being the AffineTransform and null the imageObserver.
Posted 07 August 2012 - 07:24 AM
Posted 07 August 2012 - 08:15 AM
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
Posted 07 August 2012 - 08:26 AM
cfoley, on 07 August 2012 - 08:15 AM, said:
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);
}
}
|
|
Query failed: connection to localhost:3312 failed (errno=111, msg=Connection refused).
|
