I am new to Android game development and I’m using AndEngine GLES 2 Java. In this coding I have created 2 sprite which is small_box and big_box respectively.When I drag small_box to big_box or vice versa, it repels each other.This works fine, but my problem is that 1st small_box and 1st big box repel each other, but 2nd small_box and big_box doesn’t repels.How can it be solved?. I want all small_box repels from all big_box, and when I drag small_box to another small_box it should overlap and even in big_box to another big_box also……..Plz anybody can help this by modifying this code or by using examples…….
public class SampleActivity extends SimpleBaseGameActivity {
protected static final int CAMERA_WIDTH = 800;
protected static final int CAMERA_HEIGHT = 480;
private ITextureRegion Box1, Box2;;
private Stack Stack1, Stack2;
private Sprite small_box,big_box;
//private final Sprite small_box = new Sprite[1];
public EngineOptions onCreateEngineOptions() {
final Camera camera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
return new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED,
new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), camera);
}
public void onCreateResources() {
try {
ITexture small_box = new BitmapTexture(this.getTextureManager(),
new IInputStreamOpener() {
public InputStream open() throws IOException {
return getAssets().open("gfx/small_box.png");
}
});
ITexture big_box = new BitmapTexture(this.getTextureManager(),
new IInputStreamOpener() {
public InputStream open() throws IOException {
return getAssets().open("gfx/big_box.png");
}
});
small_box.load();
big_box.load();
this.Box1 = TextureRegionFactory.extractFromTexture(small_box);
this.Box2 = TextureRegionFactory.extractFromTexture(big_box);
this.Stack1 = new Stack();
this.Stack2 = new Stack();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public Scene onCreateScene() {
final Scene scene = new Scene();
scene.setBackground(new Background(1, 1, 1));
for( int i=0;i<2;i++){
small_box = new Sprite(i*300, 100, Box1, this.getVertexBufferObjectManager()) {
public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) {
if (((Sprite) this.getmStack().peek()).getHeight() != this
.getHeight())
return false;
this.setPosition(pSceneTouchEvent.getX() - this.getWidth()
/ 2, pSceneTouchEvent.getY() - this.getHeight() / 2);
if (pSceneTouchEvent.getAction() == TouchEvent.ACTION_UP){
checkForCollisionsWithBoxes();
}
return true;
}
private Stack getmStack() {
// TODO Auto-generated method stub
return Stack2;
}
};
big_box = new Sprite(i*300, 200, Box2, this.getVertexBufferObjectManager()) {
public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) {
if (((Sprite) this.getmStack().peek()).getHeight() != this
.getHeight())
return false;
this.setPosition(pSceneTouchEvent.getX() - this.getWidth()
/ 2, pSceneTouchEvent.getY() - this.getHeight() / 2);
if (pSceneTouchEvent.getAction() == TouchEvent.ACTION_UP){
checkForCollisionsWithBoxes();
}
return true;
}
private Stack getmStack() {
// TODO Auto-generated method stub
return Stack1;
}
};
scene.attachChild(small_box);
scene.attachChild(big_box);
this.Stack1.add(big_box);
this.Stack2.add(small_box);
scene.registerTouchArea(small_box);
scene.registerTouchArea(big_box);
scene.setTouchAreaBindingOnActionDownEnabled(true);
}
return scene;
}
private void checkForCollisionsWithBoxes() {
if ((big_box.collidesWith(small_box) && (Stack1.size() == 0 || small_box.getHeight() < ((Sprite) Stack1.peek()).getHeight()))) {
small_box.setPosition(100+big_box.getWidth()/2, 50+ big_box.getHeight());
big_box.setPosition(300+small_box.getWidth()/2, 250+small_box.getHeight()/2);
}
}
}
you are only checking for the new boxes created , that’s why
I suggest you use box2D for this, there is an example already for collisions in box2D and for filtered collisions if you need for example the small boxes to only collide with small boxes and not with big boxes
this is the link for filtering collisions
https://github.com/nicolasgramlich/AndEngineExamples/blob/GLES2/src/org/andengine/examples/PhysicsCollisionFilteringExample.java