小编Cab*_*ose的帖子

以A,B的一致速度移动对象

我正在尝试创建自己的原始2D图形游戏引擎.游戏的核心部分是向敌人发射不同的射弹.在我继续工作之前,我需要让这个组件工作.

我现在所拥有的是沿着穿过起点(x,y)和目标点(x1,x2)的线移动我的射弹.我利用了线性函数y = mx + b.问题在于我如何更新射弹的位置会导致速度不一致,具体取决于线的斜率.(更大的斜坡使它更快地移开).

这是我正在运行的游戏循环的核心结构:

    private void executeGameLoop() 
    {

        long nextFrameStart = System.nanoTime();
        while(panel.getRunning()) 
        {
            do 
            {
                panel.update();
                nextFrameStart += FRAME_PERIOD;
            } while(nextFrameStart < System.nanoTime());

            long remaining = nextFrameStart - System.nanoTime();
            panel.repaint();

            if (remaining > 0) 
            {
                try 
                {
                    Thread.sleep(remaining / 1000000);
                } 
                catch(Throwable e) 
                {
                System.out.println(e.getMessage()); 
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

这只是更新结构和图形的机制.panel.update在某些情况下,每当这个叫炮弹更新它的位置时.以下是更新射弹的方法:

这告诉射弹它有一个目标并设置有关该线的信息.

public void setHasTarget(boolean hasTargetIn)
    {
        if(hasTargetIn)
        {
            deltaX = getTargetX() - getX();
            deltaY = getTargetY() - getY();
            slope = deltaY / …
Run Code Online (Sandbox Code Playgroud)

java game-physics

6
推荐指数
1
解决办法
8107
查看次数

C# 中的 Try-Catch 与 If 性能

我试图更多地了解各种设计选择的含义,并找到最有效的解决方案来防止我的代码中出现错误。在深入探讨之前,请允许我简要概括地陈述我的问题:

与 if 语句结构相比,try catch 块是处理越界异常的更有效解决方案吗?

我知道引发异常很昂贵,但是通过删除不必要的 if 语句来降低成本吗?

现在,请允许我陈述我的具体问题,以便为您提供更多有用的信息。

我正在构建一个游戏,该游戏的一部分是一个世界网格解决方案和一个探路者。游戏单元可以从世界网格请求节点(通过将坐标信息作为有序对 (x, z) 发送),然后发送到探路者或对它们执行一些其他杂项操作。因为节点被请求的频率很高,特别是探路者,这似乎是一个尝试优化的聪明地方。

这是我当前根据节点数组中的xz值返回给定节点的代码:

public Node GetTile(int x, int z)
{
    if (x < 0)
        x = 0;
    if (x >= length_X)
        x = length_X - 1;

    if (z < 0)
        z = 0;
    if (z >= length_Z)
        z = length_Z - 1;
    return tiles [x, z];
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我有几个 if 语句来避免在从世界网格的节点(图块)数组中检索节点时出现越界异常。这是最有效的解决方案吗?我可以删除 if 而是将返回放在 try catch 块中,如下所示:

public Node GetTile(int x, int z) 
{
    try
    { …
Run Code Online (Sandbox Code Playgroud)

c# if-statement try-catch

4
推荐指数
1
解决办法
4163
查看次数

TryCatch ConcurrentModificationException捕获`30%的时间

我正在使用迭代器从列表中移除一个射弹,如果它超出了我的JPanel的边界.在使用迭代器之前它不会工作,但是只要我将方法放入try-catch中,迭代器就可以工作ConcurrentModificationException.代码现在可以工作,并且成功地从列表中移除了射弹,但是大约30%的时间,捕获命中并导致我的程序中出现断断续续的情况.我不知道为什么它只是偶尔捕获,但在有限的时间内,我的教授能够看到它,他认为这可能是一个同步问题.

这是运行我的程序的循环:

private void executeGameLoop() 
        {

            long nextFrameStart = System.nanoTime();
            while(panel.getRunning()) 
            {
                do 
                {
                    panel.repaint();
                    nextFrameStart += FRAME_PERIOD;
                } while(nextFrameStart < System.nanoTime());

                long remaining = nextFrameStart - System.nanoTime();
                panel.update();

                if (remaining > 0) 
                {
                    try 
                    {
                        Thread.sleep(remaining / 1000000);
                    } 
                    catch(Throwable e) 
                    {
                        System.out.println(e.getMessage()); 
                    }
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

这由循环at调用panel.update.它现在处理弹丸的更新:

public void update()
        {       
            randX = (int)((Math.random() * getWidth()) - (int)(Math.random() * getWidth()));
            randY = (int)((Math.random() * getHeight()) - (int)(Math.random() * getHeight()));

            int sizeX;
            int sizeY;

            try …
Run Code Online (Sandbox Code Playgroud)

java swing try-catch concurrentmodification

2
推荐指数
1
解决办法
2295
查看次数

如何在API中正确匹配Django中的视图

我的问题归结为Django中REST和Views的最佳实践之一.我正在为我当前的项目重新编写REST api,其中包括稍微修改我们的视图(传统MVC中的Controller).目前,所有内容都通过POST请求进行隧道传输,即使是简单的GET也是如此.

从休息的角度来看,应该返回所有作业的列表,其中包含以下URL:

API /职位/

应该检索单个作业(ID为1):

API /职位/ 1

最后,这应该返回作为工作1一部分的所有任务

API /职位/ 1 /任务/

这是我用于新系统的理念,但我对实现感到不满.如果这两个都在Django中获得自己的View,或者一个视图应该同时处理它们.

目前我正在使用一个View,其中所有相关的URL都路由到它,这样的逻辑;

def get(self, request, id=None, task_id=None):

    if id is None:
        return Job.objects.all()  # This will be the LIST'
    if task_id is not None:
        return Job.objects.get(id=id).task_set.all()
    return Job.objects.get(id=id)
Run Code Online (Sandbox Code Playgroud)

如果增加更多复杂性,这似乎会导致非常复杂和冗长的视图.如果我想为其他资源的任务逻辑添加类似的逻辑,我会继续添加到视图中,还是应该每个都获得自己的View?

django rest model-view-controller django-rest-framework

2
推荐指数
1
解决办法
39
查看次数