Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Java-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
bd = new BodyDef(); bd.type = bodyType; // ist im diesem Falle statisch bd.position.set(posX, posY); // Position des Objekt, wird bei glVertex2f verwendet. PolygonShape cs = new PolygonShape(); cs.setAsBox(Breite,Höhe); //Die Breite und Höhe Variablen werden auch fürs Polygon mit der Textur benutzt. FixtureDef fd = new FixtureDef(); fd.shape = cs; fd.density = 1.9f; fd.friction = 0.3f; fd.restitution = -1.0f; body = System.world.createBody(bd); body.createFixture(fd); |
Java-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST); glBegin(GL11.GL_QUADS); glTexCoord2f(0,0); glVertex2f(Position.x,Position.y); glTexCoord2f(1,0); glVertex2f(Position.x+Größe.Breite,Position.y); glTexCoord2f(1,1); glVertex2f(Position.x+Größe.Breite,Position.y+Größe.Hoehe); glTexCoord2f(0,1); glVertex2f(Position.x,Position.y+Größe.Hoehe); glEnd(); if(rund != null && rund.body.getType() != BodyType.STATIC) { Position.x = body.getPosition().x; Position.y = body.getPosition().y; } |
Zitat von »"IF YOU USE PIXEL UNITS YOU WILL BE SHOT.txt"«
A little overdramatic, I know.
Seriously, though, if you use pixel units, this engine will probably suck, and you'll get all sorts of jitter and stuff. Please, please, PLEASE, factor in a scaling factor, or (better) a camera class that transforms your physics data before you draw it. Your physics objects should always be roughly between .1 and 10 world-units, which using pixel scale is far too small. Things will NOT work well at the 100-500 unit range, as the engine is not tuned for such large numbers.
The org.jbox2d.dynamics.DebugDraw class has the following stub methods:
setCamera(float x, float y, float scale)
screenToWorld(float screenx, float screeny)
worldToScreen(float worldx, float worldy)
Overloading these in your implementation and using the results of worldToScreen() when you draw will make your life much easier, and will also mean you don't submit a bug report to me, which makes mine easier.
It is also strongly suggested that you add worldToScreenVector and screenToWorldVector methods, which transform vectors just by scaling their direction (i.e. don't apply camera translation, only camera scale).
org.jbox2d.testbed.ProcessingDebugDraw implements DebugDraw in this way, if you don't know what to do you might start looking at that to see.
You are warned!
Dieser Beitrag wurde bereits 10 mal editiert, zuletzt von »Chromanoid« (17.12.2012, 21:19)
Java-Quelltext |
|
1 2 3 4 5 6 7 8 |
OBBViewportTransform test = new OBBViewportTransform(); // Jaja, jetzt habe ich mich sogar selbst übertroffen und "test" als Namen verwendet :D test.getScreenToWorld(new Vec2(posX,posY), position); bd.position.set(position.x, position.y); PolygonShape cs = new PolygonShape(); test.getScreenToWorld(new Vec2(Höhe,Breite), position); cs.setAsBox(position.x, position.y); |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
BodyDef def = new BodyDef(); def.type = BodyType.DynamicBody; def.position.set(map.getStartX(),map.getStartY()); // getStartX/Y() ist schon durch meterPixelRatio geteilt worden CircleShape circle = new CircleShape(); circle.setRadius(20.0f/meterPixelRatio); FixtureDef fix = new FixtureDef(); fix.shape = circle; fix.density = 0.2f; fix.friction = 4.0f; player = new Sphere(this,world,def,new Texture(Gdx.files.internal("testBall.png"))); |
C-/C++-Quelltext |
|
1 2 3 |
renderer.begin(ShapeType.Circle); renderer.circle(getBody().getPosition().x * GameWorld.meterPixelRatio, getBody().getPosition().y * GameWorld.meterPixelRatio, 20); renderer.end(); |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Nexxtron« (20.12.2012, 00:13)
Java-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
texture[Nummer].bind(); GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST); GL11.glBegin(GL11.GL_QUADS); GL11.glTexCoord2f(0,0); GL11.glVertex2f(Position.x,Position.y); GL11.glTexCoord2f(1,0); GL11.glVertex2f(Position.x+Größe.Breite,Position.y); GL11.glTexCoord2f(1,1); GL11.glVertex2f(Position.x+Größe.Breite,Position.y+Größe.Hoehe); GL11.glTexCoord2f(0,1); GL11.glVertex2f(Position.x,Position.y+Größe.Hoehe); GL11.glEnd(); |
Java-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
texture[Nummer].bind(); GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST); GL11.glBegin(GL11.GL_QUADS); GL11.glTexCoord2f(0,0); GL11.glVertex2f(Position.x-Größe.Breite / 2,Position.y-Größe.Hoehe / 2); GL11.glTexCoord2f(1,0); GL11.glVertex2f(Position.x+Größe.Breite / 2,Position.y -Größe.Hoehe / 2); GL11.glTexCoord2f(1,1); GL11.glVertex2f(Position.x+Größe.Breite / 2,Position.y+Größe.Hoehe / 2); GL11.glTexCoord2f(0,1); GL11.glVertex2f(Position.x-Größe.Breite / 2,Position.y+Größe.Hoehe / 2); GL11.glEnd(); |
Werbeanzeige