有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java是在游戏中绘制收藏品的最佳方法?

我希望我的游戏能从一个精灵身上抽取硬币,然后我的主角就能捡起它们。我试图使用数组列表来实现这个功能,但我不知道如何实现这个功能。我是否制作了一个需要绘制的精灵数组列表,然后重新使用?如果是,怎么做? 或者我需要使用其他功能吗?我是个乞丐,如果这个问题看起来很奇怪,我很抱歉


共 (2) 个答案

  1. # 1 楼答案

    我建议使用Libgdx的Array类而不是javaarraylist,因为它针对游戏性能进行了优化

    创建一个数组以容纳所有活动硬币

    Array<Sprite> activeCoins = new Array<Sprite>();
    

    然后创建一个硬币池。池是一个帮助器,用于创建某些内容的副本,而不会导致垃圾收集中断。您需要创建一个子类Pool来使用。它描述了如何在需要时制造新硬币

    public class CoinPool extends Pool<Sprite> {
        TextureRegion coinTextureRegion;
    
        public CoinPool(TextureRegion coinTextureRegion){
            this.coinTextureRegion = coinTextureRegion;
        }
    
        protected Sprite newObject(){
            return new Sprite(coinTextureRegion);
        }
    }
    

    然后创建一个CoinPool实例,用于游戏中

    现在,只要你想要一枚新硬币,就从池子里拿出一枚。它只会在必要时实例化一个新的。否则,它会给你一个以前回收的。一旦你得到了它,在你想要的地方设置它的位置和其他参数。请记住,它可能仍然附加了旧值,因此,如果您正在旋转硬币并将其四处移动或更改颜色,则需要确保重置位置、旋转和颜色

    Sprite newCoin = coinPool.obtain();
    newCoin.setPosition(x,y,z); //as desired 
    newCoin.setRotation(0); //if you are rotating them
    newCoin.setColor(Color.WHITE); //if you have been changing their color
    
    activeCoins.add(newCoin); //Add your new coin to the list of active coins
    

    无论何时您处理完一枚硬币(当它被收集时),您都需要将其从活动硬币列表中删除并返回到池中:

    for (Sprite coin : activeCoins){
        boolean grabbed = isCoinGrabbed(coin); //however you want to do this
        if (grabbed){
            coinGrabbed(); //whatever you want to happen when a coin is grabbed
    
            activeCoins.remove(coin);
            coinPool.free(coin); //return it to the pool
        }
    }
    

    要绘制它们,您只需将当前在activeCoins列表中的所有精灵提交到精灵批

  2. # 2 楼答案

    我最近用Java设计了一个2D侧滚角色扮演游戏。游戏的一部分是四处走动,捡起剑和盔甲等物品

    我完成将精灵加载到游戏的方法是通过将图标设置为图像来给JLabel我的图像(在游戏开始时在本地检索)

    接下来,我会在游戏地图上随机放置我的JLabel。我没有使用数组列表,不过如果你有多种类型的剑或硬币等,你可以使用数组列表

    阵列列表中可以包含各种类型的剑(JLabel's,其图标设置为精灵),例如青铜剑、银剑和金剑

    一旦你的JLabel加载到你的地图上,你可以给他们一个命中框,如果你的角色在命中框内移动,那么将JLabel从地图上移除并放入玩家背包中(或者不管它是什么,可能会附加一个硬币数量?)