Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中暂停和恢复一个简单的游戏_Java_Multithreading_Actionlistener_Java 3d - Fatal编程技术网

如何在Java中暂停和恢复一个简单的游戏

如何在Java中暂停和恢复一个简单的游戏,java,multithreading,actionlistener,java-3d,Java,Multithreading,Actionlistener,Java 3d,我用java做了一个简单的游戏,是关于“网球背景”和“网球”的,球是自动随机移动的 我的游戏由两个文件组成,第一个文件为Jpanel,第二个文件为JFrame 我的问题是:我需要通过点击鼠标来控制“停止和恢复”球, 我试图在线程运行循环期间放置wait(),但失败了,我不知道原因是什么,因此,请检查我的代码,然后告诉我什么是错误的,什么是真正的方法“暂停和恢复”线程在我的简单游戏 tennis.java文件(包含线程): /* *tennis.java * *创建于2011年11月15日下午3:

我用java做了一个简单的游戏,是关于“网球背景”和“网球”的,球是自动随机移动的

我的游戏由两个文件组成,第一个文件为Jpanel,第二个文件为JFrame

我的问题是:我需要通过点击鼠标来控制“停止和恢复”球, 我试图在线程运行循环期间放置wait(),但失败了,我不知道原因是什么,因此,请检查我的代码,然后告诉我什么是错误的,什么是真正的方法“暂停和恢复”线程在我的简单游戏

tennis.java文件(包含线程):

/*
*tennis.java
*
*创建于2011年11月15日下午3:35:28
*/
包io;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.image.buffereImage;
导入java.io.File;
导入java.io.IOException;
导入java.util.logging.Level;
导入java.util.logging.Logger;
导入javax.imageio.imageio;
公共类网球扩展javax.swing.JPanel实现Runnable{
缓冲成像球;
缓冲图像背景;
int ball_h=0;
int ball_w=0;
整数高度=0;
整数宽度=0;
int yPos=-1;
int xPos=10;
int pause=20;
//移动速度
int xMov=5;
int-yMov=10;
布尔值=假;
int play=0;
螺纹流道;
/**创造网球新形式*/
公共网球比赛是个例外{
ball=ImageIO.read(新文件(“networks/ball.png”);
bg=ImageIO.read(新文件(“netsines/bg.jpg”);
球h=50;
球w=50;
高度=600-球高度;
宽度=800-球头宽度;
流道=新螺纹(此);
runner.start();
}
公开作废开始(){
如果(播放==0){
play=1;
单击=真;
}否则{
play=0;
单击=真;
}
系统输出打印LN(播放);
}
公共停车场(){
runner=null;
}
@凌驾
公共空间涂料(图g){
Graphics2D g2D=(Graphics2D)g;
g2D.drawImage(bg,0,0,800600,this);
g2D.drawImage(ball、xpo、yPos、50,50,this);
}
/**此方法从构造函数中调用,以
*初始化表单。
*警告:请勿修改此代码。此方法的内容为
*始终由表单编辑器重新生成。
*/
@抑制警告(“未选中”)
//                           
私有组件(){
javax.swing.GroupLayout=newjavax.swing.GroupLayout(this);
这个.setLayout(布局);
layout.setHorizontalGroup(
createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0,400,短。最大值)
);
layout.setVerticalGroup(
createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0,300,短。最大值)
);
}//                         
//变量声明-不修改
//变量结束声明
@凌驾
公开募捐{
while(runner==runner){
如果(xPos>=(宽度))
{
xMov*=-1;
}
xPos+=xMov;
如果(xPos<1)
{
xMov*=-1;
}                
如果(yPos>=(高度球高度))
{
yMov*=-1;
}
yPos+=yMov;
if(yPos<1)
{
yMov*=-1;
}
重新油漆();
试一试{
如果(播放==1){
线程。睡眠(暂停);
}否则{
已同步(此){
while(play==0){
等待();
}
}
}
}捕获(中断异常例外){
Logger.getLogger(netsing.class.getName()).log(Level.SEVERE,null,ex);
}
}  
}
}
Tennis3D.java文件(用于启动游戏和定义线程的框架):

