【纯JAVA语言做RPG游戏】3.地图碰撞检测和角色行走的实现

本文介绍了使用JAVA编程实现RPG游戏中地图碰撞检测和角色动态行走的方法。首先修复了角色偏移量的BUG,然后通过角色中点坐标计算其在地图数组中的位置,实现碰撞检测。当角色移动时,检查相邻位置是否有障碍物。接着,通过Graphics的drawImage()方法分解行走图,实现角色行走的动态效果。在角色按键移动时,改变图片显示顺序,模拟行走动画。最后展示了处理后的效果和部分代码。
摘要由CSDN通过智能技术生成

额⊙▽⊙...

上次做好了游戏的基本界面,地图也能成功的显示出来了,不过前面的游戏还没有实现角色与地图的碰撞检测,也就是说角色可以在地图上到处跑,无视那些树啊,石头什么的,这次的第一件事就是要检测角色与地图上物体的碰撞......再加上前面程序的玩家角色是用一个小球替代的,太丑了,这次换成一个动态的小LOLI,让它能够在地图上跑动起来 (╯▔▽▔)╯.....

 

首先,对上次的一些BUG进行改进:

上次说到角色的偏移量,我直接把它设为0了,这是严重的错误,导致我后面出BUG测试了2个多小时,因为如果角色从出生点直接向左或者是上移动的话,它的x和y偏移量就会变成负数,变成负数去对50求余,得到的结果就和正数求余不协调了,就会出现地图突然向左跳了一格的情况....

 

处理掉BUG,接下来就是这次的任务了(先把我的处理思路整理一下,接着上代码....)

1.首先是角色与地图的检测.

由于在游戏的过程中,程序可以得到角色中点的坐标,那么就可以通过这个中点坐标计算出角色在地图数组中对应的位置,接着通过人物所在的这个数组元素位置,找出这个坐标上下左右的数组元素的值,也就相当于知道了人物在当前地图中的上下左右有什么物体.

接着就对人物移动的方法进行改造,在人物向上移动时,判断人物所在位置上方数组map2中的值是否为0(为0就代表没物体阻挡了嘛..),如果为0就继续前面移动的方式,如果不为0的话就不执行前面移动的方式...下左右移动同理.

2.然后是实现角色的动态行走.

我首先从网上找了这么两张角色行走图,图出自《东方苍神行》如下(PS:其实楼主找到了一整套( ´´ิ∀´ิ` )...):




 

一张是角色走路的图,还有一张是角色跑步的图,这里我就不做这么复杂了,统一用跑步的,不过角色停下来的时候要用角色走路图里面的那4张站立不动的画面..

可以看到这素材是由上下左右,每个方向4张图片构成的,所以要实现角色的动态行走的话就必须要在鼠标按下某一个方向时,让角色图片在这个方向的4张连续的图中循环不停的变化,这样看起来角色就真正的动起来了,而不是僵直的平移...

那么怎么达成这种效果呢,首先要知道怎么从这一张图品中把这16张小图片给分解开来,我查了下API,发现Graphics的drawimage()方法,不仅可以直接画出一张图,还可以选择一张图的某一个矩形区域,然后画到面板的指定的矩形区域上,这样就能分开处理这16张小图片了,(当然也可以事先将这行走图用图片处理工具分开成16张图,这样也能减少许多卡顿现象,不过这就不是程序猿的事了,好吧,我承认是我是PS新手,怕麻烦  - -! )具体如下:

----------------------------------------------------------------------------------------------

g.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, observer);
img - 要绘制的指定图像。如果 img 为 null,则此方法不执行任何操作。
dx1 - 目标矩形

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值