java游戏开发入门(九) - 图像

  • 前言
  • 音频资源
  • 编码
    • 首先完成BGM
    • 紧接着完成音效部分
    • 项目目录
    • 完整代码
  • 总结
  • 完整项目

前言

  对于一个游戏来说,音效也是必不可少的一环,自然也不能少了。这章我们加入背景音乐以及一些音效。

音频资源

  首先在resource目录下创建assets/music以及assets/sounds目录。resource/assets/music目录下用来存放我们的MP3资源文件,assets/sounds目录用来存放wav资源文件。我们将bgm.mp3放入music目录下,eat.wav放入sounds目录下。

编码

首先完成BGM

  BGM需要在游戏启动后就开始播发,所以我们需要在游戏引擎初始化完成之后就开始执行。所以我们来重写onPreInit方法,该方法在引擎加载完成之后执行。

    @Overrideprotected void onPreInit() {// 背景音乐loopBGM("bgm.mp3");}

紧接着完成音效部分

  在我们的Player对象碰撞到Gold对象时,我们需要一个奖励音效。

    /*** 初始化物理引擎(碰撞效果)*/@Overrideprotected void initPhysics() {getPhysicsWorld().addCollisionHandler(new CollisionHandler(EntityType.PLAYER,EntityType.GOLD){@Overrideprotected void onCollisionBegin(Entity player, Entity gold) {//将gold对象从游戏中移除gold.removeFromWorld();// 设置参数+1inc("integral",+1);// 在界面内随机位置生成一个 Gold对象spawn("Gold", FXGLMath.random(0,getAppWidth()-50),FXGLMath.random(0,getAppHeight()-50));play("eat.wav");}});onCollisionBegin(EntityType.PLAYER, EntityType.ENEMY,(player, enemy)->{inc("integral",-1);});}

项目目录

完整代码

import com.almasb.fxgl.app.GameApplication;
import com.almasb.fxgl.app.GameSettings;
import com.almasb.fxgl.core.math.FXGLMath;
import com.almasb.fxgl.dsl.FXGL;
import com.almasb.fxgl.entity.Entity;
import com.almasb.fxgl.physics.CollisionHandler;
import javafx.scene.input.KeyCode;
import javafx.scene.paint.Color;
import javafx.util.Duration;import java.util.Map;import static com.almasb.fxgl.dsl.FXGL.*;
import static com.almasb.fxgl.dsl.FXGL.onCollisionBegin;/*** @author lhDream*/
public class HelloWorldApp extends GameApplication {/*** 玩家实体*/private Entity player;@Overrideprotected void onPreInit() {// 背景音乐loopBGM("bgm.mp3");}/*** 初始化设置* @param settings 配置对象*/@Overrideprotected void initSettings(GameSettings settings) {settings.setTitle("Hello world");settings.setWidth(600);settings.setHeight(600);settings.setMainMenuEnabled(true);settings.setGameMenuEnabled(true);}/*** 初始化游戏内容*/@Overrideprotected void initGame() {// 注册实体工厂FXGL.getGameWorld().addEntityFactory(new DemoEntityFactory());// 在界面正中间生成玩家实体player = FXGL.spawn("Player",FXGL.getAppWidth()/2,FXGL.getAppHeight()/2);// 在界面200,200位置生成一个Gold实体spawn("Gold", 200,200);// 每秒生成一个敌方实体run(()->{// 生成坐标var x = FXGLMath.random(0,getAppWidth()-50);var y = FXGLMath.random(-50,0);spawn("Enemy",x,y);},Duration.seconds(1));}/*** 初始化输入*/@Overrideprotected void initInput() {onKey(KeyCode.W,"上",()->{player.translateY(-5);});onKey(KeyCode.S,"下",()->{player.translateY(+5);});onKey(KeyCode.A,"左",()->{player.translateX(-5);});onKey(KeyCode.D,"右",()->{player.translateX(+5);});}/*** 初始化物理引擎(碰撞效果)*/@Overrideprotected void initPhysics() {getPhysicsWorld().addCollisionHandler(new CollisionHandler(EntityType.PLAYER,EntityType.GOLD){@Overrideprotected void onCollisionBegin(Entity player, Entity gold) {//将gold对象从游戏中移除gold.removeFromWorld();// 设置参数+1inc("integral",+1);// 在界面内随机位置生成一个 Gold对象spawn("Gold", FXGLMath.random(0,getAppWidth()-50),FXGLMath.random(0,getAppHeight()-50));play("eat.wav");}});onCollisionBegin(EntityType.PLAYER, EntityType.ENEMY,(player, enemy)->{inc("integral",-1);});}/*** 初始化参数* @param vars*/@Overrideprotected void initGameVars(Map<String, Object> vars) {vars.put("integral",0);}/*** 初始化UI*/@Overrideprotected void initUI() {// 初始化 Text 字体大小18 颜色 粉色var scoreText = getUIFactoryService().newText("", Color.PINK, 18);scoreText.textProperty().bind(getip("integral").asString("分数: %d"));addUINode(scoreText, 10, 30);}/*** main 程序的开始* @param args 参数*/public static void main(String[] args) {launch(args);}
}

总结

  至此,入门应该没有什么问题了。觉得有用的话点个赞或者关注一下呗。

完整项目

https://github.com/lhDream/lhDreamGameDemo/tree/master/HelloWorld

java游戏开发入门(九) -音效相关推荐

  1. java游戏开发入门(十) -粒子特效

    java游戏开发入门十 - 粒子特效 java游戏开发入门十 - 粒子特效 前言 编码 创建一个粒子发射器,并将粒子发射器添加到实体对象 效果图 完整代码 完整项目 java游戏开发入门十 - 粒子特 ...

  2. java游戏开发入门(二) - 菜单

    java游戏开发入门(二) - 菜单 前言 编码 主菜单 游戏内菜单(按下ESC后出现,并会暂停游戏) 效果展示 主菜单 游戏内菜单 完整代码 完整项目 前言   上一章我们创建了一个600x600的 ...

  3. java游戏开发入门(六) - 变量 UI

    java游戏开发入门(六) - 变量 & UI 前言 编码 首先我们创建一个变量 修改碰撞逻辑 初始化UI并将UI与变量绑定绑定 于是我们就得到了这样一个效果 完整代码 完整项目 前言   上 ...

  4. java游戏开发入门(七) - 计时器

    java游戏开发入门(七) - 计时器 前言 函数说明 在一秒钟之后执行一次 每隔0.5秒执行一次 实例 目标效果 敌方实体 定时创建敌方实体 碰撞效果 效果展示 完整代码 HelloWorldApp ...

  5. java游戏开发入门(八) -图像

    java游戏开发入门(八) - 图像 前言 图片资源 首先我们来改造一下我们的Player实体 方法说明 效果展示 完整项目 前言   前面那么多基本上一个游戏需要的逻辑就差不多了,但是看上去还非常丑 ...

  6. Java版AVG游戏开发入门示例 3 ——脚本引擎的制作及应用

    源码下载地址:http://code.google.com/p/loon-simple/downloads/list 根据wikipedia的解释:脚本语言(Script language,scrip ...

  7. Java版AVG游戏开发入门示例[3]——脚本引擎的制作及应用

    源码下载地址:http://code.google.com/p/loon-simple/downloads/list 根据wikipedia的解释:脚本语言(Script language,scrip ...

  8. 游戏开发入门(九)游戏同步技术

    视频链接:游戏开发入门(九)游戏同步技术(3节课 时常:约1小时07分钟) 第三个视频后9分钟没有声音,不过核心内容都已涉及到 笔记与总结(请先学习视频内容): 1.网络同步的概念与意义 概念:任何一 ...

  9. 游戏开发入门(二)游戏开发概述

    这篇文章主要以问题的形式给大家解答下面几个问题: 1.游戏是如何开发出来的,开发流程大概是什么样子的? 2.游戏相关的职位都有哪些? 3.开发游戏需要哪些技术或能力? 4.程序员一般负责的内容有哪些? ...

最新文章

  1. 产品力挺PHP完爆Java
  2. 微信JS-SDK之图像接口开发详解
  3. 关于Matconvnet中模型发布与共享的思考
  4. 希沃展台如何使用_【海安幼教微家园】玩转希沃白板 点亮精彩课堂 —长江路幼儿园开展希沃一体机操作技能培训...
  5. 4阶范德蒙德行列式例题_行列式的性质和计算问题
  6. c语言在线测试题,C语言测试题
  7. 给Jquery easyui 的datagrid 每行添加操作链接
  8. LAMMPS安装全套解决方案
  9. 网易云播放器外链插入html,Wordpress网易云外链音乐播放调用
  10. Hp-socket高性能网络库三--tcp组件pack接收模型
  11. 计算机网络(2.12)物理层- 宽带接入技术-FTTx技术
  12. 无代码生产新模式探索
  13. 嵌入式开发要学多久?要学哪些课程
  14. jboot 增加llog4j日志
  15. Android手机无法识别SD卡的处理方法
  16. 编写函数 int min(int x ,int y,int z),实现求出三个数中的最小值。要求在main函数中输入三个整数,然后调用min函数,最后将求得的最小值输出。
  17. Mysql Workbench connection ssl not enable问题解决
  18. 第三代计算机期间出现了什么问题,第三代电子计算机使用的电子元件是什么_常见问题解析...
  19. netty结合java_在SpringBoot中整合使用Netty框架的详细教程
  20. Miscellaneous

热门文章

  1. scp远程免密传输---远程连接的为非root用户
  2. Android Wifi开发——WiFi连接(八)
  3. 2016京东编程题:小东分苹果
  4. caffine guava区别
  5. Flutter 实现文件下载
  6. 2021-06-17 串口、COM口、TTL、RS-232转换
  7. sql语句创建mysql数据库常见错误以及解决方法
  8. [附源码]Python计算机毕业设计房屋中介管理信息系统Django(程序+LW)
  9. python简答题及答案查询公众号和软件_大学慕课答案免费查询公众号
  10. 李永乐讲卷积神经网络,李永乐老师讲人工智能