/*
*要更改此模板,请选择工具|模板
*然后在编辑器中打开模板。
*/
/*
*Tennis3D.java
*
*创建于2011年11月15日下午3:42:42
*/
包io;
网球;
导入java.awt.event.MouseEvent;
导入java.awt.event.MouseListener;
导入java.io.IOException;
导入java.util.logging.Level;
导入java.util.logging.Logger;
公共类Tennis3D扩展javax.swing.JFrame实现MouseStener{
网球;
/**创建新表单Tennis3D*/
公共田纳西3D(){
超级(“Tennis3D”);
设置大小(800600);
试一试{
网球=新网球();
加上(网球),;
网球。阿德穆塞利斯滕纳(本);
}捕获(IOEX异常){
Logger.getLogger(Tennis3D.class.getName()).log(Level.SEVERE,null,ex);
}
setVisible(真);
}
/**此方法从构造函数中调用,以
*初始化表单。
*警告:请勿修改此代码。此方法的内容为
*始终由表单编辑器重新生成。
*/
@抑制警告(“未选中”)
//                           
私有组件(){
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
javax.swing.GroupLayout=newjavax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(布局);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment
/*
 * tennis.java
 *
 * Created on Nov 15, 2011, 3:35:28 PM
 */
package io;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;


public class tennis extends javax.swing.JPanel implements Runnable{

    BufferedImage ball;
    BufferedImage bg;
    int ball_h = 0;
    int ball_w = 0;
    int height = 0;
    int width  = 0;
    int yPos   = -1;
    int xPos   = 10;
    int pause  = 20;

    // Move Speed
    int xMov   = 5;
    int yMov   = 10;
    boolean clicked = false;
    int play    =   0;

    Thread runner;

    /** Creates new form tennis */
    public tennis() throws IOException {

        ball = ImageIO.read(new File("tennis/ball.png"));
        bg = ImageIO.read(new File("tennis/bg.jpg"));
        ball_h = 50;
        ball_w = 50;
        height = 600 - ball_h;
        width  = 800  - ball_w;

        runner = new Thread(this);
        runner.start();

    }

    public void start(){
       if(play == 0){

           play     =   1;
           clicked = true;

       }else{
           play    =  0;
           clicked = true;
       }

       System.out.println(play);
    }

    public void stop(){
        runner = null;
    }




    @Override
    public void paint(Graphics g){
        Graphics2D g2D  =   (Graphics2D) g;

        g2D.drawImage(bg, 0, 0, 800,600, this);
        g2D.drawImage(ball, xPos, yPos,50,50, this);
    }


    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );
    }// </editor-fold>                        
    // Variables declaration - do not modify                     
    // End of variables declaration                   

    @Override
    public void run() {

        while(runner == runner){



                    if(xPos >= (width))
                        {
                           xMov   *= -1;   
                        }



                           xPos   += xMov;

                    if(xPos < 1)
                        {
                           xMov   *= -1;   
                        }                

                    if(yPos >= (height-ball_h))
                        {
                            yMov    *= -1 ;
                        }



                            yPos    += yMov;

                     if(yPos < 1)
                        {
                            yMov    *= -1 ;
                        }

                    repaint();



                    try {
                        if(play == 1){
                            Thread.sleep(pause);
                        }else{
                            synchronized(this){
                                while(play == 0){
                                wait();
                              }
                            }
                        }

                    } catch (InterruptedException ex) {
                        Logger.getLogger(tennis.class.getName()).log(Level.SEVERE, null, ex);
                    }

        }  
    }

}
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * Tennis3D.java
 *
 * Created on Nov 15, 2011, 3:42:42 PM
 */
package io;

import io.tennis;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;


public class Tennis3D extends javax.swing.JFrame implements MouseListener{

    tennis tennis;

    /** Creates new form Tennis3D */
    public Tennis3D() {
        super("Tennis3D");
        setSize(800,600);


        try {
            tennis = new tennis();
            add(tennis);
            tennis.addMouseListener(this);
        } catch (IOException ex) {
            Logger.getLogger(Tennis3D.class.getName()).log(Level.SEVERE, null, ex);
        }


        setVisible(true);

    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>                        

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
       Tennis3D tennis = new Tennis3D();
    }
    // Variables declaration - do not modify                     
    // End of variables declaration                   

    @Override
    public void mouseClicked(MouseEvent e) {
       tennis.start();
    }

    @Override
    public void mousePressed(MouseEvent e) {

    }

    @Override
    public void mouseReleased(MouseEvent e) {

    }

    @Override
    public void mouseEntered(MouseEvent e) {

    }

    @Override
    public void mouseExited(MouseEvent e) {

    }
}
 while (!game.isOver())
 {
      if (!game.isPaused())
           game.update()  // this moves your ball, players, etc
 }
initGame();
while(!gameOver)
{
    readInput();
    update(deltaTime);
    draw();
}
for(GameObject go : myObjectList)
{
    go.update(deltaTime);
}
for(GameObject go : myObjectList)
{
    if(go.isActive())
    {
        go.update(deltaTime);
    }
}
final int PAUSE = 1;
final int RUNNING = 2;
public enum State {
    RUNNING,
    PAUSE
}
switch(state){
    case PAUSE:
        Thread.sleep(100);
        break;
    case RUNNING:
        // do something entertaining
        break;
}