java游戏开发入门(五)

编程入门 行业动态 更新时间:2024-10-08 00:34:35

java<a href=https://www.elefans.com/category/jswz/34/1770034.html style=游戏开发入门(五)"/>

java游戏开发入门(五)

java游戏开发入门(五) - 碰撞机制

  • 前言
  • 编码
    • 实体类型
    • Gold实体定义
    • Player实体修改
    • 在游戏内部创建Glod实体
    • 初始化碰撞效果
    • 效果展示
    • 完整代码
      • EntityType
      • DemoEntityFactory
      • HelloWorldApp
  • 完整项目

前言

  上一章呢,我们讲了对Player的控制,这一章讲一下怎么处理不同实体之间的碰撞处理,

编码

实体类型

  既然是不同的实体,那我们就要对实体进行类型区分,这里采用枚举的方式区分不同的实体。

/*** 实体类型* @author lhDream*/
public enum EntityType {PLAYER,GOLD
}

Gold实体定义

  既然是不同的实体碰撞,那么就需要不同的实体,这里我们创建一个Gold实体,并设置类型为GOLD

    /*** 创建Gold实体* @return 玩家实体*/@Spawns("Gold")public Entity newGold(SpawnData data){return FXGL.entityBuilder(data)//声明设备类型.type(EntityType.GOLD)// 根据UI大小自动生成碰撞体积.collidable()// 宽 50px 高 50px 颜色红色.viewWithBBox(new Rectangle(50,50, Color.RED)).build();}

Player实体修改

  与此同时,Player实体也要声明实体类型,并标记实体为可碰撞类型。(ps:这里把Player的大小改为了50x50,主要是因为10x10看着太小了)

    /*** 创建玩家实体* @return 玩家实体*/@Spawns("Player")public Entity newPlayer(SpawnData data){return FXGL.entityBuilder(data)// 声明设备类型.type(EntityType.PLAYER)// 将实体标记为可碰撞,并根据UI大小自动生成碰撞体积.collidable()// 宽 10px 高 10px 颜色黑色.viewWithBBox(new Rectangle(50,50, Color.BLACK)).build();}

在游戏内部创建Glod实体

// 在界面200,200位置生成一个Gold实体
spawn("Gold", 200,200);

初始化碰撞效果

	/*** 初始化碰撞效果*/@Overrideprotected void initPhysics() {getPhysicsWorld().addCollisionHandler(new CollisionHandler(EntityType.PLAYER,EntityType.GOLD){@Overrideprotected void onCollisionBegin(Entity player, Entity gold) {//将gold对象从游戏中移除gold.removeFromWorld();}});}

效果展示

碰撞or物理引擎


完整代码

EntityType

/*** 实体类型* @author lhDream*/
public enum EntityType {PLAYER,GOLD
}

DemoEntityFactory

import com.almasb.fxgl.dsl.FXGL;
import com.almasb.fxgl.entity.Entity;
import com.almasb.fxgl.entity.EntityFactory;
import com.almasb.fxgl.entity.SpawnData;
import com.almasb.fxgl.entity.Spawns;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;/*** 实体工厂* @author lhDream*/
public class DemoEntityFactory implements EntityFactory {/*** 创建玩家实体* @return 玩家实体*/@Spawns("Player")public Entity newPlayer(SpawnData data){return FXGL.entityBuilder(data)// 声明设备类型.type(EntityType.PLAYER)// 将实体标记为可碰撞,并根据UI大小自动生成碰撞体积.collidable()// 宽 10px 高 10px 颜色黑色.viewWithBBox(new Rectangle(50,50, Color.BLACK)).build();}/*** 创建Gold实体* @return 玩家实体*/@Spawns("Gold")public Entity newGold(SpawnData data){return FXGL.entityBuilder(data)//声明设备类型.type(EntityType.GOLD)// 根据UI大小自动生成碰撞体积.collidable()// 宽 50px 高 50px 颜色红色.viewWithBBox(new Rectangle(50,50, Color.RED)).build();}}

HelloWorldApp

import com.almasb.fxgl.app.GameApplication;
import com.almasb.fxgl.app.GameSettings;
import com.almasb.fxgl.dsl.FXGL;
import com.almasb.fxgl.entity.Entity;
import com.almasb.fxgl.physics.CollisionHandler;
import javafx.scene.input.KeyCode;import static com.almasb.fxgl.dsl.FXGL.*;/*** @author lhDream*/
public class HelloWorldApp extends GameApplication {/*** 玩家实体*/private Entity player;/*** 初始化设置* @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);}/*** 初始化输入*/@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 tank, Entity gold) {//将gold对象从游戏中移除gold.removeFromWorld();}});}/*** main 程序的开始* @param args 参数*/public static void main(String[] args) {launch(args);}
}

完整项目

更多推荐

java游戏开发入门(五)

本文发布于:2024-02-25 06:18:24,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1698076.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:游戏开发   入门   java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!