@[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 运行
后续继续完善…