JAVA与AS2制作一个2D多人游戏(1)
2016-03-07 17:03
429 查看
这几天用JAVA和AS2制作了一个小型的多人游戏,接下来作为复习总结一遍流程,如果有学过AS2的同学也可以试着做一下。
先简单概述一下这个游戏 玩家注册登录后进入游戏大厅,可以创建房间,加入游戏,然后玩家操作一个会射子弹的小人,和同一房间里的人对战。先上几张图大家看看。
服务器界面
开始制作之前先讲讲我对游戏中客户端与服务器通信几种方式自己的总结
1.服务器主动发消息给所有客户端 (例如同步时间,游戏大厅中发送玩家列表给客户端)
2.客户端发送消息给服务器,服务器发送消息给除该客户端之外的所有客户端 (例如许多实时RPG游戏中的移动,虽然也可以等服务器回应后再移动人物,但对于一直要进行操作的实时RPG来说,这种延时不太会影响游戏公平性.却会大大影响操作流畅度和美感。不过对于有些竞技游戏,比如LOL,是采用服务器回应客户端的移动请求后,再进行移动的,因为这种游戏中,这点点延迟就会影响游戏公平。)
3.客户端发送消息给服务器,服务器单独回应该客户端(例如玩家需要查看别人的信息,一般来说,这种都是即时请求的,但也有部分游戏可能将一些信息在游戏初始化时存到本地)
4.客户端发送消息给服务器,服务器发送消息给另一指定客户端(例如游戏中发送好友申请)
5.客户端提交数据给服务器,不返回(例如玩家升了一级,则同步信息到服务器端的数据库中,或玩家进入了一个房间,更新服务器的房间玩家列表,等待下一次返回给所有客户端)
几乎所有网游中的行为都可以概括为以上5种。不过我刚开始其实有点疑惑,玩家进入游戏大厅,算是哪一种?刚开始我觉得2比较合适,每一个玩家进入房间,发送消息给所有客户端
,这样可以做到实时响应。虽然确实是这么没错,不过后来思考了一下,这种做法其实有巨大的问题。正确的做法应该是5加上1,玩家进入大厅,同步消息给服务器,服务器更新保存在服务器的大厅玩家列表,然后服务器每多少秒,将这个消息发送给所有客户端。
不过可能有人有疑惑,这里给大家解释一下。假设房间里只有几个人,他们一直在玩,基本没有进入大厅退出大厅行为,客户端本地的大厅玩家列表就一直不用更新,但采用5+1的方法
却还是要每多少秒发送一次信息给客户端,这些信息似乎多余了。这样看上去似乎很正确,但一般有大厅的游戏,例如什么QQ堂,热血英豪,再不济大厅里也有几百上千号人,这个时候进入退出大厅的频率就显得高多了,假设每秒有10个人执行进入退出大厅的操作,假设大厅有1000号人,那么如果实时更新大厅玩家的话,每秒就变成了服务器要发10000条信息。而采用5+1每秒只用1000条而已,整整差了十倍。而且这个差距会随着大厅里人数的越来越多而变得越来越大。采用5+1的方法,即玩家只提交自己进入大厅的信息给服务器,然后等待服务器每多少秒的一次同步大厅玩家列表,虽然会有些许的不同步,但对于大厅这种系统来说,则是完全可以接受的。我以上所说的两款游戏经过观察后也是这种做法,玩家在退出大厅后,另一个客户端并不会立即刷新过来。
但有些时候就要用2的方法,比如即时战斗,理由之前也已经解释过了,因为这种方法所需要发送的信息数量是随着视野中可见其他玩家的数量增加而呈现指数型增长的。所有大家也就可以理解为什么有些游戏人一多就卡到不行,为什么很多游戏都是下副本模式。
做了个铺垫。接下来进入我们这次的多人2D小游戏制作。
先列举一些我们这个游戏的与服务器的交互。同时用上面所列的5种交互方式进行概括
1.玩家注册 第三种
2.玩家登陆 第三种
3.玩家进入游戏大厅 第五种加第一种
4.玩家添加他人好友 第四种
5.玩家射击 第二种(在其他一些游戏中可能是5+1)
6.玩家死亡 第二种(在其他一些游戏中可能是5+1)
游戏制作流程
一 制作游戏GUI
这个由于不是本篇介绍的重点,就稍微略过,网上下了点素材 稍微拼了拼,唯一值得注意的是,一般来说都不会在第一次的时候想把所有GUI界面做完,因为有些东西可能发现到最后根本没用到,所以我个人做开发,都是先做个大概,然后再进行迭代开发。
上几张图
好吧 不要吐槽游戏名字 因为我做这个游戏的重点是想学习一下JAVA做游戏服务器的过程 所以一些东西是之前做的小游戏里的,看的顺眼就拿过来用了
这篇也就先写到这里吧。
----------
欢迎关注我的github https://github.com/luckyCatMiao
先简单概述一下这个游戏 玩家注册登录后进入游戏大厅,可以创建房间,加入游戏,然后玩家操作一个会射子弹的小人,和同一房间里的人对战。先上几张图大家看看。
服务器界面
开始制作之前先讲讲我对游戏中客户端与服务器通信几种方式自己的总结
1.服务器主动发消息给所有客户端 (例如同步时间,游戏大厅中发送玩家列表给客户端)
2.客户端发送消息给服务器,服务器发送消息给除该客户端之外的所有客户端 (例如许多实时RPG游戏中的移动,虽然也可以等服务器回应后再移动人物,但对于一直要进行操作的实时RPG来说,这种延时不太会影响游戏公平性.却会大大影响操作流畅度和美感。不过对于有些竞技游戏,比如LOL,是采用服务器回应客户端的移动请求后,再进行移动的,因为这种游戏中,这点点延迟就会影响游戏公平。)
3.客户端发送消息给服务器,服务器单独回应该客户端(例如玩家需要查看别人的信息,一般来说,这种都是即时请求的,但也有部分游戏可能将一些信息在游戏初始化时存到本地)
4.客户端发送消息给服务器,服务器发送消息给另一指定客户端(例如游戏中发送好友申请)
5.客户端提交数据给服务器,不返回(例如玩家升了一级,则同步信息到服务器端的数据库中,或玩家进入了一个房间,更新服务器的房间玩家列表,等待下一次返回给所有客户端)
几乎所有网游中的行为都可以概括为以上5种。不过我刚开始其实有点疑惑,玩家进入游戏大厅,算是哪一种?刚开始我觉得2比较合适,每一个玩家进入房间,发送消息给所有客户端
,这样可以做到实时响应。虽然确实是这么没错,不过后来思考了一下,这种做法其实有巨大的问题。正确的做法应该是5加上1,玩家进入大厅,同步消息给服务器,服务器更新保存在服务器的大厅玩家列表,然后服务器每多少秒,将这个消息发送给所有客户端。
不过可能有人有疑惑,这里给大家解释一下。假设房间里只有几个人,他们一直在玩,基本没有进入大厅退出大厅行为,客户端本地的大厅玩家列表就一直不用更新,但采用5+1的方法
却还是要每多少秒发送一次信息给客户端,这些信息似乎多余了。这样看上去似乎很正确,但一般有大厅的游戏,例如什么QQ堂,热血英豪,再不济大厅里也有几百上千号人,这个时候进入退出大厅的频率就显得高多了,假设每秒有10个人执行进入退出大厅的操作,假设大厅有1000号人,那么如果实时更新大厅玩家的话,每秒就变成了服务器要发10000条信息。而采用5+1每秒只用1000条而已,整整差了十倍。而且这个差距会随着大厅里人数的越来越多而变得越来越大。采用5+1的方法,即玩家只提交自己进入大厅的信息给服务器,然后等待服务器每多少秒的一次同步大厅玩家列表,虽然会有些许的不同步,但对于大厅这种系统来说,则是完全可以接受的。我以上所说的两款游戏经过观察后也是这种做法,玩家在退出大厅后,另一个客户端并不会立即刷新过来。
但有些时候就要用2的方法,比如即时战斗,理由之前也已经解释过了,因为这种方法所需要发送的信息数量是随着视野中可见其他玩家的数量增加而呈现指数型增长的。所有大家也就可以理解为什么有些游戏人一多就卡到不行,为什么很多游戏都是下副本模式。
做了个铺垫。接下来进入我们这次的多人2D小游戏制作。
先列举一些我们这个游戏的与服务器的交互。同时用上面所列的5种交互方式进行概括
1.玩家注册 第三种
2.玩家登陆 第三种
3.玩家进入游戏大厅 第五种加第一种
4.玩家添加他人好友 第四种
5.玩家射击 第二种(在其他一些游戏中可能是5+1)
6.玩家死亡 第二种(在其他一些游戏中可能是5+1)
游戏制作流程
一 制作游戏GUI
这个由于不是本篇介绍的重点,就稍微略过,网上下了点素材 稍微拼了拼,唯一值得注意的是,一般来说都不会在第一次的时候想把所有GUI界面做完,因为有些东西可能发现到最后根本没用到,所以我个人做开发,都是先做个大概,然后再进行迭代开发。
上几张图
好吧 不要吐槽游戏名字 因为我做这个游戏的重点是想学习一下JAVA做游戏服务器的过程 所以一些东西是之前做的小游戏里的,看的顺眼就拿过来用了
这篇也就先写到这里吧。
----------
欢迎关注我的github https://github.com/luckyCatMiao
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Linux socket 初步
- 小心服务器内存居高不下的元凶--WebAPI服务
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- 运维入门
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序