学习FXGL

@[TOC]目录

FXGL学习day1

1.飞机大战

简介: 基本的函数以及碰撞使用以及物体移动

2.实现

2.1 代码

public class Game extends GameApplication {

   enum EntityType{
       PLAYER,BULLET,ENEMY
   }
    private Entity player;
   private Entity enemy;
   private Entity bullet;
   private Entity background;
    private List<Entity> entities=new ArrayList<>();
   private static final int WIDTH=480;
   private static final int HEIGHT=680;
   private Random random=new Random();
    @Override
    protected void initSettings(GameSettings gameSettings) {
        gameSettings.setTitle("孤岛飞行");
        gameSettings.setWidth(WIDTH);
        gameSettings.setHeight(HEIGHT);
    }
    @Override
    protected void initGame() {
        background=entityBuilder()
                .at(0,0)
                .view("background.png")
                .buildAndAttach();

         player=entityBuilder()
                 .type(EntityType.PLAYER)
                 .viewWithBBox("hero.png")
                 .with(new CollidableComponent(true))
                 .at(300,400)
                 .buildAndAttach();


        generation();//生产敌机
        produce();//生产子弹
    }
    private void generation(){
        enemy=entityBuilder()
                .type(EntityType.ENEMY)
                .at(random.nextDouble()*400+10,10)
                .viewWithBBox("enemy1.png")
                .with(new CollidableComponent(true))
                .buildAndAttach();

    }
    private void produce(){
        bullet=entityBuilder()
                .type(EntityType.BULLET)
                .at(player.getX()+50, player.getY())
                .viewWithBBox("bullet.png")
                .with(new CollidableComponent(true))
                .buildAndAttach();
    }
   /* private void spawnEntities(int count){
        for (int i=0;i<count;i++){
            enemy=entityBuilder()
                    .type(EntityType.ENEMY)
                    .viewWithBBox("enemy1.png")
                    .with(new CollidableComponent(true))
                    .at(200,-50)
                    .buildAndAttach();
            entities.add(enemy);
        }
    }*/

    @Override
    protected void initInput() {
        Input input=getInput();
        input.addEventHandler(MouseEvent.MOUSE_MOVED,event -> {
            player.setPosition(event.getX()-50,event.getY()-50);
        });

    }
    @Override
    protected void onUpdate(double tpf) {
       enemy.translateY(3.14);
       bullet.translateY(-16);
       if (enemy.getY()>getAppHeight()){
           getGameWorld().removeEntity(enemy);
           generation();
       }
       if (bullet.getY()<0){
           getGameWorld().removeEntity(bullet);
          produce();
       }

    }

    @Override
    protected void initPhysics() {

        //玩家和敌机
       getPhysicsWorld().addCollisionHandler(new CollisionHandler(EntityType.PLAYER,EntityType.ENEMY) {
           @Override
           protected void onCollisionBegin(Entity player, Entity enemy) {
              enemy.removeFromWorld();
              // getGameWorld().removeEntities(player,enemy);
           }
       });

       //子弹和敌人
     getPhysicsWorld().addCollisionHandler(new CollisionHandler(EntityType.BULLET,EntityType.ENEMY) {
         @Override
         protected void onCollisionBegin(Entity bullet, Entity enemy) {
            getGameWorld().removeEntities(bullet,enemy);
         }
     });

    }

    public static void main(String[] args) {
        launch(args);
    }

}


2.2 运行

在这里插入图片描述

后续继续完善…

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流风之海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值