我试图在javafx中检测ImageView对象和Rectangle之间的碰撞。下面的代码不起作用,我不知道为什么。当物体彼此重叠时,没有任何反应。如果有所不同,图像的原始文件是png。使用箭头移动imageview对象,矩形也随着TranslateTranslation移动。
public void collision(ImageView a, Rectangle b) {
if (a.getBoundsInLocal().intersects(b.getBoundsInLocal())) {
b.setY(-100);
score++;
}
}
imageview移动代码:
playg.setOnKeyPressed(new EventHandler<KeyEvent>(){
public void handle(KeyEvent event) {
if(event.getCode() == KeyCode.RIGHT) {
basket.setLayoutX(basket.getLayoutX() + 15);
brect.setLayoutX(basket.getLayoutX() + 15);
} else if (event.getCode() == KeyCode.LEFT) {
basket.setLayoutX(basket.getLayoutX() - 15);
brect.setLayoutX(basket.getLayoutX() - 15);
}
}
});
矩形动画代码:
TranslateTransition tt = new TranslateTransition(Duration.seconds(4), rect2);
tt.setByY(800f);
tt.setCycleCount(INDEFINITE);
tt.play();
答案 0 :(得分:1)
尝试使用getBoundsInParent()
代替getBoundsInLocal()
。
一些快速测试显示BoundingBox
在使用本地时在两个不同位置之间没有变化,但在使用父母时却没有。我猜这是因为getBoundsInParent()
使用节点上的变换(有关更多信息,请参阅两者之间的Javadoc)。
但是,我没有测试这是否会影响交叉方法的结果。编辑:决定做更多的测试。向Rectangle
添加两个StackPane
并移动一个StackPane
表示&#34; local&#34; 始终显示为真,并且&#34; in-parent&#34;仅在视觉上相交时才显示真实。这是因为,就本地而言,#34;关注的是,矩形从未离开过它们的起始位置,这意味着它们在任何时候都在技术上相交。但是&#34;在父母中&#34;在def retrieve(self, idx, dic=True):
query = 'SELECT * FROM players WHERE idx = {idx}'.format(idx=idx)
self.cr.execute(query)
self.db.commit()
records_tuples = self.cr.fetchall()
if dic:
columns_names = ['idx', 'name', 'passwd']
records_dicts = [dict(zip(columns_names, record_tuple))
for record_tuple in records_tuples]
return records_dicts
else:
return records_tuples
中显示了他们的真实位置。