Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有更好的方法用Java编写游戏流程?_Java_Performance_Optimization - Fatal编程技术网

有没有更好的方法用Java编写游戏流程?

有没有更好的方法用Java编写游戏流程?,java,performance,optimization,Java,Performance,Optimization,我想为游戏编写一个后端。在这个游戏中,有一些任务必须完成。 例如:查找门x的钥匙。 任务的数量是无限的,但(可能)不会超过25个 如果如上例所示找到一个键,则应该可以解决链接在一起的任务 我的第一次尝试: Task.java public class Task { private int id; private boolean solved; private Task[] links; private String name; public Task(int id, String name,

我想为游戏编写一个后端。在这个游戏中,有一些任务必须完成。 例如:查找门x的钥匙。 任务的数量是无限的,但(可能)不会超过25个

如果如上例所示找到一个键,则应该可以解决链接在一起的任务

我的第一次尝试: Task.java

public class Task {
private int id;
private boolean solved;
private Task[] links;
private String name;

public Task(int id, String name, Task... links) {
    this.id = id;
    this.links = links;
    this.name = name;
}
每次命令用于解决任务时,都会检查所有链接的任务是否已解决。 同样在Task.java中:

public boolean solve() {
    if (this.links != null && links.length != 0) {
        for (Task t : links) {
            if (t.isSolved()) {
                continue;
            } else {
                return false;
            }
        }
        this.solved = true;
        return true;
    }
    return false;
}

这似乎效率很低,我会发现很难注意所有任务状态。有更好的方法吗?

正如Amongalen评论的那样,检查25项任务对性能没有显著影响。

您应该阅读一些有关过早优化的内容。检查25个对象不算什么,除非你想每秒检查数百万次。你不应该这么做。一般来说,在看到一些性能问题之前不要进行优化。要扩展@Amongalen所说的内容:如果大约有25个任务,那么
Task.solve()
将在一个playthrough中最多执行25次(假设一个任务没有解决两次)。这意味着在这种情况下,性能几乎是完全无关的。棘手的是,这个后端将在Raspberry Pi(3b)上运行,而执行速度在这里是一个相当大的限制因素(尽管你是对的,每秒检查25个对象并不是Raspberry Pi的限制)。但另一个问题是,前端将继续询问任务是否已解决,以显示“后续任务”。感谢@Amongalen对过早优化的指点。我想我会尝试一下,看看我能做到什么。我想接受这一点作为问题的答案,如果这对你来说没问题,Joachim SauerAlso你可以同意前端的ina协议,这样就不需要检查任务是否在后端解决,如果他们已经知道的话that@MarcosVasconcelos你能再详细一点吗?