【问题标题】:How to make code move the ball?如何让代码移动球?
【发布时间】:2016-06-07 11:41:30
【问题描述】:

我尝试做一个乒乓球比赛,但我的球不动,那么如何让球动起来?

这是我的代码

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);
        }
    }
    }

【问题讨论】:

  • 为什么要使用 android 标签?
  • 你什么时候期望这会在不同的地方画球?我猜是 Ball 类的平局。但是,当我期望调用时,您正在调用paint方法(未实现)

标签: java swing jframe jpanel java-2d


【解决方案1】:

首先,您的移动代码需要有某种输入才能实际移动球。现在它什么都不做,只是添加 x、y 并且不重新绘制它,所以你基本上告诉它什么都不做。 如果您正在寻找用户控制的类似这样的东西会起作用吗?

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;
    } 
}

如果您正在寻找一种自动移动球的方法,那么您需要查看代码中的一些内容。由于您没有考虑速度/方向等...

这是一个移动球的基本示例http://introcs.cs.princeton.edu/java/34nbody/Ball.java.html

我想发表评论,但我的代表不到 50 岁。

【讨论】:

  • 我需要自动移动。
  • 如果是这种情况,请查看基本链接,它会为您提供超出您所需的更多内容。
  • 我无法理解如何在我的程序中使用那个移动的基本球代码。请再帮我一次
【解决方案2】:

在您的代码中,您正确地更新了游戏循环中球的位置:

班乒乓球1

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

但您实际上从未在更新的位置重新绘制球:

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
}

因为ball方法paint是空的:

类球

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

更正一下:

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

或者直接调用ball.draw(),但您仍然需要更正xy,因为它们目前是不变的,请更改:

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

收件人:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 2013-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-11
    • 1970-01-01
    相关资源
    最近更新 更多