手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏16之敌人来了

简介: 手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏16之敌人来了

Enemy

Enemy.java

package character;
import managers.InputManager;
import sprite.Animator;
import sprite.Transform;
import java.awt.*;
import java.awt.event.KeyEvent;
public class Enemy extends AttackAbleObject{
    private Animator _animator;
    public Enemy(Animator animator, int hurtx, int hurty, int hurtscale_x, int hurtscale_y
            , int hitoffset_x1, int hitoffset_y1, int hitoffset_x2, int hitoffset_y2){
        super(animator,hurtx,hurty,hurtscale_x,hurtscale_y
                ,hitoffset_x1,hitoffset_y1,hitoffset_x2,hitoffset_y2);
        _animator = animator;
        _animator.setAnimation("idle");
    }
    public void move(double x, double y){
    }
    @Override
    public void update(Graphics2D g){
        _animator.show(g);
    }
    public Transform getTransform(){
        return _animator;
    }
}

因为Enemy能攻击player,也能受到攻击,所以咱们让他继承AttackAbleObject

在GameApp中初始化一个Enemy对象如下:

private Enemy _enemy;
    private Player _player;
    public GameApp(){
        try{
            background = new Background();
            _resLoader.loadAnimations();
            Animator animatorEnemy = new Animator("enemy3");
            _enemy = new Enemy(animatorEnemy,88, 38, 18, 88, // HurtBox
                    93, 54, 50, 11);
            _enemy.getTransform().setOrigin(97, 110);
            _enemy.getTransform().scale(2,2);
            g.setColor(Color.red);
            g.draw(_enemy.getHurtBox());
            g.draw(_enemy.getHitBox());
            _enemy.update(g);

同时我们在Animationlist.xml中新增enemy配置信息:

<enemy3>
        <walk>
            <image>zombie4/02.png</image>
            <image>zombie4/03.png</image>
            <image>zombie4/04.png</image>
            <image>zombie4/05.png</image>
            <image>zombie4/06.png</image>
            <image>zombie4/07.png</image>
            <image>zombie4/08.png</image>
            <image>zombie4/09.png</image>
        </walk>
        <idle>
            <image>zombie4/01.png</image>
            <image>zombie4/01.png</image>
            <image>zombie4/01.png</image>
            <image>zombie4/22.png</image>
            <image>zombie4/22.png</image>
            <image>zombie4/22.png</image>
        </idle>
        <attk>
            <image>zombie4/10.png</image>
            <image>zombie4/11.png</image>
            <image>zombie4/12.png</image>
            <image>zombie4/13.png</image>
            <image>zombie4/14.png</image>
        </attk>
        <block>
            <image>zombie4/23.png</image>
            <image>zombie4/23.png</image>
            <image>zombie4/23.png</image>
            <image>zombie4/23.png</image>
            <image>zombie4/23.png</image>
            <image>zombie4/23.png</image>
        </block>
        <die>
            <image>zombie4/22.png</image>
            <image>zombie4/23.png</image>
            <image>zombie4/36.png</image>
            <image>zombie4/37.png</image>
            <image>zombie4/38.png</image>
            <image>zombie4/39.png</image>
            <image>zombie4/40.png</image>
            <image>zombie4/41.png</image>
            <image>zombie4/41.png</image>
            <image>zombie4/41.png</image>
        </die>
        <dead>
            <image>zombie4/41.png</image>
        </dead>
    </enemy3>

如果您迷路了,请参考完整源码:


项目源码


项目源码

目录
相关文章
|
4天前
|
开发框架 JavaScript 前端开发
HarmonyOS UI开发:掌握ArkUI(包括Java UI和JS UI)进行界面开发
【10月更文挑战第22天】随着科技发展,操作系统呈现多元化趋势。华为推出的HarmonyOS以其全场景、多设备特性备受关注。本文介绍HarmonyOS的UI开发框架ArkUI,探讨Java UI和JS UI两种开发方式。Java UI适合复杂界面开发,性能较高;JS UI适合快速开发简单界面,跨平台性好。掌握ArkUI可高效打造符合用户需求的界面。
27 8
|
3天前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
|
3天前
|
Java API Maven
如何使用 Java 字节码工具检查类文件的完整性
本文介绍如何利用Java字节码工具来检测类文件的完整性和有效性,确保类文件未被篡改或损坏,适用于开发和维护阶段的代码质量控制。
|
3天前
|
存储 Java 编译器
java wrapper是什么类
【10月更文挑战第16天】
11 3
|
6天前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
17 5
|
6天前
|
Java
在Java多线程编程中,实现Runnable接口通常优于继承Thread类
【10月更文挑战第20天】在Java多线程编程中,实现Runnable接口通常优于继承Thread类。原因包括:1) Java只支持单继承,实现接口不受此限制;2) Runnable接口便于代码复用和线程池管理;3) 分离任务与线程,提高灵活性。因此,实现Runnable接口是更佳选择。
19 2
|
6天前
|
Java
Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口
【10月更文挑战第20天】《JAVA多线程深度解析:线程的创建之路》介绍了Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口。文章详细讲解了每种方式的实现方法、优缺点及适用场景,帮助读者更好地理解和掌握多线程编程技术,为复杂任务的高效处理奠定基础。
16 2
|
4天前
|
监控 安全 Java
在 Java 中使用线程池监控以及动态调整线程池时需要注意什么?
【10月更文挑战第22天】在进行线程池的监控和动态调整时,要综合考虑多方面的因素,谨慎操作,以确保线程池能够高效、稳定地运行,满足业务的需求。
71 38
|
1天前
|
安全 Java
java 中 i++ 到底是否线程安全?
本文通过实例探讨了 `i++` 在多线程环境下的线程安全性问题。首先,使用 100 个线程分别执行 10000 次 `i++` 操作,发现最终结果小于预期的 1000000,证明 `i++` 是线程不安全的。接着,介绍了两种解决方法:使用 `synchronized` 关键字加锁和使用 `AtomicInteger` 类。其中,`AtomicInteger` 通过 `CAS` 操作实现了高效的线程安全。最后,通过分析字节码和源码,解释了 `i++` 为何线程不安全以及 `AtomicInteger` 如何保证线程安全。
java 中 i++ 到底是否线程安全?
|
5天前
|
Java 调度
[Java]线程生命周期与线程通信
本文详细探讨了线程生命周期与线程通信。文章首先分析了线程的五个基本状态及其转换过程,结合JDK1.8版本的特点进行了深入讲解。接着,通过多个实例介绍了线程通信的几种实现方式,包括使用`volatile`关键字、`Object`类的`wait()`和`notify()`方法、`CountDownLatch`、`ReentrantLock`结合`Condition`以及`LockSupport`等工具。全文旨在帮助读者理解线程管理的核心概念和技术细节。
20 1
[Java]线程生命周期与线程通信