我不确定这是我的for循环或矩形位置的问题,但是我设置了断点并使用调试绘制来绘制矩形并且它们看起来是正确的。
public void onAction(String name, boolean value, float tpf) {
if(name.equals("ShowInventory")){
if(!value){
if(Statics.s_ShowInventory == true){
Statics.s_ShowInventory = false;
}else{
Statics.s_ShowInventory = true;
}
}
}
if(name.equals("RightClick") && Statics.s_ShowInventory == true){
Vector2f mousePos = screen.getMouseXY();
for(int i = 0; i < 40; i++)
{
if(Main.inventory.inventorySlots[i].rect.Contains(mousePos)){
System.out.println(Main.inventory.inventorySlots[i].slotNumber);
}
}
}
}
正在发生的事情是,写入控制台的唯一矩形是第一个。我想要发生的是每次右键单击为true且布尔值为true时,循环遍历矩形列表并找出哪一个包含mousePos。单击矩形时,控制台中仅显示“0”,因此我知道我没有获得任何其他库存槽号重叠。
可能发生的另一件事是循环可能没有完全运行,这在我的点击方法中会出现问题。
public float x;
public float y;
public float width;
public float height;
public Rect(float x, float y, float width, float height){
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
public boolean Contains(Vector2f pos){
if(pos.x > x && pos.x < width && pos.y < height && pos.y > y){
return true;
}
else
return false;
}
Element e = createInventorySlot(i, x, y);
inventoryElements[i] = e;
inventorySlots[i] = new InventorySlot(i, 0, "empty", new Rect(inventoryElements[i].getPosition().x, inventoryElements[i].getPosition().y, iconSize, iconSize));
e.setToolTipText(inventorySlots[i].itemName + " : " + inventorySlots[i].slotNumber + " : " + inventorySlots[i].quantity);
inventory.addChild(e);
答案 0 :(得分:1)
for循环一直循环。尝试打印每个循环的if语句的状态。
for(int i = 0; i < 40; i++)
{
// if(Main.inventory.inventorySlots[i].rect.Contains(mousePos)){
// System.out.println(Main.inventory.inventorySlots[i].slotNumber);
// }
System.out.println(Main.inventory.inventorySlots[i].rect.Contains(mousePos));
}
&#34; .Contains&#34;可能有问题。而不是for循环。 你的&#34;。包含&#34;可能只在第一个插槽中进行测试。这可以解释为什么只有鼠标在第一个插槽中才能工作一次。另外,请检查是否打印出自己的插槽列表,以确保您没有第一个插槽的40个副本。