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

如何检测to矩形之间的冲突?[副本]

钱跃
2023-03-14

我想检测rect什么时候碰到障碍物(obst1和obst2,obst3暂时不加)。我的障碍随着路径转换而移动。所有的形状都是长方形。提前感谢!!< br >以下是我的代码:

Rectangle rect= new Rectangle(100,225,50,125);
     Rectangle obst1=new Rectangle(1200,300,30,50);
     Rectangle obst2=new Rectangle(1200,300,91,51);
     Rectangle obst3=new Rectangle(1200,300,20,50); 

     ImagePattern one = new ImagePattern(new Image("1.png"));
     ImagePattern two = new ImagePattern(new Image("2.png"));
     ImagePattern cactus1 = new ImagePattern(new Image("1cactus.png"));
     ImagePattern cactus4 = new ImagePattern(new Image("4cactus.png"));
     rect.setFill(one);`enter code here`

     rect.setArcHeight(5);
     rect.setArcWidth(5);
     //rect.setFill(Color.VIOLET);
     obst1.setFill(cactus1);
     obst3.setFill(RED);
     obst2.setFill(cactus4);

     PathTransition path = new PathTransition();
     path.setPath(l2);
     path.setNode(obst1);
     path.setDuration(Duration.millis(3000));
     path.setCycleCount(Timeline.INDEFINITE);
     path.setRate(-0.5);
     //path.play();

     PathTransition path2 = new PathTransition();
     path2.setPath(l2);
     path2.setNode(obst2);
     path2.setDuration(Duration.millis(3000));
     path2.setCycleCount(Timeline.INDEFINITE);
     path2.setRate(-0.6);
     //path2.play();

     PathTransition path3 = new PathTransition();
     path3.setPath(l2);
     path3.setNode(obst2);
     path3.setDuration(Duration.millis(3000));
     path3.setCycleCount(Timeline.INDEFINITE);
     path3.setRate(-0.3);
     //path3.play();

     int TimeLine=2;

     Pane pane = new Pane();
     pane.getChildren().add(obst1);
     pane.getChildren().add(obst2);
     //pane.getChildren().add(obst3);
     pane.getChildren().add(rect);
     pane.getChildren().add(l1);

     Scene scene = new Scene(pane, 300, 250);

     TranslateTransition tt = new TranslateTransition(Duration.millis(300));
     tt.setFromY(00f);
     tt.setToY(-100f);
     tt.setCycleCount(TimeLine);
     tt.setAutoReverse(true);

     ParallelTransition pt = new ParallelTransition(rect, tt); 

     scene.setOnKeyPressed(e->
        {
            if(e.getCode()==KeyCode.UP)
            {
                pt.play();
            }
            if(e.getCode()==KeyCode.ESCAPE)
            {
                     path.pause();
                     path2.pause();
                     path3.pause();
                     pt.pause();
            }
            if(e.getCode()==KeyCode.ENTER)
            {
                     path.play();
                     path2.play();
                     path3.play();
                     pt.play();
            }
        });


        EventHandler<ActionEvent> eventHandler = e -> 
                {
                    if(img==1)
                    {
                        rect.setFill(two);
                        img=2;
                    }
                    else
                    {
                        rect.setFill(one);
                        img=1;
                    }
                };

                Timeline animation = new Timeline(
                    new KeyFrame(Duration.millis(80), eventHandler));
                animation.setCycleCount(Timeline.INDEFINITE);
                animation.play();





        primaryStage.setTitle("Dinausor");
        primaryStage.setScene(scene);
        primaryStage.show();

共有1个答案

慎懿轩
2023-03-14

如果所有形状都是矩形对象,则可以使用相交 (...) 方法来检查碰撞。下面是一个示例:

Rectangle r1 = new Rectangle(0,0,100,100);
Rectangle r2 = new Rectangle(50,50,100,100);
System.out.println(r1.intersects(r2));// prints "true".
 类似资料:
  • 好的,我想试试这个: > 然后检查碰撞检测,如图所示。第一种是正面碰撞,第二种是侧面碰撞。碰撞http://img802.imageshack.us/img802/2934/rectangles2.png 然后删除精灵,只保留代码中的向量。(位置和旋转)我希望如此,因为我想在这些位置添加3d Cars和他的旋转。我的意思是,在2d中没有精灵的碰撞检测。 在游戏结束时,将没有精灵。仅三维对象。 有人

  • 在我的自上而下游戏中,当我的玩家通过婴儿床时,我该如何让他发生碰撞?我用的是交叉矩形。 这是我的密码 更新方法 在渲染方法中 这是完整的代码 谁能告诉我矩形碰撞检测的正确实现是什么?没有重叠,我是这个框架的新手。致谢和预付款:)

  • 我是libGDX的新手,据我所知,Intersector类有矩形/矩形、圆/圆、圆/矩形和多边形/多边形的重叠方法,但由于某种原因,它似乎没有任何检查多边形/矩形或多边形/圆的方法。 有没有推荐的方法来检查多边形和矩形/圆之间的冲突? 另外,为什么这被排除在跨部门类之外,有什么原因吗?(即,我应该避免它吗?如果是这样,推荐的替代方案是什么?

  • 我有一个2维数组叫做,也就是32x32。每个元素表示清除路径,表示墙。 窗口分辨率为800x800,这意味着

  • 我在Android Studio中使用libgdx,并且我正在使用精灵碰撞检测。我需要知道如何检测两个形状不规则的精灵之间的碰撞。我的精灵是从png图像纹理创建的。是否可以使用子画面的边框作为检测表面?使用在子画面周围绘制的矩形或圆形将不够准确。感谢您的帮助!

  • 问题内容: 我想知道判断Shape对象是否与另一个形状相交的最佳方法。目前,我在游戏中已对碰撞检测进行了分类,只要它涉及与矩形相交的Shape,反之亦然。我遇到的问题是Shape类中的intersects()方法只能将Rectangle或Point作为参数,而不能将另一个Shape用作参数。有没有一种有效的方法来测试两个Shape对象是否以任何方式重叠?我尝试的一种方法是使用for循环生成一个点区