Skip to content

Instantly share code, notes, and snippets.

@Qwark
Created June 8, 2010 16:26
Show Gist options
  • Save Qwark/430270 to your computer and use it in GitHub Desktop.
Save Qwark/430270 to your computer and use it in GitHub Desktop.
In PhysicalSprite, add body.setUserData(this)
public void createBody(BodyDef bodyDef, FixtureDef fixture) {
body = Physics.world.createBody(bodyDef);
body.setUserData(this);
body.createFixture(fixture);
this.bodyDef = bodyDef;
usePhysics = true;
}
*******************
package com.stickycoding.rokonexamples;
import javax.microedition.khronos.opengles.GL10;
import android.util.Log;
import android.view.MotionEvent;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.Contact;
import com.badlogic.gdx.physics.box2d.ContactListener;
import com.badlogic.gdx.physics.box2d.Fixture;
import com.badlogic.gdx.physics.box2d.FixtureDef;
import com.badlogic.gdx.physics.box2d.World;
import com.qrk.pachinko.PachinkoActivity.SpriteName;
import com.stickycoding.rokon.DrawPriority;
import com.stickycoding.rokon.Layer;
import com.stickycoding.rokon.PhysicalSprite;
import com.stickycoding.rokon.RokonActivity;
import com.stickycoding.rokon.Scene;
import com.stickycoding.rokon.Sprite;
import com.stickycoding.rokon.Texture;
import com.stickycoding.rokon.Window;
public class QrkCallbackTest extends RokonActivity
{
public enum SpriteName
{
PIN,BALL,EDGEBOX;
}
public PhysicalSprite sprite;
public Texture texture,texture2, face;
public World world;
Window window;
public void onCreate()
{
forceFullscreen();
forcePortrait();
setGameSize(4.8f, 8.0f);
setDrawPriority(DrawPriority.PRIORITY_NORMAL);
setGraphicsPath("textures/");
createEngine();
}
public void onLoadComplete()
{
texture = new Texture("circle.png");
face = new Texture("sad.png");
myScene.useTexture(texture);
myScene.useTexture(face);
myScene.setWorld(world = new World(new Vector2(0f, 10f), true));
ContactListener coli = new ContactListener()
{
public void endContact(Contact contact) {}
public void beginContact(Contact contact)
{
Fixture fixA = contact.getFixtureA();
Fixture fixB = contact.getFixtureB();
PhysicalSprite psA =(PhysicalSprite)fixA.getBody().getUserData();
PhysicalSprite psB =(PhysicalSprite)fixB.getBody().getUserData();
Log.v("CallBackTest", "psA = "+psA.getName());
Log.v("CallBackTest", "psB = "+psB.getName());
}
};
world.setContactListener(coli);
window = new Window(0, 0, 4.8f, 8f);
initStaticScene();
myScene.setWindow(window);
myScene.getLayer(1).ignoreWindow();
myScene.setDefaultLineWidth(2f);
setScene(myScene);
}
private void initStaticScene()
{
DrawPin(2.3f , 5.5f);
DrawPin(1.7f , 6.5f);
createStaticBox(0.0f, 7.0f, 4.8f, 1.0f );
createStaticBox(0.0f, 0.0f, 0.1f, 7.0f );
createStaticBox(4.7f, 0.0f, 0.1f, 7.0f );
}
private void DrawPin(float x,float y)
{
sprite = new PhysicalSprite(x, y, 0.1f, 0.1f);
sprite.setName(SpriteName.PIN.toString());
sprite.setTexture(texture);
FixtureDef fixtureDef = new FixtureDef();
fixtureDef.density = 10f;
fixtureDef.friction = 0.2f;
sprite.createStaticCircle(fixtureDef);
myScene.add(sprite);
}
private void createStaticBox(float x,float y,float width, float height)
{
sprite = new PhysicalSprite(x,y,width,height);
sprite.setName(SpriteName.EDGEBOX.name());
sprite.setTexture(face);
FixtureDef fixtureDef = new FixtureDef();
fixtureDef.density = 10f;
fixtureDef.friction = 0.2f;
sprite.createStaticBox(fixtureDef);
myScene.add(sprite);
}
public Scene myScene = new Scene(2, 128)
{
boolean addNew = false;
float x, y;
int count = 0;
int maxNoOfBalls = 100;
float ballsize = 0.4f;
@Override
public void onTouchDown(float x, float y, MotionEvent event)
{
if(!addNew)
{
if(count>=maxNoOfBalls)
{
Layer ly = this.getLayer(0);
for (int i = 0; i < ly.getGameObjectCount(); i++)
{
if(ly.getGameObject(i) != null)
{
PhysicalSprite ps = (PhysicalSprite)ly.getGameObject(i);
if(ps.getName() == SpriteName.BALL.name())
{
ps.remove();
count--;
break;
}
}
}
}
this.x = x;
this.y=y;
addNew = true;
}
}
public void onPreDraw(GL10 gl)
{
if(addNew)
{
sprite = new PhysicalSprite(2.1f, y, ballsize, ballsize);
sprite.setName(SpriteName.BALL.name());
sprite.setTexture(texture);
FixtureDef fixtureDef = new FixtureDef();
fixtureDef.friction = 0.3f;
fixtureDef.density = 10f;
sprite.createDynamicCircle(fixtureDef);
add(sprite);
addNew = false;
count++;
}
}
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment