Hey Leute,
also mal ne Frage, vielleicht geht das garnicht so einfach wie ich es mir vorstelle.
Ich möchte - Snake-like - Ein Objekt (in meinem Fall ein Kreis) per Tasten-Druck, weiterlaufen lassen Geht ja per Runnable, aber doch nicht per Tastendruck oder?
Also so sieht das ganze bisher aus:
[HIGHLIGHT="Java"]
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Snake extends Applet implements KeyListener {
private int mouseX;
private int mouseY;
private int radius, diameter = 20;
private Color circleColor = Color.black;
private Color rectColor= Color.black;
public void init() {
Dimension full = getSize();
mouseX = full.width/2;
mouseY = full.height/2;
radius=diameter/2;
addKeyListener(this);
}
public void paint (Graphics g) {
g.drawRect(10,10,300,200);
g.setColor(rectColor);
g.setColor (circleColor);
g.fillOval ((mouseX-radius), (mouseY-radius),diameter, diameter);
}
public void keyPressed(KeyEvent ev) {
if (ev.getKeyCode() == KeyEvent.VK_RIGHT && mouseX <300) {
mouseX = mouseX+2;
mouseY = mouseY;
repaint();
}
if (ev.getKeyCode() == KeyEvent.VK_DOWN && mouseY <200) {
mouseX = mouseX;
mouseY = mouseY+2;
repaint();
}
if (ev.getKeyCode() == KeyEvent.VK_UP && mouseY >20) {
mouseX = mouseX;
mouseY = mouseY-2;
repaint();
}
if (ev.getKeyCode() == KeyEvent.VK_LEFT && mouseX >20) {
mouseX = mouseX-2;
mouseY = mouseY;
repaint();
}
if (mouseX == 20 && ev.getKeyCode() == KeyEvent.VK_LEFT){
System.out.println("Game Over!");
repaint();
}
if (mouseY==20 && ev.getKeyCode() == KeyEvent.VK_UP){
System.out.println("Game Over!");
}
if (mouseX==300 && ev.getKeyCode()== KeyEvent.VK_RIGHT){
System.out.println("Game Over!");
}
if (mouseY==200 && ev.getKeyCode() == KeyEvent.VK_DOWN){
System.out.println("Game Over!");
}
}
public void keyTyped(KeyEvent ev) {
}
public void keyReleased(KeyEvent ev) {
}
}
[/HIGHLIGHT]
Als weiteres wollte ich ncoh fragen, wenn ich das ganze per GameLoop mache, wie würde das funktionieren? einfach while(true){ davor setzen? Wäre ja ganz schön. Nur wenn ich das mache, dann bewegt sich der Kreis kein Stück, sondern er bleibt stehen (im Applet) und unten kommt die ganze Zeit per System.out.println("Game Over!") :-D sieht alles sehr lustig aus, aber funktionieren tut es nicht .
Bin ich komplett auf dem Holzweg, oder gibt es da eine einfache Lösung?
also mal ne Frage, vielleicht geht das garnicht so einfach wie ich es mir vorstelle.
Ich möchte - Snake-like - Ein Objekt (in meinem Fall ein Kreis) per Tasten-Druck, weiterlaufen lassen Geht ja per Runnable, aber doch nicht per Tastendruck oder?
Also so sieht das ganze bisher aus:
[HIGHLIGHT="Java"]
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Snake extends Applet implements KeyListener {
private int mouseX;
private int mouseY;
private int radius, diameter = 20;
private Color circleColor = Color.black;
private Color rectColor= Color.black;
public void init() {
Dimension full = getSize();
mouseX = full.width/2;
mouseY = full.height/2;
radius=diameter/2;
addKeyListener(this);
}
public void paint (Graphics g) {
g.drawRect(10,10,300,200);
g.setColor(rectColor);
g.setColor (circleColor);
g.fillOval ((mouseX-radius), (mouseY-radius),diameter, diameter);
}
public void keyPressed(KeyEvent ev) {
if (ev.getKeyCode() == KeyEvent.VK_RIGHT && mouseX <300) {
mouseX = mouseX+2;
mouseY = mouseY;
repaint();
}
if (ev.getKeyCode() == KeyEvent.VK_DOWN && mouseY <200) {
mouseX = mouseX;
mouseY = mouseY+2;
repaint();
}
if (ev.getKeyCode() == KeyEvent.VK_UP && mouseY >20) {
mouseX = mouseX;
mouseY = mouseY-2;
repaint();
}
if (ev.getKeyCode() == KeyEvent.VK_LEFT && mouseX >20) {
mouseX = mouseX-2;
mouseY = mouseY;
repaint();
}
if (mouseX == 20 && ev.getKeyCode() == KeyEvent.VK_LEFT){
System.out.println("Game Over!");
repaint();
}
if (mouseY==20 && ev.getKeyCode() == KeyEvent.VK_UP){
System.out.println("Game Over!");
}
if (mouseX==300 && ev.getKeyCode()== KeyEvent.VK_RIGHT){
System.out.println("Game Over!");
}
if (mouseY==200 && ev.getKeyCode() == KeyEvent.VK_DOWN){
System.out.println("Game Over!");
}
}
public void keyTyped(KeyEvent ev) {
}
public void keyReleased(KeyEvent ev) {
}
}
[/HIGHLIGHT]
Als weiteres wollte ich ncoh fragen, wenn ich das ganze per GameLoop mache, wie würde das funktionieren? einfach while(true){ davor setzen? Wäre ja ganz schön. Nur wenn ich das mache, dann bewegt sich der Kreis kein Stück, sondern er bleibt stehen (im Applet) und unten kommt die ganze Zeit per System.out.println("Game Over!") :-D sieht alles sehr lustig aus, aber funktionieren tut es nicht .
Bin ich komplett auf dem Holzweg, oder gibt es da eine einfache Lösung?