今天主要学习了为游戏添加网络功能,能在游戏客户端的界面来控制游戏服务端的战车上下左右活动,同时按空格键能打出子弹。
游戏服务端中:需要新建一个class文件,并命名为:NetPorcServer.java。首先需要通过GamePane的类来定义一个对象: gamePane;在NetPorcServer也定义一个对象:netPorc;利用netPorc=new NetPorcServer(this);可以做到相互调用方法的功能,这个this指的是GamePane这个类,这个为接下来的编写程序起到了巨大的作用。
定义socket,packet,在构造中定义属性,定义线程,在线程中编写接收功能。首先利用socket来调用receive()从客户端接收数据:socket.receive(packet)。调用equals()语句来判断接收的语句是否和”UP”,”DOWN”,”LEFT”,”RIGHT”,”SPACE”的字段相等,相等的话便调用GamePane中的move()方法,只有最后的”SPACE”中:需要调用GamePane的newBullet(),来产生新的子弹。注意重要的几点:在服务端一定要记住设置端口号;在接收结果一定要设置字段的长度:packet.getData(),0,packet.getLength(),这样才能不会接收数据出错,限制接收结果的长度。湖南java培训教育,湖南硅谷严谨的教学态度。
游戏客户端中:在主窗口中:定义socket,packet用来接收数据的,在构造中定义属性,同时定义InetAddress addr;在构造中先定义一个byte型的数组用来存放服务端的IP地址:byte add[]=new byte[]{(byte) 192 ,(byte) 168 ,(byte) 1 , (byte)125};之后再将这个数组放入addr中去:addr=InetAddress.getByAddress(add);为按钮添加事件监听:在按上键时:定义一个字符串String str="UP",将这个字符串转变为byte型,定义一个新的DatagramPacket p1;最后利用socket来调用send()发送数据至服务端:socket.send(p1);其余的键值同理可得。