Hallo,
ich habe einen Beweglichen und skalierbaren Ball programmiert. jedoch kann ich ihn nur ungefähr bis zur Hälfte des Fensters bewegen, danach verschwindet er hinter einer unsichtbaren Kannte und an dieser Kannte bleiben sichtbare Reste des Balls hängen.
verwendet habe ich die ganz normale paint(Graphics g) Methode.
Kann mir jemand helfen?
ich habe einen Beweglichen und skalierbaren Ball programmiert. jedoch kann ich ihn nur ungefähr bis zur Hälfte des Fensters bewegen, danach verschwindet er hinter einer unsichtbaren Kannte und an dieser Kannte bleiben sichtbare Reste des Balls hängen.
verwendet habe ich die ganz normale paint(Graphics g) Methode.
Kann mir jemand helfen?
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
public class GamePanel extends JPanel implements Runnable, KeyListener, ActionListener{
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* @param args
*/
JFrame frame;
private boolean up;
private boolean down;
private boolean left;
private boolean right;
private boolean showfps=false;
private boolean gameStarted;
private boolean makesmaller;
private int y=0;
private int x=0;
private int xStretch=20;
private int yStretch=20;
long delta = 0;
long last = 0;
long fps = 0;
private boolean makebigger;
private boolean printcoordinates;
public static void main(String[] args) {
// TODO Auto-generated method stub
new GamePanel(800,500);
}
public GamePanel(int x, int y){
frame = new JFrame("Ball");
frame.setLocation(100, 100);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setPreferredSize(new Dimension(x,y));
frame.addKeyListener(this);
frame.add(this);
frame.pack();
frame.setVisible(true);
Thread th = new Thread(this);
th.start();
}
@Override
public void run() {
while(frame.isVisible()){
checkKeys();
computeDelta();
repaint();
try {
Thread.sleep(15);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public int getY() {
return y;
}
public int getX() {
return x;
}
private void computeDelta() {
delta = System.nanoTime() - last;
last = System.nanoTime();
fps = ((long) 1e9)/delta;
}
private void checkKeys() {
if(up){
y=y-4;
}
if(down){
y=y+4;
}
if(right){
x=x+4;
}
if(left){
x=x-4;
}
if(makesmaller){
xStretch=xStretch-5;
yStretch=yStretch-5;
}
if(makebigger){
xStretch=xStretch+5;
yStretch=yStretch+5;
}
}
@Override
public void paint(Graphics g) {
super.paint(g);
if(printcoordinates){
System.out.println("X: "+this.getX()+" Y: "+this.getY());
}
g.setColor(Color.red);
if(showfps){
g.drawString("FPS: " + Long.toString(fps), 20, 10);
}
if(gameStarted){
g.drawString("Game Started",70, 10);
g.setColor(Color.black);
g.fillOval(x, y, xStretch, yStretch);
super.repaint();
}
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_UP){
up = true;
}
if(e.getKeyCode()==KeyEvent.VK_DOWN){
down = true;
}
if(e.getKeyCode()==KeyEvent.VK_LEFT){
left = true;
}
if(e.getKeyCode()==KeyEvent.VK_RIGHT){
right = true;
}
if(e.getKeyCode()==KeyEvent.VK_F){
if(showfps){
showfps = false;
}
else{
showfps=true;
}
System.out.println(showfps);
}
if(e.getKeyCode()==KeyEvent.VK_ENTER){
if(gameStarted){
gameStarted=false;
}
else{
gameStarted=true;
}
}
if(e.getKeyCode()==KeyEvent.VK_MINUS){
makesmaller=true;
}
if(e.getKeyCode()==KeyEvent.VK_PLUS){
makebigger=true;
}
if(e.getKeyCode()==KeyEvent.VK_C){
if(printcoordinates){
printcoordinates=false;}
else{
printcoordinates=true;
}
}
}
@Override
public void keyReleased(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_UP){
up = false;
}
if(e.getKeyCode()==KeyEvent.VK_DOWN){
down = false;
}
if(e.getKeyCode()==KeyEvent.VK_LEFT){
left = false;
}
if(e.getKeyCode()==KeyEvent.VK_RIGHT){
right = false;
}
if(e.getKeyCode()==KeyEvent.VK_MINUS){
makesmaller=false;
}
if(e.getKeyCode()==KeyEvent.VK_PLUS){
makebigger=false;
}
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
}
}