java - Comparing items within the same set to eachother -
i have set of shapes , need determine shapes intersecting which. use 2 enhanced-for-loops (one within other) not working expected. seems comparing shape itself. added println() debugging purposes , console output @ end of question.
edit: i've added code interface drawables show how intersects(rectangle rectangle) , shape.getbounds() exposed. i've added collisions class show methods do.
edit 2: can't believe neglected mention: drawables set! drawables.add() behaves set.add()
*edit 8564985294238424:*i never initialize set collisions. have fixed this. works.
class collisionmonitor (includes problem method: set<collision> getcollisions() last in class)
package platformer; import java.util.collection; import java.util.hashset; import java.util.set; public class collisionmonitor { private set<collision> collisions; private set<drawable> drawables; public collisionmonitor(set<drawable> drawables) { this.drawables = drawables; } public set<drawable> getdrawables() { return drawables; } public void setdrawables(collection<? extends drawable> drawables) { if (drawables != null) this.drawables = (new hashset<drawable>(drawables)); } public set<drawable> adddrawables(collection<? extends drawable> drawables) { if (drawables != null && drawables.isempty() == false) this.drawables.addall(drawables); return this.drawables; } public set<collision> getcollisions() //problem method! { set<drawable> temp = drawables; (drawable s : drawables) { (drawable ss : temp) { system.out.println(s + ", " + ss); /*if (s.intersects(ss.getbounds())) { collisions.add(new collision(s, ss)); }*/ } } return collisions; } } interface drawable:
public interface drawable extends shape { color color = new color(0, 0, 0); public color getcolor(); } class collision
public class collision { drawable drawable1, drawable2; public collision(drawable drawable1, drawable drawable2) { this.drawable1 = drawable1; this.drawable2 = drawable2; } } output:
platformer.enemy@660de2f0, platformer.enemy@660de2f0 platformer.enemy@660de2f0, platformer.enemy@660de2f0 platformer.enemy@660de2f0, platformer.enemy@660de2f0 platformer.enemy@660de2f0, platformer.enemy@660de2f0 platformer.enemy@660de2f0, platformer.enemy@660de2f0 platformer.enemy@660de2f0, platformer.enemy@660de2f0 platformer.enemy@660de2f0, platformer.enemy@660de2f0 platformer.enemy@660de2f0, platformer.enemy@660de2f0 platformer.enemy@660de2f0, platformer.enemy@660de2f0 platformer.enemy@660de2f0, platformer.enemy@660de2f0 platformer.enemy@660de2f0, platformer.enemy@660de2f0 platformer.enemy@660de2f0, platformer.enemy@660de2f0 platformer.enemy@660de2f0, platformer.enemy@660de2f0 platformer.enemy@660de2f0, platformer.enemy@660de2f0 platformer.enemy@660de2f0, platformer.enemy@660de2f0 platformer.enemy@660de2f0, platformer.enemy@660de2f0 platformer.bullet@26dea769, platformer.bullet@26dea769 platformer.bullet@f1e9457d, platformer.bullet@f1e9457d platformer.enemy@660de2f0, platformer.enemy@660de2f0 platformer.enemy@660de2f0, platformer.enemy@660de2f0 platformer.bullet@11bd2f5a, platformer.bullet@11bd2f5a platformer.enemy@660de2f0, platformer.enemy@660de2f0 platformer.enemy@660de2f0, platformer.enemy@660de2f0 platformer.enemy@660de2f0, platformer.enemy@660de2f0 platformer.enemy@660de2f0, platformer.enemy@660de2f0 platformer.bullet@70a511a, platformer.bullet@70a511a platformer.enemy@660de2f0, platformer.enemy@660de2f0 platformer.enemy@660de2f0, platformer.enemy@660de2f0 platformer.enemy@660de2f0, platformer.enemy@660de2f0 platformer.bullet@6ada16bc, platformer.bullet@6ada16bc platformer.bullet@6ba127e8, platformer.bullet@6ba127e8
temp isn't different drawables. it's pointing same object.
if want exlude exact same element use:
for (drawable s : drawables) { (drawable ss : temp) { if (s == ss) continue; // don't compare object
Comments
Post a Comment