2016-06-07 14 views
-2

Ich versuche ein Ping-Pong-Spiel zu machen, aber mein Ball bewegt sich nicht, also wie man den Ball bewegen lässt?Wie mache ich Code um den Ball zu bewegen?

Dies ist mein Code

package test; 

import java.awt.*; 
import java.awt.event.*; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.swing.*; 

public class pingpong1 extends JFrame implements Runnable { 

public static void main(String[] args) { 
     pingpong1 ping = new pingpong1("PingPong Hard Game"); 

     new Thread(ping).start(); 

     ping.setSize(600, 300); 

     ping.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     ping.setVisible(true); 

    } private int width, height; 

    private User user;   
    private Computer computer;   
    private Ball ball; 
    static int UserScore = 0; 
    int ComputerScore=0; 

    public pingpong1(String title){ 

    } 
    @Override 
    public void paint(Graphics g){ 
     super.paint(g); 
     Image img2; 
     ImageIcon img = new ImageIcon("pingpong.png"); 
     img2 = img.getImage(); 
     g.drawImage(img2,0,0, this); 
     ball.paint(g); 
    } 
    @Override 
    public void run(){ 
     while(true){ 
      ball.moveBall(); 
      repaint(); 

       try { 
        Thread.sleep(20); 
       } catch (InterruptedException e) { 
        Logger.getLogger(getName()).log(Level.SEVERE,null,e); 
       } 
    } 
    } 

    public void paintComponent(Graphics g) { 
      if (user == null) { 
       width = getWidth(); 
       height = getHeight(); 
       user = new User(); 
       computer = new Computer(); 
       ball = new Ball(); 
      } 
      ball.draw(g); 

     } 
    public class User{ 

    } 
    public class Computer{ 

    } 
    public class Ball{ 
     private int x,y; 
     private int centerX , centerY; 
     private Color color; 
     boolean go; 
     Ball(){ 
      go=false; 
     } 
     public void paint(Graphics g) { 
      // TODO Auto-generated method stub 

     } 
     public Ball(int x,int y,Color color){ 
      this.x=x; 
      this.y=y; 
      this.color=color; 
      this.centerX=5; 
      this.centerY=5; 
     } 
     public int getX(){ 
      return x; 
     } 
     public int getY(){ 
      return y; 
     } 
     public void moveBall(){ 
      centerX=5; 
      x+=centerX; 
      y+=centerY; 

     } void draw(Graphics g){ 
      Image img2; 
      ImageIcon img = new ImageIcon("pingpong.png"); 
      img2 = img.getImage(); 
      g.drawImage(img2, centerX - -35, centerY -10 , null); 
     } 
    } 
    } 
+0

warum _android_ Tag? –

+0

Wann hast du damit gerechnet, dass der Ball an einem anderen Ort gezogen wird? Ich würde beim Zeichnen der Ballklasse raten. Wie auch immer, du rufst die Paint-Methode an (die nicht implementiert ist), wenn ich den Aufruf – Gildraths

Antwort

1

Zum einem Code es für die Bewegung, müssen irgendeine Art von Eingang haben, um tatsächlich den Ball zu bewegen. Im Moment tut es nichts anderes, als x, y hinzuzufügen und es nicht neu zu streichen, also sagst du ihm im Grunde nichts zu tun. Wenn Sie für Benutzer gesteuert suchen etwas wie das funktioniert?

public void moveIt(KeyEvent evt) { 
switch (evt.getKeyCode()) { 
     case KeyEvent.VK_DOWN: 
      myY += 5; 
      break; 
     case KeyEvent.VK_UP: 
      myY -= 5; 
      break; 
     case KeyEvent.VK_LEFT: 
      myX -= 5; 
      break; 
     case KeyEvent.VK_RIGHT: 
      myX += 5; 
      break; 
    } 
} 

Wenn Sie nach einem Weg suchen, um den Ball automatisch zu bewegen, dann müssen Sie ein paar Dinge in Ihrem Code suchen. Wie man bedenkt, in nicht zu der Geschwindigkeit/Richtung etc ...

Dies ist ein einfaches Beispiel eines sich bewegenden Ball http://introcs.cs.princeton.edu/java/34nbody/Ball.java.html

Ich habe einen Kommentar gemacht würde, aber meine rep ist unter 50.

+0

erwarten würde, den ich automatisch verschieben muss. –

+0

Wenn dies der Fall ist, überprüfen Sie den grundlegenden Link vorausgesetzt, es gibt Ihnen mehr als Sie brauchen, um es in Bewegung zu bringen. –

+0

danke für die Hilfe mich –

0

in Ihrem Code sind Sie richtig die Position der Kugel Aktualisierung in Ihrem Spiel-Schleife:

Klasse pingpong1

while(true){ 
     ball.moveBall(); // You update movement here 
     repaint(); 
     try { 
      Thread.sleep(20); 
     } catch (InterruptedException e) { 
      System.err.println("Interrupted."); 
     } 
    } 

Aber Sie nie neu zeichnen tatsächlich den Ball an der aktualisierten Position:

public void paint(Graphics g){ 
    super.paint(g); 
    Image img2; 
    ImageIcon img = new ImageIcon("pingpong.png"); 
    img2 = img.getImage(); 
    g.drawImage(img2,0,0, this); 
    ball.paint(g); // this method is empty 
} 

Da die ball Methode paint leer ist:

Klasse Kugel

public void paint(Graphics g) { 
    // TODO Auto-generated method stub 
} 

Um das zu korrigieren:

public void paint(Graphics g) { 
    ImageIcon icon = new ImageIcon("ball.png"); 
    Image image = icon.getImage(); 
    g.drawImage(image, x, y, null); 
} 

Oder nur ball.draw() stattdessen nennen, aber Sie immer noch die x und y korrigieren müssen, weil sie zur Zeit konstant sind, ändern:

g.drawImage(img2, centerX + 35, centerY - 10, null); 

An:

g.drawImage(img2, x, y, null);