gpt4 book ai didi

java - Libgdx |每帧创建新的 Timer.Task 是否会影响性能?

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

对于我的游戏,我必须为每个敌人创建一个新的 Timer.Task,以便我可以在 x 秒后执行一些代码。代码执行后,我取消任务。当玩家与敌人发生碰撞时,就会创建这个计时器。那么,如此频繁地创建新的 Timer.Task 会影响我的性能吗?请记住,有很多敌人。如果是这样,那么有没有更好的方法来在x秒(仅1次)后执行一段代码。谢谢!

最佳答案

只要您重用任务,就不会出现任何问题,这样就不会在渲染循环中导致大量分配和 GC。实现此目的的一种方法是使用池化。这将需要具体的任务实现,而不是匿名的。

您可以创建一个基础 PoolTask​​ 来扩展您的任务。完成后,此实例将自动发送回 Pools 中的池,而不是进行垃圾收集。顺便说一句,任务完成后无需手动取消,因为计时器已经自动执行此操作。

public abstract class PoolTask extends Timer.Task {
public void run (){
doTask();
Pools.free(this);
}

abstract public void doTask();
}

您可以通过将操作放入 doTask() 方法而不是 run() 来实现此子类。您的子类必须有一个空的构造函数,以便您可以自动从池中获取池实例。

MyPoolTaskSubclass someTask = Pools.obtain(MyPoolTaskSubclass.class);
someTask.configure(x, y, z); //you can add config methods if it needs parameters
//since the constructor must be empty

Timer.scheduleTask(someTask, someDelay);

如果您的任务需要参数,并且其中一些参数需要有默认值,则该类应该实现 Poolable 并在 reset() 方法中重新应用默认值。

关于java - Libgdx |每帧创建新的 Timer.Task 是否会影响性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39128425/

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