当前位置: 首页 > 知识库问答 >
问题:

如何插值油漆事件之间的碰撞

杨良才
2023-03-14

最近,我一直在为一个二维应用程序研究各种奇特的碰撞检测算法和四叉树,并将我的应用程序放在我想要开始实现这些碰撞算法的地方。我的gameloop能够计算帧的Δt,我想在绘制的帧之间执行“插值”碰撞检查(与“蛮力”方法相反:尽可能快地绘制,导致性能和动画质量普遍下降)。

底衬

实现“插值”碰撞检查的最有效方法是什么?此外,是否有任何碰撞算法可以简单地采用Δt和速度来为我进行插值?

其他思考和信息

我在四叉树内的AABB之后的图像上使用每像素交叉点。图像固有地表示为矩形,我发现计算符合定义的alpha透明度阈值的图像像素周围的凸/凹多边形,然后执行其他算法,如minkowski门户细化或递归圆,效率太高。我选择每个像素,尽管它的低效速度明智,因为图像的具体矩形约束形状(知道这一点,我通过用AABB碰撞检查包装检查来减少每个像素检查)。将来我可能会尝试重新优化/使用不同于AABB的方法,因为我的图像将以不同的角度旋转。

游戏循环代码:其中更新()处理追赶操作。

currentUpdateTime = System.nanoTime();

    while(true) {
        beginLoopTime = System.nanoTime();

        drawPanel.repaint();

        lastUpdateTime = currentUpdateTime;
        currentUpdateTime = System.nanoTime();
        update((int) ((currentUpdateTime - lastUpdateTime)/( Math.pow(10,-9) )));//1000*1000

        endLoopTime = System.nanoTime();
        deltaLoop = endLoopTime - beginLoopTime;

        if(deltaLoop <= desiredDeltaLoop) {
           try {
           /*Refer to: 'http://stackoverflow.com/questions/1036754/difference-between-wait-and-sleep'
           on differences between Thread.sleep() and wait()*/
               wait((long) ((desiredDeltaLoop - deltaLoop)/( Math.pow(10,-6) )));
           } catch(InterruptedException e) {
               e.printStackTrace(System.out);
           }
        }
    }

共有1个答案

沈骞仕
2023-03-14

我首先要说的是,这可能肯定不是最好的答案。这是一种我能想到的“即兴”技术,而不是我所知道的在实践中使用的技术。话虽如此:

您可以通过将您的空间视为三维空间(第三维度是时间),然后应用三维碰撞检查技术来完成随时间移动的窗格的二维碰撞检查。同时占据相同空间的面板将被表示为相交的3D形状,交叉点将告诉您碰撞发生的时间。

 类似资料:
  • 问题内容: 对不起,我进行了大量搜索,以查找这3个功能(绘画,重绘,paintComponent)之间如何相互作用,但我不知道。您能准确解释一下它们何时被调用(因为有时java会在没有我问他的情况下调用它),它们到底在做什么,它们之间有什么区别。谢谢 问题答案: 我不确定“ paint”,但是我可以解释repaint()和paintComponent()之间的关系。 根据我在Java方面的有限经验

  • 我试图编写一个小迷宫运行程序,遇到了一些与绘图组件()相关的麻烦。我已经完成了调试,出于某种原因,我的绘图组件()从未被调用,即使是由我的计时器调用的重新绘制()。 这些是我的frame和jpanel init方法。 这是我的paintComponent,图像确实已缓冲并已存储。 这就是我的ActionExecuted,它是用我的计时器调用的,默认设置为5秒的间隔。 } 如果你感兴趣,这是我的完整

  • 本章介绍Canvas组件,用它来生成简单的二维(2D)图形,目标是创建一个PaintPot(油漆桶)应用,让用户在手机屏幕上绘制图画,并让用户用手机给自己拍照,然后在自己的照片上绘图。回顾历史,早在20世纪70年代,PaintPot是最早运行在个人电脑上的应用之一,目的是为了证明个人电脑的潜力。那时候,开发这样一款简单的绘图应用是一项极其复杂的工作,而且绘图效果也略显粗糙。但现在,使用App In

  • 问题内容: 我是绘画/图形的新手,想知道如何以一种方式将JPanel添加到我的代码 中,以使整个图形位于JPanel而不是 JFrame上。 换句话说,我正在尝试创建一个允许我执行此操作的GUI:在 右侧,在左侧的JPanel上显示行的漂亮运动,在其上 添加一个JTextArea(在JPanel上),该行将显示 图形的协调。 这是一个更大问题的简化,但是我想这里的代码更容易理解。 谢谢!!! 问题

  • 我需要检测一个球(椭圆形)和多个块(矩形)之间的碰撞。在游戏中表示块的类块中,我有以下代码来检测碰撞(其简短版本,仅用于演示示例): 碰撞不好,因为椭圆形,但一般来说,我想问是否有东西在java(摇摆)检测碰撞,我的意思是如果矩形没有完全显示在画布上,这意味着球重叠一个块坐标

  • 问题内容: 我有一条流经多个系统的消息,每个系统都会记录消息的进入和退出以及时间戳和uuid messageId。我通过以下方式提取所有日志: 结果,我现在有以下事件: 我想生成一个报告(最好是堆积的条或列),用于每个系统的时间: 做这个的最好方式是什么?Logstash过滤器?kibana计算字段? 问题答案: 您只能使用Logstash 过滤器来实现此目的,但是,您必须实质性地重新实现该过滤器