JAVA框内小球弹跳加重力

Posted bird-xu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA框内小球弹跳加重力相关的知识,希望对你有一定的参考价值。

/**
BouncePanel.java
*/
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.util.Random;

import javax.swing.*;

public class BouncePanel extends JComponent 
                         implements ComponentListener, Runnable {
    
    final static long serialVersionUID = 0;  // kill warning
    
    // constants
    final static BasicStroke stroke = new BasicStroke(2.0f);
      
    // fields
    int Red,Green,Blue;
    float xsize,ysize;  // size of window
    float xpos,ypos,yypos;    // position of ball 
    float xlen,ylen;    // size of ball
    float speed;        // distance the ball moves in each frame
    float dx,dy,ddy,da;        // current speed + direction of ball 
    float temp;
    int  t;
    int    delay;       // delay between frames in miliseconds
    Thread animThread;  // animation thread                       
                
    /*************************************************
     * Draws the ball on the screen.
     *************************************************/                                
    public void paintComponent(Graphics g) {
        Graphics2D g2 = (Graphics2D) g.create();

        // get the current window size     
        Dimension dim = getSize();
        xsize = dim.width;
        ysize = dim.height; 
        
        // clear background to white
        g2.setPaint(Color.white);
        g2.fill(new Rectangle2D.Double(0,0,xsize,ysize));       

        // draw ball                 
        g2.setPaint(new Color(Red,Green,Blue));
        g2.fill(new Ellipse2D.Double(xpos, ysize-ypos-ylen, xlen, ylen));
        g2.setColor(Color.black);
        g2.draw(new Ellipse2D.Double(xpos, ysize-ypos-ylen, xlen, ylen));
 
        g2.dispose();
    }
    
    // empty methods that are required by the GUI event loop
    public void componentHidden (ComponentEvent e)  { }
    public void componentMoved  (ComponentEvent e)  { }
    public void componentResized(ComponentEvent e)  { }
    public void componentShown  (ComponentEvent e)  { }
    
    /****************************************************
     * Checks to see if the ball has hit any walls.
     * Called from within run(). 
     ****************************************************/
    public void checkWalls() {
        Random rand = new Random();
       if (xpos + xlen >= xsize) { 
           xpos = xsize - xlen;
           dx   = -dx;
           Red=rand.nextInt(256);
           Green=rand.nextInt(256);
           Blue=rand.nextInt(256);
       } 
       if (xpos <= 0) {
           xpos = 0;
           dx   = -dx; 
           Red=rand.nextInt(256);
           Green=rand.nextInt(256);
           Blue=rand.nextInt(256);
       } 
       if (ypos + ylen >= ysize) {
           ypos = ysize - ylen;
           dy   = -dy;
           Red=rand.nextInt(256);
           Green=rand.nextInt(256);
           Blue=rand.nextInt(256);
       }             
       if (ypos <= 0) {
           ypos = 0;
           dy   = (float)Math.sqrt(2*da*yypos+ddy*ddy); 
           Red=rand.nextInt(256);
           Green=rand.nextInt(256);
           Blue=rand.nextInt(256);
       }
      
    }
   /* public void speed() {
        
        
    }*/
    /***********************************************************
     * This is the animation thread.  
     * The code here is what actually causes the ball to bounce.
     ***********************************************************/ 
    public void run() {
        
      while (true) {  // loop forever          
          // storage history data
          yypos=ypos;
          ddy = dy;
          //new Vy
          dy=dy + da;
          // update position
          xpos += dx ;
          temp = (dy+ddy)/2;//*|t=1|
          ypos =ypos + temp; 
             
        // check to see if the ball has hit any walls
        checkWalls();      
        // sleep a bit until the next frame
        try { Thread.sleep(delay); } 
        catch (InterruptedException e) { break; }
        
        // refresh the display
        repaint();  
      }
    }
        
    /****************************************************
     * This is a constructor for the BouncePanel class.
     * It initializes all the values that the class needs
     * in order to work properly.
     ****************************************************/
    
    public BouncePanel() {
        // set values for all the variables
        xsize = 480;
        ysize = 700;
        xpos  = 240;
        ypos  = 350;
        xlen  = 30;
        ylen  = 30;
        speed = 10;
        dx    = speed;
        dy    = speed;
        da    = -1.0f;
        delay = 80;
      
        
        // set up window properties
        setBackground(Color.white);
        setOpaque(true);
        setPreferredSize(new Dimension((int) xsize, (int) ysize));
        setFocusable(true);
        addComponentListener(this);
        
        // start the animation thread
        animThread = new Thread(this);
        animThread.start();
    }
}

技术分享图片

以上是关于JAVA框内小球弹跳加重力的主要内容,如果未能解决你的问题,请参考以下文章

如何利用CSS3动画实现弹跳效果

简述利用3DMAX制作小球弹跳的步骤,最好详细一点,专业一点,谢谢

用手机上下左右摆让小球滚动或弹跳吃东西变大的游戏

Processing小游戏制作 01-弹跳小球

Processing小游戏制作 01-弹跳小球

Processing小游戏制作 01-弹跳小球