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

如何知道两个图像之间的冲突javafx

华星驰
2023-03-14

如何在javaFx上得到2个图像或边界相交的碰撞?我移动一张图片,但是如果我触摸第二张图片,我想触发一些东西。

gc.drawImage( img2, 0, 400, 950, 100 );
    gc.drawImage( img3, 200, 200, 150, 50 );

if (event.getCode() == KeyCode.RIGHT ){
            if(img2.intersects(img3.getBoundsInLocal())){
            doSomething();
        }
}

代码不起作用

共有1个答案

萧越泽
2023-03-14

您可以为图像创建一个包装器,例如一个Sprite类,您可以使用该包装器为其提供x、y坐标。您可以借助矩形2D形状获得交集。

import javafx.geometry.Rectangle2D;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.image.Image;

public class Sprite {

    private Image image;
    private double positionX;
    private double positionY;
    private double width;
    private double height;

    public Sprite(Image image) {
        this.image = image;
        width = image.getWidth();
        height = image.getHeight();
        positionX = 0;
        positionY = 0;
    }

    public void setPosition(double x, double y) {
        positionX = x;
        positionY = y;
    }

    public void render(GraphicsContext gc) {
        gc.drawImage(image, positionX, positionY);
    }

    public Rectangle2D getBoundary() {
        return new Rectangle2D(positionX, positionY, width, height);
    }

    public boolean intersects(Sprite spr) {
        return spr.getBoundary().intersects(this.getBoundary());
    }
}
 类似资料:
  • 好的,所以我目前正在使用LWJGL在Java中开发2d游戏。我对java及其工作原理有相当扎实的了解,并且了解游戏如何工作和LWJGL / openGL的基础知识,但我在渲染纹理方面遇到了一个非常奇怪的问题。我确定我在这里的一种绘制方法是罪魁祸首。 所以发生的事情是,如果我用这种方法渲染任何东西,那么下一个渲染的东西看起来像是字面上压缩了一端,在另一端被拉伸了,即使渲染的下一个东西不是用这种方法渲

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

  • 在将OpenSAML从1.1升级到2.6.1(需要xerces-impl依赖项)之后,启动时会出现以下堆栈: xerces-impl重新定义了一些jre类,并附带了重新定义一些jre接口的XML-API。DataType.DataTypeFactoryImpl来自xerces-impl。 我读过用Java/Maven处理“Xerces地狱”?并尝试排除XML-API,但xerces-impl抛出N

  • null JDBC URL:jdbc:ucanaccess://f://workspaceNetbeans/msaccessdb/data/datenbank2.accdb “用户名”和“密码”留空 “测试连接”-按钮会导致错误消息: 无法使用 net.ucanaccess.jdbc.ucanaccessDriver建立到jdbc:ucanaccess://f:\workspaceNetBeans

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

  • 问题内容: 我正在写的游戏中有两个角色,玩家和敌人。定义如下: 然后用: 我可以使用键盘来移动player(),但是在尝试检测两者之间的碰撞时我很茫然。很多人说过要使用Rectangles,但是作为一个初学者,我看不到如何将其链接到现有代码中。谁能为我提供一些建议? 问题答案: 我认为您的问题是您没有为球员和敌人使用好的OO设计。创建两个类: 您的播放器应具有X,Y,Width和Height变量。