Andengine Box2d Physik Problem

  • Antworten:5
Niklas Andres
  • Forum-Beiträge: 10

30.06.2011, 19:29:00 via Website

Hallo,

Ich habe ein Problem mit der Erweiterung für Andengine nämlich der andenginephysicsbox2dextension.
Wenn ich z.B. Racer Game oder Physics Example verwenden möchte gibt der Emulator kein Fehler aus aber das Programm stürzt ab.
Bei dem Beispiel AnalogOnScreenControllerExample gibt es zwar auch Physik aber es wird von der eigentlichen Andengine Datei verwendet.
Die anderen Erweiterungen funktioniern mit den Beispielen problemlos.
Ach ja ich habe auch die .so Dateien eingebunden.

Liegt es am Emulator?
Oder liegt es an mir?

Gruß Niklas

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

30.06.2011, 20:02:34 via App

Hast du die Möglichkeit es auf nem echten Gerät zu testen? Normalerweise gehört der Emulator ja nicht zu den Profis, was Performance angeht :P
Aber die anderen Beispiele funktionieren? Hm, dass spricht für einen Fehler im Code..
Lg Ansgar

Antworten
Niklas Andres
  • Forum-Beiträge: 10

30.06.2011, 20:57:19 via Website

Ne ich habe leider kein Android Gerät aber Fehler im Code?
Wie gesagt es kommt auf dem Emulator keine Fehlermeldung.

Hier ist der Code:

