栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

libGDX游戏开发之添加玩家和敌人(三)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

libGDX游戏开发之添加玩家和敌人(三)

libGDX游戏开发之添加玩家和敌人(三)

libGDX系列,游戏开发有unity3D巴拉巴拉的,为啥还用java开发?因为我是Java程序员emm…国内用libgdx比较少,多数情况需要去官网和google找资料,相互学习的可以加我联系方式,仅限学习。

添加玩家

按照之前的文章(一),我们在地图编辑器Tiled中编辑一个块=20x20,64*48的地图,添加一个背景用来识别玩家在走路:

将地图资源添加到项目后,编写下面的代码。

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.maps.tiled.TiledMap;
import com.badlogic.gdx.maps.tiled.TmxMapLoader;
import com.badlogic.gdx.maps.tiled.renderers.OrthogonalTiledMapRenderer;
import com.badlogic.gdx.utils.ScreenUtils;


public class WorldMap extends ApplicationAdapter {
    // 精灵批处理
    public SpriteBatch batch;
    // 地图相关
    private TmxMapLoader maploader;
    private TiledMap map;
    private OrthographicCamera camera;// 相机
    private OrthogonalTiledMapRenderer renderer;

    private float mapX = 128f, mapY = 128f; // 地图的位置,用于相机观察这个位置
    private float moveSpeed = 4f; // 相机移动的速度

    // 玩家
    private TextureRegion player;

    @Override
    public void create() {
        batch = new SpriteBatch();

        // 加载地图和地图渲染
        maploader = new TmxMapLoader();
        // 地图是 块=20  像素大小:1280x960
        map = maploader.load("worldmap/worldmap.tmx");
        renderer = new OrthogonalTiledMapRenderer(map, 1);// 将地图单元设置为 1

        camera = new OrthographicCamera();
        // 相机可看到的宽高
        camera.setToOrtho(false, 500, 500);
        camera.position.x = mapX;
        camera.position.y = mapY;
        camera.update();

        // 玩家 大小 256*256 随意找一张图片
        player = new TextureRegion(new Texture("worldmap/badlogic.jpg"), 256, 256);
    }

    @Override
    public void render() {
        // 清除相机内容
        ScreenUtils.clear(225f, 225f, 225f, 0.4f);
        // 用户的输入
        userInput();

        // 更新相机
        camera.position.x = mapX;
        camera.position.y = mapY;
        camera.update();// 一定要记得更新这个相机的视图
        // 摄影机查看并渲染内容
        renderer.setView(camera);
        renderer.render();

        // 绘制玩家, -128 是因为绘制的原点是中央
        batch.begin();
        batch.draw(player, Gdx.graphics.getWidth() / 2 - 128, Gdx.graphics.getHeight() / 2 - 128);
        batch.end();
    }

    
    private void userInput() {
        if (Gdx.input.isKeyPressed(Input.Keys.LEFT) || Gdx.input.isKeyPressed(Input.Keys.A)) {
            if (mapX < 64) {
                mapX = 64; // 不给玩家走出屏幕外
            } else
                mapX -= moveSpeed;
        }

        if (Gdx.input.isKeyPressed(Input.Keys.RIGHT) || Gdx.input.isKeyPressed(Input.Keys.D)) {
            if (mapX > 1280 - 64) {
                mapX = 1280 - 64;// 不给玩家走出屏幕外
            } else
                mapX += moveSpeed;
        }
        if (Gdx.input.isKeyPressed(Input.Keys.UP) || Gdx.input.isKeyPressed(Input.Keys.W)) {
            if (mapY > 960 - 64) {
                mapY = 960 - 64;// 不给玩家走出屏幕外
            } else
                mapY += moveSpeed;
        }
        if (Gdx.input.isKeyPressed(Input.Keys.DOWN) || Gdx.input.isKeyPressed(Input.Keys.S)) {
            if (mapY < 64) {
                mapY = 64;// 不给玩家走出屏幕外
            } else
                mapY -= moveSpeed;
        }
    }

    @Override
    public void dispose() {
        super.dispose();
    }
}

编写main函数,窗口大小为1280*960

