java游戏开发入门(九) -音效
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游戏开发入门(九) -音效相关推荐
- java游戏开发入门(十) -粒子特效
java游戏开发入门十 - 粒子特效 java游戏开发入门十 - 粒子特效 前言 编码 创建一个粒子发射器,并将粒子发射器添加到实体对象 效果图 完整代码 完整项目 java游戏开发入门十 - 粒子特 ...
- java游戏开发入门(二) - 菜单
java游戏开发入门(二) - 菜单 前言 编码 主菜单 游戏内菜单(按下ESC后出现,并会暂停游戏) 效果展示 主菜单 游戏内菜单 完整代码 完整项目 前言 上一章我们创建了一个600x600的 ...
- java游戏开发入门(六) - 变量 UI
java游戏开发入门(六) - 变量 & UI 前言 编码 首先我们创建一个变量 修改碰撞逻辑 初始化UI并将UI与变量绑定绑定 于是我们就得到了这样一个效果 完整代码 完整项目 前言 上 ...
- java游戏开发入门(七) - 计时器
java游戏开发入门(七) - 计时器 前言 函数说明 在一秒钟之后执行一次 每隔0.5秒执行一次 实例 目标效果 敌方实体 定时创建敌方实体 碰撞效果 效果展示 完整代码 HelloWorldApp ...
- java游戏开发入门(八) -图像
java游戏开发入门(八) - 图像 前言 图片资源 首先我们来改造一下我们的Player实体 方法说明 效果展示 完整项目 前言 前面那么多基本上一个游戏需要的逻辑就差不多了,但是看上去还非常丑 ...
- Java版AVG游戏开发入门示例 3 ——脚本引擎的制作及应用
源码下载地址:http://code.google.com/p/loon-simple/downloads/list 根据wikipedia的解释:脚本语言(Script language,scrip ...
- Java版AVG游戏开发入门示例[3]——脚本引擎的制作及应用
源码下载地址:http://code.google.com/p/loon-simple/downloads/list 根据wikipedia的解释:脚本语言(Script language,scrip ...
- 游戏开发入门(九)游戏同步技术
视频链接:游戏开发入门(九)游戏同步技术(3节课 时常:约1小时07分钟) 第三个视频后9分钟没有声音,不过核心内容都已涉及到 笔记与总结(请先学习视频内容): 1.网络同步的概念与意义 概念:任何一 ...
- 游戏开发入门(二)游戏开发概述
这篇文章主要以问题的形式给大家解答下面几个问题: 1.游戏是如何开发出来的,开发流程大概是什么样子的? 2.游戏相关的职位都有哪些? 3.开发游戏需要哪些技术或能力? 4.程序员一般负责的内容有哪些? ...
最新文章
- 产品力挺PHP完爆Java
- 微信JS-SDK之图像接口开发详解
- 关于Matconvnet中模型发布与共享的思考
- 希沃展台如何使用_【海安幼教微家园】玩转希沃白板 点亮精彩课堂 —长江路幼儿园开展希沃一体机操作技能培训...
- 4阶范德蒙德行列式例题_行列式的性质和计算问题
- c语言在线测试题,C语言测试题
- 给Jquery easyui 的datagrid 每行添加操作链接
- LAMMPS安装全套解决方案
- 网易云播放器外链插入html,Wordpress网易云外链音乐播放调用
- Hp-socket高性能网络库三--tcp组件pack接收模型
- 计算机网络(2.12)物理层- 宽带接入技术-FTTx技术
- 无代码生产新模式探索
- 嵌入式开发要学多久?要学哪些课程
- jboot 增加llog4j日志
- Android手机无法识别SD卡的处理方法
- 编写函数 int min(int x ,int y,int z),实现求出三个数中的最小值。要求在main函数中输入三个整数,然后调用min函数,最后将求得的最小值输出。
- Mysql Workbench connection ssl not enable问题解决
- 第三代计算机期间出现了什么问题,第三代电子计算机使用的电子元件是什么_常见问题解析...
- netty结合java_在SpringBoot中整合使用Netty框架的详细教程
- Miscellaneous