私のゲームでは在庫システムを実装しました。画面がクリックされると、MousePressedEvent
はゲーム内のすべてlayers
を継承し、EventListener
(My EventListener
)のすべてのオブジェクトに渡されます。 EventListener
クラスは正常に動作し、以下に示すように使用して、在庫を取得してスロットからアイテムを取り出して戻すことができます。しかし、私がしたいのは、アイテムを含むスロットから取り出して、他のスロットに配置することです(ターゲットスロットが空である限り)。 if
ステートメントのように、スロットが選択されているかどうかに関係なく、スロットにそれを追加するかどうかを確認していないので、私がこれを許可していたと思った。しかし、これは実際には機能しません。何か案は? Slot.java
クラスのJava:インベントリにドロップアクションを許可していますか?
コード:擬似コードで
public boolean onMousePressed(MousePressedEvent e) {
Point p = new Point(Mouse.getX(), Mouse.getY());
if (!this.getBounds().contains(p)) return false;
boolean left = (e.getButton() == MouseEvent.BUTTON1);
boolean right = (e.getButton() == MouseEvent.BUTTON3);
boolean hasItems = (items.size() > 0);
if (this.getBounds().contains(p)){
if (right && !selected && hasItems){
select(true);
s = new Slot(new Vector2i(Mouse.getX(), Mouse.getY()));
addComponent(s);
s.add(items.get(0));
remove(items.get(items.size() - 1));
} else if (right && selected){
s.add(items.get(0));
remove(items.get(items.size() - 1));
if (items.size() == 0) {
setBackgroundImage(ImageUtil.getImage("/ui/panels/inventory/slot.png"));
selected = false;
return true;
}
return true;
} else if ((left || right) && s==null) {
return true;
} else if (left && s != null){ //If left clicked, add to the slot from s regardless of if we are selected.
add(s.getItems().get(0));
s.remove(s.getItems().get(s.getItems().size() - 1));
if (s.getItems().size() == 0){
s.setBackgroundImage(ImageUtil.getImage("/ui/panels/inventory/slot.png"));
removeComponent(s);
s = null;
selected = false;
return true;
}
}
}
return false;
}
:各else if
文で印刷ラインに追加することにより
このコードが説明とどのように関係しているのかわかりません。コードを最小限の例に分けて、それが何をしているのか、それがリストやループ、ifなどのプログラミング用語で何をしていないのかを説明できますか?あなたのゲームのコンセプトは、コードと実際には関係ありません。 – zapl
@zapl better?私は事を明確にするために擬似コードバージョンを追加しました –
擬似コードのどの部分が期待通りに機能しないのかを指定できますか?エッジケースがたくさんあります.... –