public class WorldMapApp {
    public static void main(String[] arg) {
        LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
        config.width = 1280;
        config.height = 960;
        new LwjglApplication(new WorldMap(), config);
    }
}

运行效果如下:按方向键移动。

添加敌人

任意找一张图片当做敌人,代码如下:

代码如下,

public class WorldMap extends ApplicationAdapter {
    // 精灵批处理
    public SpriteBatch batch;
    // 地图相关
    private TmxMapLoader maploader;
    private TiledMap map;
    private OrthographicCamera camera;// 相机
    private OrthogonalTiledMapRenderer renderer;

    private float mapX = 128f, mapY = 128f; // 地图的位置,用于相机观察这个位置
    private float moveSpeed = 4f; // 相机移动的速度

    // 玩家
    private TextureRegion player;

    // 敌人 ,  enemyX  enemyY 敌人的位置为地图位置
    private TextureRegion enemy;
    private int enemyX = 200, enemyY = 700,enemyMoveSpeed=2;

    @Override
    public void create() {
        batch = new SpriteBatch();

        // 加载地图和地图渲染
        maploader = new TmxMapLoader();
        // 地图是 块=20  像素大小:1280x960
        map = maploader.load("worldmap/worldmap.tmx");
        renderer = new OrthogonalTiledMapRenderer(map, 1);// 将地图单元设置为 1

        camera = new OrthographicCamera();
        // 相机可看到的宽高
        camera.setToOrtho(false, 500, 500);
        camera.position.x = mapX;
        camera.position.y = mapY;
        camera.update();

        // 玩家 大小 256*256 随意找一张图片
        player = new TextureRegion(new Texture("worldmap/badlogic.jpg"), 256, 256);
        // 敌人,随便找了一张 250 250的截图
        enemy = new TextureRegion(new Texture("worldmap/enemy.png"), 250, 250);
    }

    @Override
    public void render() {
        // 清除相机内容
        ScreenUtils.clear(225f, 225f, 225f, 0.4f);
        // 用户的输入
        userInput();

        // 更新相机
        camera.position.x = mapX;
        camera.position.y = mapY;
        camera.update();// 一定要记得更新这个相机的视图
        // 摄影机查看并渲染内容
        renderer.setView(camera);
        renderer.render();

        // 敌人移动
        enemyX=enemyX+enemyMoveSpeed;
        if (enemyX>600){
            enemyMoveSpeed=-1;// 往左走
        }
        if (enemyX<200){
            enemyMoveSpeed=1;// 往右走
        }
        // 调用渲染,绘制敌人到地图上
        renderer.getBatch().begin();
        renderer.renderImageLayer(new TiledMapImageLayer(enemy, enemyX, enemyY));
        renderer.getBatch().end();

        // 绘制玩家, -128 是因为绘制的原点是中央
        batch.begin();
        batch.draw(player, Gdx.graphics.getWidth() / 2 - 128, Gdx.graphics.getHeight() / 2 - 128);
        batch.end();
    }

    
    private void userInput() {
        if (Gdx.input.isKeyPressed(Input.Keys.LEFT) || Gdx.input.isKeyPressed(Input.Keys.A)) {
            if (mapX < 64) {
                mapX = 64; // 不给玩家走出屏幕外
            } else
                mapX -= moveSpeed;
        }

        if (Gdx.input.isKeyPressed(Input.Keys.RIGHT) || Gdx.input.isKeyPressed(Input.Keys.D)) {
            if (mapX > 1280 - 64) {
                mapX = 1280 - 64;// 不给玩家走出屏幕外
            } else
                mapX += moveSpeed;
        }
        if (Gdx.input.isKeyPressed(Input.Keys.UP) || Gdx.input.isKeyPressed(Input.Keys.W)) {
            if (mapY > 960 - 64) {
                mapY = 960 - 64;// 不给玩家走出屏幕外
            } else
                mapY += moveSpeed;
        }
        if (Gdx.input.isKeyPressed(Input.Keys.DOWN) || Gdx.input.isKeyPressed(Input.Keys.S)) {
            if (mapY < 64) {
                mapY = 64;// 不给玩家走出屏幕外
            } else
                mapY -= moveSpeed;
        }
    }

    @Override
    public void dispose() {
        super.dispose();
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/294715.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号