gpt4 book ai didi

java - 有没有办法设置列表的最大大小?

转载 作者:行者123 更新时间:2023-12-01 13:13:04 24 4
gpt4 key购买 nike

我正在寻求有关以下问题的帮助。这不是我的原始代码,而且我对 Java 还很陌生,所以我可能会遗漏一些明显的东西。

代码在我的游戏中产生了一些效果,但是对于产生的效果数量似乎没有任何上限。有什么方法可以将效果的上限值限制为某个整数值吗?说20个?或者我可以将此值设置为 20 到 30 之间的随机整数吗?

我一直在尝试限制列表大小的上限,但似乎不起作用。

任何建议表示赞赏。

我也尝试过调整值 for(int j = 0; j < i; j++)类似 for(int j = 0; j < 20; j++) ,但这似乎也没有效果,并且效果像以前一样产生。

我也尝试删除 int i = list.size();Actor actor = (Actor)list.get(j);这样代码就只依赖于 for循环,但代码无法编译:似乎需要代码 Actor actor = (Actor)list.get(j); 。我得到一个 cannot resolve symbol 以下错误:

symbol  : class pos  
location: package actor
if(!flag && actor.pos.getAbsPoint().distance(point3d) < 10000D && (actor instanceof TypeBomber) && actor.getArmy() != myArmy)

symbol : variable actor
location: class com.maddox.il2.objects.vehicles.stationary.CandC$FireUnit
if(!flag && actor.pos.getAbsPoint().distance(point3d) < 10000D && (actor instanceof TypeBomber) && actor.getArmy() != myArmy)

symbol : variable actor
location: class com.maddox.il2.objects.vehicles.stationary.CandC$FireUnit
if(!flag && actor.pos.getAbsPoint().distance(point3d) < 10000D && (actor instanceof TypeBomber) && actor.getArmy() != myArmy)



public boolean danger()
{
boolean flag = false;
Point3d point3d = new Point3d();
pos.getAbs(point3d);
List list = Engine.targets();
World.MaxVisualDistance = 50000F;
int i = list.size();
for(int j = 0; j < i; j++)
{
Actor actor = (Actor)list.get(j);
if(!flag && actor.pos.getAbsPoint().distance(point3d) < 10000D && (actor instanceof TypeBomber) && actor.getArmy() != myArmy)
{
Random random = new Random();
int k = random.nextInt(500);
int l = k - 250;
k = random.nextInt(500);
int i1 = k - 250;
Eff3DActor.New(this, null, new Loc(l, i1, 0.0D, 0.0F, 90F, 0.0F), 1.0F, "Effects/Smokes/CityFire.eff", 600F);
flag = true;
int j1 = random.nextInt(10);
wait = (float)(1.0D + (double)j1 * 0.10000000000000001D);
}
}

感谢您的帮助。就像我说的,如果我遗漏了一些明显的东西,我很抱歉。

最佳答案

我无法确定所有这些代码在做什么,但是,您的函数似乎实际上返回了超出您粘贴点的标志?而且,Actor 列表的大小似乎是可以制作多少个烟雾效果的上限(受通过 if 语句的数量限制)。这就是说我会尝试这样的事情(为了保留函数的其余部分)

if(!flag && actor.pos.getAbsPoint().distance(point3d) < 10000D && (actor instanceof TypeBomber) && actor.getArmy() != myArmy)
{
if (renderedCount < 20)
{
Random random = new Random();
int k = random.nextInt(500);
int l = k - 250;
k = random.nextInt(500);
int i1 = k - 250;
Eff3DActor.New(this, null, new Loc(l, i1, 0.0D, 0.0F, 90F, 0.0F), 1.0F, "Effects/Smokes/CityFire.eff", 600F);
int j1 = random.nextInt(10);
wait = (float)(1.0D + (double)j1 * 0.10000000000000001D);
renderedCount += 1;
}
flag = true;
}

确保在 for 循环之前声明 int renderCount。

现在,这应该将函数限制为每次调用时创建 20 个烟雾效果。这给我们带来了您所遇到的问题,而这种方法似乎不起作用。既然你提到这是一个游戏,我愿意打赌这个函数每分钟被调用很多次(很可能每个“游戏滴答”调用一次)。如果是这种情况,限制该函数创建的烟雾效果的数量似乎不会在游戏中起任何作用。为了完全限制数量,您必须做一些更复杂的事情,跟踪当前全局范围内烟雾效果的数量。这可能需要跟踪自效果开始以来已经过去了多长时间...(看起来等待可能是效果开始后继续的时间)。

至于如何在全局范围内跟踪事物的建议,我可能会推荐一个单例以及单例 canCreate() 和 didCreate(float timeValue) 上的一些方法,然后用 canCreate() 替换enderedCount < 20,并用 canCreate() 替换enderedCount += 1 didCreate(等待)。

无论如何,我希望这对你有所帮助。

附:限制这一点所带来的复杂性是为什么 ModelViewController 在设计这样的东西时如此重要的一个主要例子......

编辑:粗糙单例

public class SmokeCountSingleton {
private static SmokeCountSingleton instance = null;
private List<Long> smokeList = new ArrayList<Long>();
protected SmokeCountSingleton() {

}
public static SmokeCountSingleton getInstance() {
if(instance == null) {
instance = new SmokeCountSingleton();
}
return instance;
}
public boolean canCreate() {
cleanList()
return (smokeList.size() <= 20)
}
public void didCreate(float duration) {
//duration appears to be in seconds but we want it in milliseconds
smokeList.add(System.currentTimeMillis() + duration*1000)
}
private void cleanList(){
//remove items from list who have exceeded their duration
// have a value less than System.currentTimeMillis()
}
}

我没有时间来充实它,但希望这足以让你继续下去。单例的要点在于它只有一个实例,这有点像您的程序可以使用数据库或其他外部服务器,但没有太多开销。这样您也不必声明它,因此您不必担心需要在哪里声明它,但它仍然像您有一个全局列表一样。要访问单例实例(和方法),您只需执行以下操作:

SmokeCountSingleton.getInstance().canCreate()
SmokeCountSingleton.getInstance().didCreate(someDurationValue)

就像我之前说的,我的 Java 有点生疏,我只是在编辑窗口中模拟了这一点;如果它不能“开箱即用”,我们深表歉意。

此外,作为旁注,您很可能运行多个线程来调用将被访问的函数。所以你可能想看看Java中的synchronized关键字...

关于java - 有没有办法设置列表的最大大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22687024/

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