# Bild auf aktueller position drehen



## xtoph (25. Mrz 2004)

hi

ich versuche gerade eine art autorennspiel zu programmieren. hierzu möchte ich das entsprechende auto steuern.
wenn ich vor und zurück drücke, soll es fahren und bei rechts und links, sich drehen.

jetzt hab ich folgendes problem. wenn ich auf der stelle drehen kann, kann ich nicht mehr vor und zurück fahren, sonder nur nach oben oder unten. ich möchte aber in fahrtrichtung fahren. und wenn ich in fahrtrichtung fahren kann, kann ich nicht mehr auf der stelle drehn, es ist wie verhext. probier jetzt schon 2tage.

vielleicht kann mir jemand helfen:


```
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;


/*
 * Created on 24.03.2004
 */

/**
 * @author _xtoph_
 */
public class Bild extends Canvas   {
	Image i;
	double a;
	KeyListener kl = new KeyListener(this);
	
	int xpos = 20;
	int ypos = 20;
	
	public Bild(Image i){
		this.i=i;
		a=0;
		addKeyListener(kl);
		
}
	
	
	public int getPosX(){
		return i.getHeight(this);
		//return getX();
	}
	
	
	
public void paint(Graphics g){
	
	Graphics2D g2d = (Graphics2D) g;
		

		//rotation

	//	 AffineTransform at = AffineTransform.getRotateInstance( a, 100 /2, 100 /2 ); 

	//	  g2d.setTransform( at ); 

		g2d.translate(xpos+75,ypos+50);
		g2d.rotate(a);
		g2d.translate(- (xpos+75),- (ypos+50));

		g2d.drawImage(i, (int) xpos, (int) ypos, this);

		g2d.drawString("bl"+i.getHeight(this) + i.getWidth(this) + g2d.getPaint() + this.i.getHeight(this), 200, 200);
		
	}
	
	
}
```

wenn ich die zeilen ändere:

```
g2d.translate(xpos+75,xpos+50);
		g2d.rotate(a);
		g2d.translate(- (xpos+75),- (xpos+50));
```

kann ich zwar fahren, aba nich mehr auf der stelle drehn....


hier noch der KeyAdapter:


```
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;



/**
 * @author _xtoph_
 *
 * To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Generation - Code and Comments
 */
class KeyListener extends KeyAdapter {
	Bild bild1;

	KeyListener(Bild bi) {

		bild1 = bi;
	}

	public void keyPressed(KeyEvent event) {
		
		switch (event.getKeyCode()) {
			case (KeyEvent.VK_DOWN) :
				bild1.ypos = bild1.ypos + 2;
				break;
			case (KeyEvent.VK_UP) :
			bild1.ypos = bild1.ypos - 2;
				break;
			case (KeyEvent.VK_LEFT) :
			bild1.a = bild1.a - 0.03;
				break;
			case (KeyEvent.VK_RIGHT) :
			bild1.a = bild1.a + 0.03;
				break;

		}

		bild1.repaint();
	}
}
```

es wäre super, wenn mir jemand helfen könnte.

THX


----------



## Thanni (25. Mrz 2004)

ähm du fragst doch beim keypressed im switch immer nur eine taste ab glaube da liegt das problem probiere mal noch zu programmmieren was er machen soll wenn man die und die taste drückt ...

nach dem motto

        case (KeyEvent.VK_UP) && (KeyEvent.VK_LEFT) :  ....

 weiss aber nicht ob das geht


gruß thanni


----------



## Guest (26. Mrz 2004)

na so eifach wirds nich gehen, da muss man mit sinus und so rechnen aba im moment blick ich da nich durch

hab auch nirgends mal ne anleitung gefunden


----------

