尝试从here制作示例PhysicsRemoveExample.java
。
程序启动时收到此消息:
Sorry! The application PhysicsRemoveExample(process org.anddev.andengine.PhysicsRemoveExample) has stopped unexpectedly. Please try again.
我有构建路径andengine.jar
和andenginephysicsbox2dextension.jar
assets/gfx -> face_box_tiled.png
和face_circle_tiled.png
。
这是PhysicsRemoveExample.java
中的Java代码。与示例中的相同,但我已更改为extends BaseGameActivity
。
package org.anddev.andengine.PhysicsRemoveExample;
import org.anddev.andengine.engine.Engine;
import org.anddev.andengine.engine.camera.Camera;
import org.anddev.andengine.engine.options.EngineOptions;
import org.anddev.andengine.engine.options.EngineOptions.ScreenOrientation;
import org.anddev.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;
import org.anddev.andengine.entity.primitive.Rectangle;
import org.anddev.andengine.entity.scene.Scene;
import org.anddev.andengine.entity.scene.Scene.IOnAreaTouchListener;
import org.anddev.andengine.entity.scene.Scene.IOnSceneTouchListener;
import org.anddev.andengine.entity.scene.Scene.ITouchArea;
import org.anddev.andengine.entity.scene.background.ColorBackground;
import org.anddev.andengine.entity.shape.Shape;
import org.anddev.andengine.entity.sprite.AnimatedSprite;
import org.anddev.andengine.entity.util.FPSLogger;
import org.anddev.andengine.extension.physics.box2d.PhysicsConnector;
import org.anddev.andengine.extension.physics.box2d.PhysicsFactory;
import org.anddev.andengine.extension.physics.box2d.PhysicsWorld;
import org.anddev.andengine.input.touch.TouchEvent;
import org.anddev.andengine.opengl.texture.Texture;
import org.anddev.andengine.opengl.texture.TextureOptions;
import org.anddev.andengine.opengl.texture.region.TextureRegionFactory;
import org.anddev.andengine.opengl.texture.region.TiledTextureRegion;
import org.anddev.andengine.sensor.accelerometer.AccelerometerData;
import org.anddev.andengine.sensor.accelerometer.IAccelerometerListener;
import org.anddev.andengine.ui.activity.BaseGameActivity;
import android.hardware.SensorManager;
import android.widget.Toast;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.Body;
import com.badlogic.gdx.physics.box2d.FixtureDef;
import com.badlogic.gdx.physics.box2d.BodyDef.BodyType;
/**
* @author Nicolas Gramlich
* @since 18:47:08 - 19.03.2010
*/
public class PhysicsRemoveExample extends BaseGameActivity implements IAccelerometerListener, IOnSceneTouchListener, IOnAreaTouchListener {
// ===========================================================
// Constants
// ===========================================================
private static final int CAMERA_WIDTH = 720;
private static final int CAMERA_HEIGHT = 480;
// ===========================================================
// Fields
// ===========================================================
private Texture mTexture;
private TiledTextureRegion mBoxFaceTextureRegion;
private TiledTextureRegion mCircleFaceTextureRegion;
private PhysicsWorld mPhysicsWorld;
private int mFaceCount = 0;
private final Vector2 mTempVector = new Vector2();
// ===========================================================
// Constructors
// ===========================================================
// ===========================================================
// Getter & Setter
// ===========================================================
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
@Override
public Engine onLoadEngine() {
Toast.makeText(this, "Touch the screen to add objects. Touch an object to remove it.", Toast.LENGTH_LONG).show();
final Camera camera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
final EngineOptions engineOptions = new EngineOptions(true, ScreenOrientation.LANDSCAPE, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), camera);
engineOptions.getTouchOptions().setRunOnUpdateThread(true);
return new Engine(engineOptions);
}
@Override
public void onLoadResources() {
this.mTexture = new Texture(64, 64, TextureOptions.BILINEAR_PREMULTIPLYALPHA);
TextureRegionFactory.setAssetBasePath("gfx/");
this.mBoxFaceTextureRegion = TextureRegionFactory.createTiledFromAsset(this.mTexture, this, "face_box_tiled.png", 0, 0, 2, 1); // 64x32
this.mCircleFaceTextureRegion = TextureRegionFactory.createTiledFromAsset(this.mTexture, this, "face_circle_tiled.png", 0, 32, 2, 1); // 64x32
this.mEngine.getTextureManager().loadTexture(this.mTexture);
this.enableAccelerometerSensor(this);
}
@Override
public Scene onLoadScene() {
this.mEngine.registerUpdateHandler(new FPSLogger());
final Scene scene = new Scene(2);
scene.setBackground(new ColorBackground(0, 0, 0));
scene.setOnSceneTouchListener(this);
this.mPhysicsWorld = new PhysicsWorld(new Vector2(0, SensorManager.GRAVITY_EARTH), false);
final Shape ground = new Rectangle(0, CAMERA_HEIGHT - 2, CAMERA_WIDTH, 2);
final Shape roof = new Rectangle(0, 0, CAMERA_WIDTH, 2);
final Shape left = new Rectangle(0, 0, 2, CAMERA_HEIGHT);
final Shape right = new Rectangle(CAMERA_WIDTH - 2, 0, 2, CAMERA_HEIGHT);
final FixtureDef wallFixtureDef = PhysicsFactory.createFixtureDef(0, 0.5f, 0.5f);
PhysicsFactory.createBoxBody(this.mPhysicsWorld, ground, BodyType.StaticBody, wallFixtureDef);
PhysicsFactory.createBoxBody(this.mPhysicsWorld, roof, BodyType.StaticBody, wallFixtureDef);
PhysicsFactory.createBoxBody(this.mPhysicsWorld, left, BodyType.StaticBody, wallFixtureDef);
PhysicsFactory.createBoxBody(this.mPhysicsWorld, right, BodyType.StaticBody, wallFixtureDef);
scene.getBottomLayer().addEntity(ground);
scene.getBottomLayer().addEntity(roof);
scene.getBottomLayer().addEntity(left);
scene.getBottomLayer().addEntity(right);
scene.registerUpdateHandler(this.mPhysicsWorld);
scene.setOnAreaTouchListener(this);
return scene;
}
@Override
public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final ITouchArea pTouchArea, final float pTouchAreaLocalX, final float pTouchAreaLocalY) {
if(pSceneTouchEvent.getAction() == TouchEvent.ACTION_DOWN) {
PhysicsRemoveExample.this.removeFace((AnimatedSprite)pTouchArea);
return true;
}
return false;
}
public void onLoadComplete() {
}
@Override
public boolean onSceneTouchEvent(final Scene pScene, final TouchEvent pSceneTouchEvent) {
if(this.mPhysicsWorld != null) {
if(pSceneTouchEvent.getAction() == TouchEvent.ACTION_DOWN) {
this.addFace(pSceneTouchEvent.getX(), pSceneTouchEvent.getY());
return true;
}
}
return false;
}
@Override
public void onAccelerometerChanged(final AccelerometerData pAccelerometerData) {
this.mTempVector.set(pAccelerometerData.getY(), pAccelerometerData.getX());
this.mPhysicsWorld.setGravity(this.mTempVector);
}
// ===========================================================
// Methods
// ===========================================================
private void addFace(final float pX, final float pY) {
final Scene scene = this.mEngine.getScene();
this.mFaceCount++;
final AnimatedSprite face;
final Body body;
final FixtureDef objectFixtureDef = PhysicsFactory.createFixtureDef(1, 0.5f, 0.5f);
if(this.mFaceCount % 2 == 0) {
face = new AnimatedSprite(pX, pY, this.mBoxFaceTextureRegion);
body = PhysicsFactory.createBoxBody(this.mPhysicsWorld, face, BodyType.DynamicBody, objectFixtureDef);
} else {
face = new AnimatedSprite(pX, pY, this.mCircleFaceTextureRegion);
body = PhysicsFactory.createCircleBody(this.mPhysicsWorld, face, BodyType.DynamicBody, objectFixtureDef);
}
face.animate(200, true);
face.setUpdatePhysics(false);
scene.registerTouchArea(face);
scene.getTopLayer().addEntity(face);
this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(face, body, true, true, false, false));
}
private void removeFace(final AnimatedSprite face) {
final Scene scene = this.mEngine.getScene();
final PhysicsConnector facePhysicsConnector = this.mPhysicsWorld.getPhysicsConnectorManager().findPhysicsConnectorByShape(face);
this.mPhysicsWorld.unregisterPhysicsConnector(facePhysicsConnector);
this.mPhysicsWorld.destroyBody(facePhysicsConnector.getBody());
scene.unregisterTouchArea(face);
scene.getTopLayer().removeEntity(face);
}
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
}
我在LogCat中收到此错误:
11-12 20:31:39.482: ERROR/vold(27): Error opening switch name path '/sys/class/switch/test' (No such file or directory)
11-12 20:31:39.482: ERROR/vold(27): Error bootstrapping switch '/sys/class/switch/test' (No such file or directory)
11-12 20:31:39.482: ERROR/vold(27): Error opening switch name path '/sys/class/switch/test2' (No such file or directory)
11-12 20:31:39.482: ERROR/vold(27): Error bootstrapping switch '/sys/class/switch/test2' (No such file or directory)
11-12 20:31:55.381: ERROR/BatteryService(52): usbOnlinePath not found
11-12 20:31:55.381: ERROR/BatteryService(52): batteryVoltagePath not found
11-12 20:31:55.381: ERROR/BatteryService(52): batteryTemperaturePath not found
11-12 20:31:55.401: ERROR/SurfaceFlinger(52): Couldn't open /sys/power/wait_for_fb_sleep or /sys/power/wait_for_fb_wake
11-12 20:32:01.131: ERROR/EventHub(52): could not get driver version for /dev/input/mouse0, Not a typewriter
11-12 20:32:01.131: ERROR/EventHub(52): could not get driver version for /dev/input/mice, Not a typewriter
11-12 20:32:01.351: ERROR/System(52): Failure starting core service
11-12 20:32:01.351: ERROR/System(52): java.lang.SecurityException
11-12 20:32:01.351: ERROR/System(52): at android.os.BinderProxy.transact(Native Method)
11-12 20:32:01.351: ERROR/System(52): at android.os.ServiceManagerProxy.addService(ServiceManagerNative.java:146)
11-12 20:32:01.351: ERROR/System(52): at android.os.ServiceManager.addService(ServiceManager.java:72)
11-12 20:32:01.351: ERROR/System(52): at com.android.server.ServerThread.run(SystemServer.java:176)
11-12 20:32:01.361: ERROR/AndroidRuntime(52): Crash logging skipped, no checkin service
11-12 20:32:12.683: ERROR/ActivityThread(103): Failed to find provider info for android.server.checkin
11-12 20:32:15.853: ERROR/ActivityThread(103): Failed to find provider info for android.server.checkin
11-12 20:32:16.183: ERROR/ActivityThread(103): Failed to find provider info for android.server.checkin
11-12 20:32:17.303: ERROR/MediaPlayerService(31): Couldn't open fd for content://settings/system/notification_sound
11-12 20:32:17.313: ERROR/MediaPlayer(52): Unable to to create media player
11-12 20:32:23.833: ERROR/AndroidRuntime(135): ERROR: thread attach failed
11-12 20:32:32.292: ERROR/AndroidRuntime(178): ERROR: thread attach failed
11-12 20:32:59.373: ERROR/AndroidRuntime(225): Uncaught handler: thread main exiting due to uncaught exception
11-12 20:32:59.533: ERROR/AndroidRuntime(225): java.lang.ExceptionInInitializerError
11-12 20:32:59.533: ERROR/AndroidRuntime(225): at org.anddev.andengine.PhysicsRemoveExample.PhysicsRemoveExample.onLoadScene(PhysicsRemoveExample.java:125)
11-12 20:32:59.533: ERROR/AndroidRuntime(225): at org.anddev.andengine.ui.activity.BaseGameActivity.doResume(BaseGameActivity.java:159)
11-12 20:32:59.533: ERROR/AndroidRuntime(225): at org.anddev.andengine.ui.activity.BaseGameActivity.onWindowFocusChanged(BaseGameActivity.java:83)
11-12 20:32:59.533: ERROR/AndroidRuntime(225): at com.android.internal.policy.impl.PhoneWindow$DecorView.onWindowFocusChanged(PhoneWindow.java:1969)
11-12 20:32:59.533: ERROR/AndroidRuntime(225): at android.view.View.dispatchWindowFocusChanged(View.java:3731)
11-12 20:32:59.533: ERROR/AndroidRuntime(225): at android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:657)
11-12 20:32:59.533: ERROR/AndroidRuntime(225): at android.view.ViewRoot.handleMessage(ViewRoot.java:1819)
11-12 20:32:59.533: ERROR/AndroidRuntime(225): at android.os.Handler.dispatchMessage(Handler.java:99)
11-12 20:32:59.533: ERROR/AndroidRuntime(225): at android.os.Looper.loop(Looper.java:123)
11-12 20:32:59.533: ERROR/AndroidRuntime(225): at android.app.ActivityThread.main(ActivityThread.java:4363)
11-12 20:32:59.533: ERROR/AndroidRuntime(225): at java.lang.reflect.Method.invokeNative(Native Method)
11-12 20:32:59.533: ERROR/AndroidRuntime(225): at java.lang.reflect.Method.invoke(Method.java:521)
11-12 20:32:59.533: ERROR/AndroidRuntime(225): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
11-12 20:32:59.533: ERROR/AndroidRuntime(225): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
11-12 20:32:59.533: ERROR/AndroidRuntime(225): at dalvik.system.NativeStart.main(Native Method)
11-12 20:32:59.533: ERROR/AndroidRuntime(225): Caused by: java.lang.UnsatisfiedLinkError: Library andenginephysicsbox2dextension not found
11-12 20:32:59.533: ERROR/AndroidRuntime(225): at java.lang.Runtime.loadLibrary(Runtime.java:489)
11-12 20:32:59.533: ERROR/AndroidRuntime(225): at java.lang.System.loadLibrary(System.java:557)
11-12 20:32:59.533: ERROR/AndroidRuntime(225): at org.anddev.andengine.extension.physics.box2d.PhysicsWorld.<clinit>(PhysicsWorld.java:30)
11-12 20:32:59.533: ERROR/AndroidRuntime(225): ... 15 more
11-12 20:32:59.603: ERROR/dalvikvm(225): Unable to open stack trace file '/data/anr/traces.txt': Permission denied
有什么问题?尝试过模拟器1.6和2.1并创建了一个全新的AVD。 我可以毫无问题地完成Getting Started Tutorial (Video – 5 minutes)。
答案 0 :(得分:5)
检查libandenginephysicsbox2dextension.so文件是否在libs / armeabi文件夹中
答案 1 :(得分:2)
这就是我在Eclipse :::
中使物理工作所做的工作1。 运行并安装: 水银-2.1.exe
Mercurial-2.1为您提供了HG命令工具。
在命令(DOS)提示符下使用hg工具获取最新的AndEngine 和andenginephysicsbox2dextension。使用以下hg命令&gt;
hg clone https://code.google.com/p/andenginephysicsbox2dextension/
hg clone https://andengine.googlecode.com/hg/ andengine
这将下载这两个项目。将它们导入Eclipse。 使用文件 - &gt;导入 - &gt;现有项目进入工作区 - &gt;选择根目录 - &gt;浏览 找到使用hg命令下载的AndEngine项目。 对andenginephysicsbox2dextension项目执行相同操作 - 因此您将拥有两个库项目 在Eclipse中。
您可能需要右键单击该项目并将“Project Build target”设置为 Android 2.3。您可能还需要在项目的根目录中创建res和gen文件夹。 确保项目已编译。
右键单击项目,然后选择导出 - &gt;在Java下选择“jar文件”选项。 点击下一步。 右侧窗格中的UNTICK EVERYTHING - AndroidManifest.xml和其他所有内容 列表取消选中它。例如,如果要编译AndEngine.jar,请指定.jar文件的位置 你可以输入:C:\ temp \ andengine.jar 在jar文件输入框中。单击FINISH - 它应该编译。
转到此网站:
下载需要进入的两个.so文件: armeabi armeabi-V7A
答案 2 :(得分:0)
只需从andengine示例项目中复制“libs”文件 - 而不是“lib”文件,然后将其粘贴到项目中。
答案 3 :(得分:0)
老andengine.jar andenginephysicsbox2dextension.jar remvove。
复制“lib”和“libs”文件夹 - 从andengine examples项目中将其粘贴到您的项目中。并添加lib inner jar文件添加到构建路径
答案 4 :(得分:0)
我遇到了同样的问题,并且无法解决此问题。一次又一次。
啊,最后我能够解决问题并想分享,因为必须有可能必须有松散的那些头发:)
我只需将nicolas repo中的那个替换为RealMayo repo。以下是链接 https://github.com/RealMayo/AndEnginePhysicsBox2DExtension
请告诉我。 :)
快乐的编码。