1package org.anddev.andengine.examples.game.racer;
2
3import javax.microedition.khronos.opengles.GL10;
4
5import org.anddev.andengine.engine.Engine;
6import org.anddev.andengine.engine.camera.Camera;
7import org.anddev.andengine.engine.camera.hud.controls.AnalogOnScreenControl;
8import org.anddev.andengine.engine.camera.hud.controls.AnalogOnScreenControl.IAnalogOnScreenControlListener;
9import org.anddev.andengine.engine.camera.hud.controls.BaseOnScreenControl;
10import org.anddev.andengine.engine.options.EngineOptions;
11import org.anddev.andengine.engine.options.EngineOptions.ScreenOrientation;
12import org.anddev.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;
13import org.anddev.andengine.entity.primitive.Rectangle;
14import org.anddev.andengine.entity.scene.Scene;
15import org.anddev.andengine.entity.scene.background.ColorBackground;
16import org.anddev.andengine.entity.shape.Shape;
17import org.anddev.andengine.entity.sprite.Sprite;
18import org.anddev.andengine.entity.sprite.TiledSprite;
19import org.anddev.andengine.entity.util.FPSLogger;
20import org.anddev.andengine.extension.physics.box2d.FixedStepPhysicsWorld;
21import org.anddev.andengine.extension.physics.box2d.PhysicsConnector;
22import org.anddev.andengine.extension.physics.box2d.PhysicsFactory;
23import org.anddev.andengine.extension.physics.box2d.PhysicsWorld;
24import org.anddev.andengine.extension.physics.box2d.util.Vector2Pool;
25import org.anddev.andengine.opengl.texture.Texture;
26import org.anddev.andengine.opengl.texture.TextureOptions;
27import org.anddev.andengine.opengl.texture.region.TextureRegion;
28import org.anddev.andengine.opengl.texture.region.TextureRegionFactory;
29import org.anddev.andengine.opengl.texture.region.TiledTextureRegion;
30import org.anddev.andengine.ui.activity.BaseGameActivity;
31import org.anddev.andengine.util.MathUtils;
32
33import com.badlogic.gdx.math.Vector2;
34import com.badlogic.gdx.physics.box2d.Body;
35import com.badlogic.gdx.physics.box2d.BodyDef.BodyType;
36import com.badlogic.gdx.physics.box2d.FixtureDef;
37
38/**
39 * @author Nicolas Gramlich
40 * @since 22:43:20 - 15.07.2010
41 */
42public class RacerGameActivity extends BaseGameActivity {
43 // ===========================================================
44 // Constants
45 // ===========================================================
46
47 private static final int RACETRACK_WIDTH = 64;
48
49 private static final int OBSTACLE_SIZE = 16;
50 private static final int CAR_SIZE = 16;
51
52 private static final int CAMERA_WIDTH = RACETRACK_WIDTH * 5;
53 private static final int CAMERA_HEIGHT = RACETRACK_WIDTH * 3;
54
55 // ===========================================================
56 // Fields
57 // ===========================================================
58
59 private Camera mCamera;
60
61 private Texture mVehiclesTexture;
62 private TiledTextureRegion mVehiclesTextureRegion;
63
64 private Texture mBoxTexture;
65 private TextureRegion mBoxTextureRegion;
66
67 private Texture mRacetrackTexture;
68 private TextureRegion mRacetrackStraightTextureRegion;
69 private TextureRegion mRacetrackCurveTextureRegion;
70
71 private Texture mOnScreenControlTexture;
72 private TextureRegion mOnScreenControlBaseTextureRegion;
73 private TextureRegion mOnScreenControlKnobTextureRegion;
74
75 private Scene mScene;
76
77 private PhysicsWorld mPhysicsWorld;
78
79 private Body mCarBody;
80 private TiledSprite mCar;
81
82 // ===========================================================
83 // Constructors
84 // ===========================================================
85
86 // ===========================================================
87 // Getter & Setter
88 // ===========================================================
89
90 // ===========================================================
91 // Methods for/from SuperClass/Interfaces
92 // ===========================================================
93
94 @Override
95 public Engine onLoadEngine() {
96 this.mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
97 return new Engine(new EngineOptions(true, ScreenOrientation.LANDSCAPE, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), this.mCamera));
98 }
99
100 @Override
101 public void onLoadResources() {
102 TextureRegionFactory.setAssetBasePath("gfx/");
103
104 this.mVehiclesTexture = new Texture(128, 16, TextureOptions.BILINEAR_PREMULTIPLYALPHA);
105 this.mVehiclesTextureRegion = TextureRegionFactory.createTiledFromAsset(this.mVehiclesTexture, this, "vehicles.png", 0, 0, 6, 1);
106
107 this.mRacetrackTexture = new Texture(128, 256, TextureOptions.REPEATING_BILINEAR_PREMULTIPLYALPHA);
108 this.mRacetrackStraightTextureRegion = TextureRegionFactory.createFromAsset(this.mRacetrackTexture, this, "racetrack_straight.png", 0, 0);
109 this.mRacetrackCurveTextureRegion = TextureRegionFactory.createFromAsset(this.mRacetrackTexture, this, "racetrack_curve.png", 0, 128);
110
111 this.mOnScreenControlTexture = new Texture(256, 128, TextureOptions.BILINEAR_PREMULTIPLYALPHA);
112 this.mOnScreenControlBaseTextureRegion = TextureRegionFactory.createFromAsset(this.mOnScreenControlTexture, this, "onscreen_control_base.png", 0, 0);
113 this.mOnScreenControlKnobTextureRegion = TextureRegionFactory.createFromAsset(this.mOnScreenControlTexture, this, "onscreen_control_knob.png", 128, 0);
114
115 this.mBoxTexture = new Texture(32, 32, TextureOptions.BILINEAR_PREMULTIPLYALPHA);
116 this.mBoxTextureRegion = TextureRegionFactory.createFromAsset(this.mBoxTexture, this, "box.png", 0, 0);
117
118 this.mEngine.getTextureManager().loadTextures(this.mVehiclesTexture, this.mRacetrackTexture, this.mOnScreenControlTexture, this.mBoxTexture);
119 }
120
121 @Override
122 public Scene onLoadScene() {
123 this.mEngine.registerUpdateHandler(new FPSLogger());
124
125 this.mScene = new Scene(1);
126 this.mScene.setBackground(new ColorBackground(0, 0, 0));
127
128 this.mPhysicsWorld = new FixedStepPhysicsWorld(30, new Vector2(0, 0), false, 8, 1);
129
130 this.initRacetrack();
131 this.initRacetrackBorders();
132 this.initCar();
133 this.initObstacles();
134 this.initOnScreenControls();
135
136 this.mScene.registerUpdateHandler(this.mPhysicsWorld);
137
138 return this.mScene;
139 }
140
141 @Override
142 public void onLoadComplete() {
143
144 }
145
146 // ===========================================================
147 // Methods
148 // ===========================================================
149
150 private void initOnScreenControls() {
151 final AnalogOnScreenControl analogOnScreenControl = new AnalogOnScreenControl(0, CAMERA_HEIGHT - this.mOnScreenControlBaseTextureRegion.getHeight(), this.mCamera, this.mOnScreenControlBaseTextureRegion, this.mOnScreenControlKnobTextureRegion, 0.1f, new IAnalogOnScreenControlListener() {
152 @Override
153 public void onControlChange(final BaseOnScreenControl pBaseOnScreenControl, final float pValueX, final float pValueY) {
154 final Body carBody = RacerGameActivity.this.mCarBody;
155
156 final Vector2 velocity = Vector2Pool.obtain(pValueX * 5, pValueY * 5);
157 carBody.setLinearVelocity(velocity);
158 Vector2Pool.recycle(velocity);
159
160 final float rotationInRad = (float)Math.atan2(-pValueX, pValueY);
161 carBody.setTransform(carBody.getWorldCenter(), rotationInRad);
162
163 RacerGameActivity.this.mCar.setRotation(MathUtils.radToDeg(rotationInRad));
164 }
165
166 @Override
167 public void onControlClick(final AnalogOnScreenControl pAnalogOnScreenControl) {
168 /* Nothing. */
169 }
170 });
171 analogOnScreenControl.getControlBase().setBlendFunction(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
172 analogOnScreenControl.getControlBase().setAlpha(0.5f);
173 // analogOnScreenControl.getControlBase().setScaleCenter(0, 128);
174 // analogOnScreenControl.getControlBase().setScale(0.75f);
175 // analogOnScreenControl.getControlKnob().setScale(0.75f);
176 analogOnScreenControl.refreshControlKnobPosition();
177
178 this.mScene.setChildScene(analogOnScreenControl);
179 }
180
181 private void initCar() {
182 this.mCar = new TiledSprite(20, 20, CAR_SIZE, CAR_SIZE, this.mVehiclesTextureRegion);
183 this.mCar.setCurrentTileIndex(0);
184
185 final FixtureDef carFixtureDef = PhysicsFactory.createFixtureDef(1, 0.5f, 0.5f);
186 this.mCarBody = PhysicsFactory.createBoxBody(this.mPhysicsWorld, this.mCar, BodyType.DynamicBody, carFixtureDef);
187
188 this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(this.mCar, this.mCarBody, true, false));
189
190 this.mScene.attachChild(this.mCar);
191 }
192
193 private void initObstacles() {
194 this.addObstacle(CAMERA_WIDTH / 2, RACETRACK_WIDTH / 2);
195 this.addObstacle(CAMERA_WIDTH / 2, RACETRACK_WIDTH / 2);
196 this.addObstacle(CAMERA_WIDTH / 2, CAMERA_HEIGHT - RACETRACK_WIDTH / 2);
197 this.addObstacle(CAMERA_WIDTH / 2, CAMERA_HEIGHT - RACETRACK_WIDTH / 2);
198 }
199
200 private void addObstacle(final float pX, final float pY) {
201 final Sprite box = new Sprite(pX, pY, OBSTACLE_SIZE, OBSTACLE_SIZE, this.mBoxTextureRegion);
202
203 final FixtureDef boxFixtureDef = PhysicsFactory.createFixtureDef(0.1f, 0.5f, 0.5f);
204 final Body boxBody = PhysicsFactory.createBoxBody(this.mPhysicsWorld, box, BodyType.DynamicBody, boxFixtureDef);
205 boxBody.setLinearDamping(10);
206 boxBody.setAngularDamping(10);
207
208 this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(box, boxBody, true, true));
209
210 this.mScene.attachChild(box);
211 }
212
213 private void initRacetrack() {
214 /* Straights. */
215 {
216 final TextureRegion racetrackHorizontalStraightTextureRegion = this.mRacetrackStraightTextureRegion.clone();
217 racetrackHorizontalStraightTextureRegion.setWidth(3 * this.mRacetrackStraightTextureRegion.getWidth());
218
219 final TextureRegion racetrackVerticalStraightTextureRegion = this.mRacetrackStraightTextureRegion;
220
221 /* Top Straight */
222 this.mScene.attachChild(new Sprite(RACETRACK_WIDTH, 0, 3 * RACETRACK_WIDTH, RACETRACK_WIDTH, racetrackHorizontalStraightTextureRegion));
223 /* Bottom Straight */
224 this.mScene.attachChild(new Sprite(RACETRACK_WIDTH, CAMERA_HEIGHT - RACETRACK_WIDTH, 3 * RACETRACK_WIDTH, RACETRACK_WIDTH, racetrackHorizontalStraightTextureRegion));
225
226 /* Left Straight */
227 final Sprite leftVerticalStraight = new Sprite(0, RACETRACK_WIDTH, RACETRACK_WIDTH, RACETRACK_WIDTH, racetrackVerticalStraightTextureRegion);
228 leftVerticalStraight.setRotation(90);
229 this.mScene.attachChild(leftVerticalStraight);
230 /* Right Straight */
231 final Sprite rightVerticalStraight = new Sprite(CAMERA_WIDTH - RACETRACK_WIDTH, RACETRACK_WIDTH, RACETRACK_WIDTH, RACETRACK_WIDTH, racetrackVerticalStraightTextureRegion);
232 rightVerticalStraight.setRotation(90);
233 this.mScene.attachChild(rightVerticalStraight);
234 }
235
236 /* Edges */
237 {
238 final TextureRegion racetrackCurveTextureRegion = this.mRacetrackCurveTextureRegion;
239
240 /* Upper Left */
241 final Sprite upperLeftCurve = new Sprite(0, 0, RACETRACK_WIDTH, RACETRACK_WIDTH, racetrackCurveTextureRegion);
242 upperLeftCurve.setRotation(90);
243 this.mScene.attachChild(upperLeftCurve);
244
245 /* Upper Right */
246 final Sprite upperRightCurve = new Sprite(CAMERA_WIDTH - RACETRACK_WIDTH, 0, RACETRACK_WIDTH, RACETRACK_WIDTH, racetrackCurveTextureRegion);
247 upperRightCurve.setRotation(180);
248 this.mScene.attachChild(upperRightCurve);
249
250 /* Lower Right */
251 final Sprite lowerRightCurve = new Sprite(CAMERA_WIDTH - RACETRACK_WIDTH, CAMERA_HEIGHT - RACETRACK_WIDTH, RACETRACK_WIDTH, RACETRACK_WIDTH, racetrackCurveTextureRegion);
252 lowerRightCurve.setRotation(270);
253 this.mScene.attachChild(lowerRightCurve);
254
255 /* Lower Left */
256 final Sprite lowerLeftCurve = new Sprite(0, CAMERA_HEIGHT - RACETRACK_WIDTH, RACETRACK_WIDTH, RACETRACK_WIDTH, racetrackCurveTextureRegion);
257 this.mScene.attachChild(lowerLeftCurve);
258 }
259 }
260
261
262 private void initRacetrackBorders() {
263 final Shape bottomOuter = new Rectangle(0, CAMERA_HEIGHT - 2, CAMERA_WIDTH, 2);
264 final Shape topOuter = new Rectangle(0, 0, CAMERA_WIDTH, 2);
265 final Shape leftOuter = new Rectangle(0, 0, 2, CAMERA_HEIGHT);
266 final Shape rightOuter = new Rectangle(CAMERA_WIDTH - 2, 0, 2, CAMERA_HEIGHT);
267
268 final Shape bottomInner = new Rectangle(RACETRACK_WIDTH, CAMERA_HEIGHT - 2 - RACETRACK_WIDTH, CAMERA_WIDTH - 2 * RACETRACK_WIDTH, 2);
269 final Shape topInner = new Rectangle(RACETRACK_WIDTH, RACETRACK_WIDTH, CAMERA_WIDTH - 2 * RACETRACK_WIDTH, 2);
270 final Shape leftInner = new Rectangle(RACETRACK_WIDTH, RACETRACK_WIDTH, 2, CAMERA_HEIGHT - 2 * RACETRACK_WIDTH);
271 final Shape rightInner = new Rectangle(CAMERA_WIDTH - 2 - RACETRACK_WIDTH, RACETRACK_WIDTH, 2, CAMERA_HEIGHT - 2 * RACETRACK_WIDTH);
272
273 final FixtureDef wallFixtureDef = PhysicsFactory.createFixtureDef(0, 0.5f, 0.5f);
274 PhysicsFactory.createBoxBody(this.mPhysicsWorld, bottomOuter, BodyType.StaticBody, wallFixtureDef);
275 PhysicsFactory.createBoxBody(this.mPhysicsWorld, topOuter, BodyType.StaticBody, wallFixtureDef);
276 PhysicsFactory.createBoxBody(this.mPhysicsWorld, leftOuter, BodyType.StaticBody, wallFixtureDef);
277 PhysicsFactory.createBoxBody(this.mPhysicsWorld, rightOuter, BodyType.StaticBody, wallFixtureDef);
278
279 PhysicsFactory.createBoxBody(this.mPhysicsWorld, bottomInner, BodyType.StaticBody, wallFixtureDef);
280 PhysicsFactory.createBoxBody(this.mPhysicsWorld, topInner, BodyType.StaticBody, wallFixtureDef);
281 PhysicsFactory.createBoxBody(this.mPhysicsWorld, leftInner, BodyType.StaticBody, wallFixtureDef);
282 PhysicsFactory.createBoxBody(this.mPhysicsWorld, rightInner, BodyType.StaticBody, wallFixtureDef);
283
284 this.mScene.attachChild(bottomOuter);
285 this.mScene.attachChild(topOuter);
286 this.mScene.attachChild(leftOuter);
287 this.mScene.attachChild(rightOuter);
288
289 this.mScene.attachChild(bottomInner);
290 this.mScene.attachChild(topInner);
291 this.mScene.attachChild(leftInner);
292 this.mScene.attachChild(rightInner);
293 }
294
295 // ===========================================================
296 // Inner and Anonymous Classes
297 // ===========================================================
298}

