Java Swing游戏开发学习21

内容来自RyiSnow视频讲解

这一节讲的是Hit Detection(and Bug Fix)攻击判定与bug修复。

前言

主要实现,玩家攻击Monster怪

攻击动画

这里作者又新增了8张图片,就是攻击的图片。这个图片的宽高比例就不是1:1了。要不16×32,要不32×16, 1:2和2:1的这种类型。因此重构了一些代码,修改了setup方法。

向上攻击和向左攻击的时候,由于玩家在武器的下面或者右面,这个时候需要调整一下图片的位置,不然会看起来不符合逻辑。向右和向下都没问题。

攻击判定

根据玩家所持有的武器决定,目前还没有武器,所以给一个固定宽高,赋值给attackArea矩形,做测试使用。

武器的碰撞区域示意图。

java 复制代码
attackArea.width = 36;
attackArea.height = 36;

这里有一个小问题,当玩家按Enter键从title state进入游戏后,有一个玩家挥舞兵器的动作,这里还是由于KeyHandler中状态判断,缺少else导致的,加上就好了。因为挥舞武器也是Enter触发的。

怪接收伤害、被消灭

java 复制代码
public void damageMonster(int i) {
    if (i != 999) {
        if (!gp.monster[i].invincible) {
            gp.monster[i].life -= 1;
            gp.monster[i].invincible = true;

            if (gp.monster[i].life <= 0) {
                gp.monster[i] = null;
            }
        }
    }
}

怪的初始生命为4,砍4刀,怪就消失,被消灭了。

下一节,将给怪增加血条和死亡动画

代码

稍后提交到My2DGame仓库

参考第6篇文章最后,可以使用git clone或直接下载获得完整项目

相关推荐
鹅是开哥12 小时前
Spring AI Alibaba + DashScope 调用超时彻底解决(SocketTimeoutException / read timeout)
java·人工智能·spring
努力学习的小廉12 小时前
redis学习笔记(三)—— hash数据类型
redis·笔记·学习
学编程的闹钟12 小时前
C语言WSAGetLastError函数
c语言·开发语言·学习
毕设源码-钟学长13 小时前
【开题答辩全过程】以 基于springboot网络游戏账号租赁以及出售系统为例,包含答辩的问题和答案
java·spring boot·后端
vx+_bysj686913 小时前
【免费领源码】基于Springboot白隼校园音乐点歌系统 计算机毕业设计项目推荐上万套实战教程JAVA,node.js,C++、python、大屏数据可视化
java·spring boot·mysql·课程设计
C雨后彩虹13 小时前
跨线程数据传递InheritableThreadLocal的原理
java·多线程·同步·异步·threadlocal
熬了夜的程序员13 小时前
【LeetCode】117. 填充每个节点的下一个右侧节点指针 II
java·算法·leetcode
Coisinilove13 小时前
MATLAB学习笔记——第一章
笔记·学习·matlab
努力学习的小廉13 小时前
redis学习笔记(四)—— list数据类型
redis·笔记·学习
斯内科13 小时前
C#德州扑克梭哈游戏(2):牌型与点数比较
游戏·c#·梭哈