公司动态
java中的线程游戏的编辑1
线程游戏线程、进程与线程游戏在编写线程游戏之前我们首先要明白线程是什么、进程是什么以及进程和线程之间的关系。线程进程内部并发执行的执行单元CPU 调度的最小单位。特点同一个进程里所有线程共享内存资源一个进程至少包含 1 条主线程Java 中的 main 主线程线程切换开销小支持并发执行。1. 一个进程 ≥ 1 条线程线程不能脱离进程单独存在进程是房子线程是房子里同时干活的人进程 整套房子独立空间、水电资源线程 屋里好几个人共用客厅、家具共享数据各有自己小房间私有栈进程之间互不打扰同一进程的多条线程会抢共享数据容易出错。在线程游戏中如何运用1. 进程在游戏中的作用单机游戏整个游戏是一个 JVM 进程所有画面、怪物、音效都在这个进程里联机游戏游戏客户端 一个进程游戏服务器 另一个独立进程两个进程靠网络通信内存完全不互通。多开游戏每开一次游戏就新建一个独立进程互不干扰。2. 线程在游戏中的分工同一游戏进程内多条线程同一个游戏进程里分开多条线程同时工作避免一件事卡住全部主线程UI 渲染线程只负责刷新画面、窗口显示怪物 AI 线程独立控制怪物移动、攻击音效线程单独播放背景音乐、打击音效网络线程联机收发其他玩家数据。创建窗体 设置游戏窗口编程线程游戏的第一步是创建窗体设置游戏界面的大小和背景颜色。javapublic class GameUI {public void initUI() {JFrame jf new JFrame(“游戏界面”);// 设置窗体大小jf.setSize(800, 800);// 设置窗体居中jf.setLocationRelativeTo(null);// 关闭窗口时退出程序jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);java JPanel gamePanel new JPanel(); gamePanel.setBackground(Color.WHITE); //设置窗体居中 jf.add(gamePanel,BorderLayout.CENTER); //设置窗体背景颜色 jf.getContentPane().setBackground(Color.WHITE); //使窗体可见 jf.setVisible(true);这样便完成了简单的游戏窗口的设计使得线程游戏有了呈现的载体接下来便是通过键盘监听器与键盘相联系使得我们可以通过键盘来控制窗体和游戏。//提取画笔GraphicsggamePanel.getGraphics();// 设立监听器对象GameListenerlistenernewGameListener(g);//添加监听器gamePanel.addMouseListener(listener);gamePanel.addKeyListener(listener);//获取焦点gamePanel.requestFocus();//开启双缓冲gamePanel.setDoubleBuffered(true);//初始化窗体publicstaticvoidmain(String[]args){GameUIuinewGameUI();ui.initUI();}键盘监听器 和各按键功能当游戏的面板背景设立好后我们就可以着手监听器的编程了在对监听器代码的编写前我们要先思考我们所需要用到的有哪些比如键盘中的空格键创造玩家对象J键发射子弹R键暂停等等按键所对应的功能然后再去编码。publicclassGameListenerextendsMouseAdapterimplementsKeyListener{publicGraphicsg;publicGameListener(Graphicsg){this.gg;publicMPlanemp;}publicvoidmouseClicked(MouseEvente){System.out.println(点击);intxe.getX();intye.getY();}publicvoidkeyPressed(KeyEvente){intkeye.getKeyCode();System.out.println(keykey);switch(key){caseKeyEvent.VK_A:mp.speedx-5;break;caseKeyEvent.VK_D:mp.speedx5;break;}以上是控制玩家飞机移动的代码我们需要创建一个类MPlane来写关于玩家飞机的运行代码并且创建mp对象来表示玩家从而控制玩家的左右移动以及设定玩家飞机的属性和形状大小和设定玩家飞机的移动方法publicclassMPlane{publicintx,y,size;publicintspeedx,speedy;publicImageimage;publicImageObserverobserver;publicMPlane(intx,inty){this.xx;this.yy;size100;ImageIconiconnewImageIcon(C:\\Users\\35053\\Pictures\\Saved Pictures\\plane.png.png);System.out.println(icon.getImageLoadStatus());imageicon.getImage();}publicvoiddrawPlane(Graphicsg){g.drawImage(image,x,y,observer);move();}publicvoidmove(){yspeedy;xspeedx;}}publicImageimage;publicImageObserverobserver;ImageIconiconnewImageIcon(C:\\Users\\35053\\Pictures\\Saved Pictures\\plane.png.png);System.out.println(icon.getImageLoadStatus());imageicon.getImage();}这几行代码的目的是从计算机中导出图片作为玩家飞机当我们把玩家飞机的各属性设置好后我们接下来就需要设置小游戏的各种线程例如发射子弹游戏暂停自动发射子弹敌机的自由落下等等。