Antworten
ChillSkillS
  • Forum-Beiträge: 22

09.07.2011, 01:17:27 via Website

Hallo,
sorry, ich kann deine Frage nicht beantworten,
aber ich denke, hier kann mir jemanod verraten, BITTE,
wofür ist diese Anwendung???
Klar, ich könntz einfach installieren
und nach 'was passiert dann'-Methode,
schauen was.passiert.dann...
...könnte mir bitte jemand ersparen
und mich darüber infornmieren,
wofür diese Anwendung "AndEngine" ist und
was man damit machen kann??????
Vielen Dank im Voraus,
das hier ist mein erstes Smartphone ...:$ und drum hab ich da eh noch 1,2 Fragen....dann demnächst....
LG
Danny

Antworten
Niklas Andres
  • Forum-Beiträge: 10

10.07.2011, 16:13:25 via Website

Andengine ist ein freie Engine für die Spieleprogrammierung unter Android.(http://andengine.org)
Andengine ist auch kein Programm sondern eine Library die man in einem Projekt einfügen kann.
Dieser Code dient dazu ein Auto per Steuerrung zu bewegen und kann mit anderen Gegenstände kollidieren.(Video:http://www.youtube.com/watch?v=sGOBV8ke4rA&feature=related )

Antworten
ChillSkillS
  • Forum-Beiträge: 22

12.07.2011, 06:47:59 via Website

Hallo,
@-}--
allerbesten Dank,
...und eine schöne Woche!!!
Bis denn dann;-)
Danny

Niklas Andres

Antworten