gpt4 book ai didi

java - 在游戏中绘制 Collection 品的最佳方式?

转载 作者:行者123 更新时间:2023-11-30 03:48:53 27 4
gpt4 key购买 nike

我希望我的游戏能够从 Sprite 中抽取硬币,然后我的主角就能够捡起它们。我正在尝试为此使用数组列表,但我不知道如何实现此功能。我是否制作一个需要绘制的 Sprite 数组列表,然后重用它?如果是这样,怎么办?或者我使用其他功能吗?我是一个初学者,如果这个问题看起来很奇怪,我很抱歉。

最佳答案

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

创建一个数组来保存所有活跃的硬币。

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

每当您使用完硬币(当它被收集时),您需要将其从 Activity 硬币列表中删除并将其返回到池中:

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 列表中当前的所有 Sprite 提交到 Sprite 批处理即可。

关于java - 在游戏中绘制 Collection 品的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24918988/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com