人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[6]——走马观花

简介:




在游戏中通常不可能允许一幅场景贯穿始终,这就提出了场景变更的要求,基于这一要求的实现,我们将进行如下效果的Java代码实现。


下载地址[url]http://www.3adisk.com/?onlinezero[/url][文件名:RpgChair0to6.rar]

或另存以下X(gif)文件为rar


   
 
由于代码量已开始增加,由本回开始仅给出部分代码实现,详细请进行下载:
 
在本例中,本人采取的位图偏移算法如下:
 
MyPanle 中实现如下:
 
 
         // X 偏移位置
         int  offsetX = MyPanel. WIDTH  / 2 -  role .getX() *  CS ;
         // 计算 X 偏移量
        offsetX = Math.min(offsetX, 0);
        offsetX = Math.max(offsetX, MyPanel. WIDTH  - GameMap. WIDTH );
      
         // Y 偏移位置
         int  offsetY = MyPanel. HEIGHT  / 2 -  role .getY() *  CS ;
         // 计算 Y 偏移量
        offsetY = Math.min(offsetY, 0);
        offsetY = Math.max(offsetY, MyPanel. HEIGHT  - GameMap. HEIGHT );
         //System.out.print(role.getX()+":"+role.getY());
         // 绘制可偏移位置的地图
         map .draw(g, offsetX, offsetY);
 
         // 绘制可偏移位置的角色
         role .draw(g, offsetX, offsetY);
 
 
 
GameHandle GameMap 中,均需注入 offsetX offsetY 值,以生成对应图像。
GameHandle 实现:
// Example6 开始,为了实现背景的移动,所有算法都要加入偏移值
     public   void  draw(Graphics g,  int  offsetX,  int  offsetY) {
    // count 作为图像的偏移数值 , 并于 Example4 中添加 direction 以获取所处图像块位置
        g.drawImage( image x  *  CS  + offsetX,  y  *  CS  + offsetY,  x  *  CS  + offsetX +  CS y  *  CS  + offsetY +  CS ,
             count  *  CS direction  *  CS CS  +  count  *  CS direction  *  CS  +  CS panel );
}
 
GameMap 实现:
     // 修正 Example6 中绘制方式,引入地图坐标偏移计算
     public   void  draw(Graphics g,  int  offsetX,  int  offsetY) {
    
         int  firstTileX = pixelsToTiles(-offsetX);
         // 变更 X 坐标
         int  lastTileX = firstTileX + pixelsToTiles(MyPanel. WIDTH ) + 1;
       
         // 返回最小 X 偏移值
        lastTileX = Math.min(lastTileX,  COL );
       
        
         int  firstTileY = pixelsToTiles(-offsetY);
         // 变更 Y 坐标
         int  lastTileY = firstTileY + pixelsToTiles(MyPanel. HEIGHT ) + 1;
       
         // 返回最小 Y 偏移值
        lastTileY = Math.min(lastTileY,  ROW );
     // Java 或任何游戏开发中,算法都是最重要的一步,本例尽使用
     // 简单的双层 for 循环进行地图描绘,
                  for  ( int  i = firstTileY; i < lastTileY; i++) {
                        for  ( int  j = firstTileX; j < lastTileX; j++) {
                           // switch 作为 java 中的转换器,用于执行和 () 中数值相等
                        //  case 操作。请注意,在 case 操作中如果不以 break 退出
                        //  执行; switch 函数将持续运算到最后一个 case 为止。
                            switch  ( map [i][j]) {
                                case  0 :  //  地板
                                   g.drawImage( floorImage tilesToPixels(j) + offsetX, tilesToPixels(i) + offsetY,  panel );
                                    break ;
                                case  1 :  //  墙壁
                                   g.drawImage( wallImage tilesToPixels(j) + offsetX, tilesToPixels(i) + offsetY,  panel );
                                    break ;
                           }
                       }
            }


本文转自 cping 51CTO博客,原文链接:http://blog.51cto.com/cping1982/130235
    }
相关文章
|
5天前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
53 9
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
12天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
1月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
58 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
22天前
|
存储 JavaScript 前端开发
基于 SpringBoot 和 Vue 开发校园点餐订餐外卖跑腿Java源码
一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合,但并不是一个完全分离的项目。 前端视图通过JS的方式引入了Vue和Element UI,既能利用Vue的快速开发优势,
107 13
|
27天前
|
算法 Java API
如何使用Java开发获得淘宝商品描述API接口?
本文详细介绍如何使用Java开发调用淘宝商品描述API接口,涵盖从注册淘宝开放平台账号、阅读平台规则、创建应用并申请接口权限,到安装开发工具、配置开发环境、获取访问令牌,以及具体的Java代码实现和注意事项。通过遵循这些步骤,开发者可以高效地获取商品详情、描述及图片等信息,为项目和业务增添价值。
57 10
|
20天前
|
前端开发 Java 测试技术
java日常开发中如何写出优雅的好维护的代码
代码可读性太差,实际是给团队后续开发中埋坑,优化在平时,没有那个团队会说我专门给你一个月来优化之前的代码,所以在日常开发中就要多注意可读性问题,不要写出几天之后自己都看不懂的代码。
56 2
|
30天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
11天前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者
|
13天前
|
安全 Java Kotlin
Java多线程——synchronized、volatile 保障可见性
Java多线程中,`synchronized` 和 `volatile` 关键字用于保障可见性。`synchronized` 保证原子性、可见性和有序性,通过锁机制确保线程安全;`volatile` 仅保证可见性和有序性,不保证原子性。代码示例展示了如何使用 `synchronized` 和 `volatile` 解决主线程无法感知子线程修改共享变量的问题。总结:`volatile` 确保不同线程对共享变量操作的可见性,使一个线程修改后,其他线程能立即看到最新值。
|
13天前
|
消息中间件 缓存 安全
Java多线程是什么
Java多线程简介:本文介绍了Java中常见的线程池类型,包括`newCachedThreadPool`(适用于短期异步任务)、`newFixedThreadPool`(适用于固定数量的长期任务)、`newScheduledThreadPool`(支持定时和周期性任务)以及`newSingleThreadExecutor`(保证任务顺序执行)。同时,文章还讲解了Java中的锁机制,如`synchronized`关键字、CAS操作及其实现方式,并详细描述了可重入锁`ReentrantLock`和读写锁`ReadWriteLock`的工作原理与应用场景。