我有一个瓷砖面板的网格,其中对象(动物)随机放置在其上,作为图像。在它们实际移动之前,我需要找到一种方法来检查该特定单元旁边的四个插槽/单元(北、南、东、西),看看其中是否有食物来源,如果是,请移动到该单元。如果为false,请尝试下一个方向,如果全部为false,请随机移动。
目前,它们只是随意移动,如果幸运的是细胞上有食物来源,它们就会吃东西。这是我目前拥有的,确实有效
private void makeAnimalsMove() {
Random random = new Random();
// Mark all animals that they haven't moved yet
for (Slot[] row : slots) {
for (Slot slot : row) {
for (Animal animal : slot.getAnimals()) {
animal.setMoved(false);
}
}
}
// Now we move only those who needs to be moved
for (int row = 0; row < slots.length; row++) {
for (int column = 0; column < slots[row].length; column++) {
final Slot slot = slots[row][column];
for (final Animal animal : slot.getAnimals()) {
if (animal.hasMoved()) {
continue;
}
int[][] directions = {
{row - 1, column}, // north
{row, column + 1}, // east
{row + 1, column}, // south
{row, column - 1}, // west
};
int[] selectedDirection = directions[random.nextInt(directions.length)];
// Move the animal to the chosen direction if possible
final int rowDirection = selectedDirection[0];
final int columnDirection = selectedDirection[1];
if (rowDirection >= 0 && rowDirection < slots.length && columnDirection >= 0 && columnDirection < slots[rowDirection].length) {
Platform.runLater(new Runnable() {
@Override
public void run() {
slot.removeObject(animal);
slots[rowDirection][columnDirection].addObject(animal);
}
});
}
// Decrease the animal's life
animal.setMoved(true);
animal.setLifeSpan(animal.getLifeSpan() - 1);
}
}
}
}
对于“吃”部分,有一个单独的方法,如果细胞中含有食物来源,则会调用该方法。我只是不知道如何才能让它在移动之前检查四个单元格?
为了使我的解决方案正常工作,我建议您从TilePane
切换到GridPane
。
您可以轻松绘制元素网格:
GridPane grid = new GridPane();
grid.add(child, columnIndex, rowIndex);
然后再检测特定单元格中是否有内容,例如使用此帮助器:
private static boolean isCellOccupied(GridPane gridPane, int column, int row)
{
return gridPane
.getChildren()
.stream()
.filter(Node::isManaged)
.anyMatch(
n -> Objects.equals(GridPane.getRowIndex(n), row)
&& Objects.equals(GridPane.getColumnIndex(n),
column));
}
我正在将一个包含大量自定义绘制的Swing/Graphics2D应用程序转换为JavaFX2应用程序。虽然我非常喜欢这个新的API,但当我在鼠标光标下方绘制椭圆时,无论鼠标移动到哪里,我似乎都会遇到性能问题。当我以稳定的方式移动鼠标时,我注意到椭圆总是在鼠标轨迹的后面几厘米处绘制,只有当我停止移动光标时,椭圆才会出现。这是一个只有少数节点的场景图。在我的Swing应用程序中,我没有这个问题。 我想
问题内容: 我正在尝试使某些节点的动作自动化。我想将一个节点移到另一个节点的顶部,但是我无法使用通用方法来实现它。 IE浏览器我写了这样的事情: 我究竟做错了什么?我想我没有考虑重要的事情,但我不知道。我希望有人能以正确的方式向我解释…预先感谢。 问题答案: 根据此处看到的第一个示例,下面的示例使用aTimeline来动画化b1着色AQUA,朝向b2,朝着色的运动CORAL。
如果我们在应用程序中使用此窗格,则添加到其中的所有节点将以统一大小的切片的形式排列。 包javafx.scene.layout名为tilePane的类表示TilePane。 这个类提供了11个属性,它们是 - alignment - 此属性表示窗格的对齐方式,您可以使用setAlignment()方法设置此属性的值。 hgap - 此属性的类型为double,它表示行中每个tile之间的水平间距。
问题内容: 我正在将具有大量自定义绘画的Swing / Graphics2D应用程序转换为JavaFX2应用程序。尽管我绝对喜欢新的API,但是在绘制椭圆时我似乎遇到了性能问题,无论鼠标移动到哪里,我都想在鼠标光标下方绘制椭圆。当我稳定地移动鼠标而不是快得不可思议时,我注意到椭圆总是在鼠标轨迹后方几厘米处画出,并且只有在我停止移动光标时才会赶上椭圆。这在只有几个节点的场景图中。在我的Swing应用
所以我手头有一个非常奇怪的问题,数小时的搜索没有提供任何信息。 我有一个包含uitextfield的uiview。现在,该视图最初位于可见屏幕之外,坐标为x=-500,y=-500。 然而,在响应按钮按下此视图动画和移动到屏幕的中心。 现在,每当我点击作为此视图子视图的uitextfield时。此视图会在屏幕外移动回其原始坐标。 我已经疯狂地检查了我的代码,一旦它进入,就没有任何东西会再次将视图移
我不能用REmover类直接擦除代码对象...它给了我一个错误...但是当我第一次用我的代码删除连接的注释时,然后删除已经完成的代码...是否有其他方法可以自动删除代码和代码对象的注释?关于... 警告:SQL错误:0,SQLSTATE:23503 2013年6月24日2:25:51 PM org.hibernate.engine.jdbc.spi.sqlExceptionHelper logEx