Created
June 8, 2010 16:26
-
-
Save Qwark/430270 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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