无法使用Scene2D启动活动错误

时间:2013-12-09 13:48:54

标签: java android libgdx scene2d

我们正试图从libGDX中使用scene2D绘制一些东西。我们的主要活动然后使用extends Androidapplication来初始化我们的testgame类。在这里,我们定义我们的屏幕,然后在屏幕类中创建我们的舞台和演员。

问题是我们一遍又一遍地得到同样的错误: >

    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.gamepadTest.app/com.gamepadTest.app.MainActivity}: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.gamepadTest.app/com.gamepadTest.app.TestGame}; have you declared this activity in your   AndroidManifest.xml? 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2137)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
            at android.app.ActivityThread.access$600(ActivityThread.java:141)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5103)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at     com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)
            Caused by: java.lang.ClassNotFoundException: Didn't find class     "com.gamepadTest.app.MainActivity" on path: DexPathList[[zip file     "/data/app/com.gamepadTest.app-1.apk"],nativeLibraryDirectories=[/data/app-   lib/com.gamepadTest.app-1, /system/lib]]
            at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
            at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2128)
            

> at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
            at android.app.ActivityThread.access$600(ActivityThread.java:141)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5103)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at      com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)

看看:

import android.os.Bundle;
import com.badlogic.gdx.backends.android.AndroidApplication;
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;

public class MainActivity extends AndroidApplication {
    private TestGame testGame = new TestGame();

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();

        initialize(testGame, cfg);
    }
}

import com.badlogic.gdx.Game;

public class TestGame extends Game
{
    TestScreen testScreen;

    @Override
    public void create() {
        testScreen = new TestScreen();
        setScreen(testScreen);
    }

    @Override
    public void dispose() {
        testScreen.dispose();
    }
}

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.scenes.scene2d.Stage;

public class TestScreen implements Screen {

    private Stage stage;
    private TestActor testActor;

    public TestScreen() {
        stage = new Stage();
        Gdx.input.setInputProcessor(stage);
        testActor = new TestActor();
        stage.addActor(testActor);
    }

    public void resize(int width, int height) {
        stage.setViewport(800, 600, false);
        stage.getCamera().translate(-stage.getGutterWidth(), -stage.getGutterHeight(), 0);
    }

    @Override
    public void render(float delta) {
        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
        stage.act(delta);
        stage.draw();
    }

    @Override public void dispose() {
        stage.dispose();
    }
    @Override public void show() {}
    @Override public void hide() {}
    @Override public void pause() {}
    @Override public void resume() {}
}

import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.badlogic.gdx.scenes.scene2d.Actor;

public class TestActor extends Actor{

    private ShapeRenderer renderer;

    @Override
    public void act(float delta) {
        super.act(delta);
        renderer = new ShapeRenderer();
    }

    @Override
    public void draw (SpriteBatch batch, float parentAlpha) {
        batch.end();

        renderer.setProjectionMatrix(batch.getProjectionMatrix());
        renderer.setTransformMatrix(batch.getTransformMatrix());
        renderer.translate(getX(), getY(), 0);

        renderer.begin(ShapeRenderer.ShapeType.Point);
        renderer.rect(0, 0, 100, 100);
        renderer.end();

        batch.begin();
    }
}

更新:

这是我的清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gamepadTest.app"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="11"
    android:targetSdkVersion="19" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.gamepadTest.app.MainActivity"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
</manifest>

2 个答案:

答案 0 :(得分:1)

您必须在TestGame内将您的活动AndroidManifest.xml声明为<activity>

有关清单的更多信息:http://developer.android.com/guide/topics/manifest/manifest-intro.html

应该看起来像这样,并且需要在<application> - 标签内:

    <activity
        android:name="com.example.TestGame"
        android:label="@string/app_name" >
    </activity>

答案 1 :(得分:0)

TestGame不是活动:

public class TestGame extends Game{

您必须声明的活动是MainActivity。所以它很奇怪,可能你用另一个名字做了另一个Activity。但无论如何,尝试使用点符号而不是整个包来设置它:

<activity
    android:name=".TestGame"
    android:label="@string/app_name" >
</activity>

看到这个: Unable to find explicit activity class