java编写游戏_用JAVA写小游戏需要知道,明白什么?

写了两个简单类型的小游戏作为举例,虚拟机内素材有限,请忽略丑陋的素材,迷之微笑。

1.动作类游戏76987e80788102c30b3ba067b311d17d.pnghttps://www.zhihu.com/video/952265445357654016

2.操作类游戏

9ac171b0bea9568ad9fce109dfb9b4ae.pnghttps://www.zhihu.com/video/952265526815264768

如果你觉得动作游戏的动作震撼了你的心灵,亦或者操作游戏的操作直击了你的灵魂,那么麻烦点一个赞,[捂脸]

好了不扯蛋了,认真回答问题。

0.用java写小游戏需要知道什么,明白什么?

首先需要知道游戏的本质,其实是图片(像)的显示以及图片的移动(图片坐标的改变)。

明白了这两点以后,问题就变得简单了,把问题变成,如何用java显示一张图片与如何动态的改变图片的坐标。

到这里回答题主的第二个问题。

1.需要初学者做的步骤有哪些

展示一张图片,需要一个容器,容器的种类有很多,这里不一一列举,以上述游戏中使用的java原生javax.swing包中的类容为例,不需要再引入其它jar包。

a.使用JFrame创建一个窗体,设置窗体大小,背景颜色等;

b.在JFrane窗体中添加面板容器JPanel;

c.在JPanel上绘制一张图片;(重写JPanel类中的paint方法,调用参数Graphics中的drawImage方法,这里我就不详细说明了,对于“如何在JPanel上绘制一张图片”网上资料很详细。

注:可以使用Toolkit类中的getDefaultToolkit方法获取Toolkit类并直接调用类中的getImage方法获取Image对象,参数是图片完整路径,支持gif噢~)

如果图片成功显示在了窗体里面,那么你一定调用了drawImage方法,该方法虽然有多个构造函数,但无疑都指定了绘制图片的宽、高、横坐标与纵坐标。如果绘制图片的坐标不停的改变,图片不就动起来了吗?

d.让绘制的图片移动;(这里的方式有很多种,我举一个最简单的例子。Jpanel中的paint方法只会把图片在窗体上绘制一次,这时如果我们改变了图片的绘制坐标,图片不会移动,所以我们需要的是再画一次,即调用repaint方法。这时我们需要在另一个线程中去不断改变绘制的坐标与不断调用repaint方法来刷新画面。最简单的方法是实例一个Timer类,再实例一个TimerTask作为Timer中schedule方法的入参,在TimerTask重写的run方法中,完成上述工作即可。)

图片动起来了吗?

这尼玛是个动画片,并不是游戏啊!

别着急,别着急,这是因为我们还没有把坐标的改变赋予玩家。

e.利用键盘或鼠标的监听事件来改变图片的坐标。(以键盘为例,实现KeyListener接口即可实现对键盘的监听,如当我们按下【W】键时,我们可以使图片的绘制纵坐标减少某个值,这时图片变向上移动了)

f.图片相交。移动结束之后,我们还剩下最后一个要素,口交,激动了说错了,是相交。如上面动作游戏中“玩家的拳头打到了亲嘴怪”,操作游戏中“1号玩具的炸弹爆炸后炸死了2号玩家”都是两张图片相交在了一起,简单来说就是“碰到了”。只有判定了相交,我们才能使我们设计的特殊事件、剧情什么的发生。这时我们可以使用Rectangle类来绘制一个矩形,Rectangle的构造函数与我们的绘制要素完美契合,即坐标与大小。当我们为两张图片绘制两个矩形,这时就可以使用Rectangle中的intersects方法来判断自己是否与另一个矩形相交,如玩家矩形是否与道具矩形相交,如果是,则使玩家的生命值上升10;

到这里,一个小游戏所需要的基本要素就全部说完了。现在再回过头来看一看我们的操作游戏“放炸弹的表情包”,它做了什么事情呢?

a.实例化了一个窗体,在窗体中添加了可绘制图片的面板;

b.在面板中绘制了玩家1,玩家2以及墙的图片;

c.不断刷新画面并监听键盘,来移动使玩家操控的表情移动;

d.当玩家绘制的矩形与墙绘制的矩形相交时不能再移动;

e.当玩家按下某键时产生一个炸弹,炸弹在n秒后爆炸,爆炸时以炸弹为中心在它的上下左右绘制n张骷髅图片并绘制它们的矩形,骷髅矩形在n秒后移除;

f.当骷髅矩形与墙矩形相交时使用随机数产生随机类型的道具并为它绘制矩形,当道具矩形与玩家矩形相交时,发生道具效果,根据道具类型为玩家增加移动速度、炸弹威力等效果;

g.当骷髅矩形与玩家矩形相交时游戏结束,把该玩家绘制的图形替换成“一脸懵B”;

以上就是小游戏中最最基础的“套路”,那么现在试想一下打飞机小游戏中的场景,飞机是如何发射炮弹,炮弹又是如何击毁敌机的呢?

好的,如果你脑子里已经有了一个大体的思路,那么赶快动手去干吧。当然,你可能会在开发中发现你的画面不流畅、有闪烁,键盘操作不灵敏,等等待优化问题,我就不再一一列举了,但愿你能遇到这些问题并想办法解决它。这就是题主问的第三个问题,如何在编写中得到提高。答案很显然,那就是在具备一定思路的前提之下,如何快速定位并解决问题。

游戏的源码和更为详细的教学请戳这里左边牙齿疼:Java开发小游戏,30分钟教会你​zhuanlan.zhihu.comcb43663c67a029935e2765902e8e7b11.png

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值