【问题标题】:andengine start game from menuandengine 从菜单开始游戏
【发布时间】:2012-12-12 14:36:00
【问题描述】:

我想从菜单开始游戏。在 Eclipse 中,我有 2 个项目,一个带有菜单,另一个是实际游戏。两者都使用SimpleBaseGameActivity 作为他们的基础。网上的例子如下所示。特别是,它创建一个意图并使用该意图启动一个活动。下面的代码在MyGame.class 上给出了NoClassDefFoundError。这并不奇怪,因为MyGame.class 不存在,但MyGame.apk 存在。我该怎么做?

public boolean onMenuItemClicked(final MenuScene pMenuScene,
        final IMenuItem pMenuItem,
        final float pMenuItemLocalX,
        final float pMenuItemLocalY) {

    switch(pMenuItem.getID()) {
        case MENU_PLAY:
        MainActivity.this.runOnUiThread(new Runnable() {
            public void run() {
                Intent intent = new Intent(getApplication(), MyGame.class);
                startActivity(intent);
                finish();       
            }
        });
        return true;
    }
}

----- 编辑

我已经让它工作了,所有东西都在一个项目中,当点击menu item 时,游戏就开始了。但是,当单击“后退箭头”时,它不会返回到menu,而是返回到操作系统。 manifest 文件中的活动定义如下。这看起来正确吗?

<activity
    android:name=".MainActivity"
    android:label="@string/title_activity_main" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

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

<activity
    android:name="com.mygame.MyGame"
    android:label="@string/mygame_activity"
    android:parentActivityName="com.menu.MainActivity" >
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.menu.MainActivity" />
</activity>

我将此添加到MyGame,但它没有被调用:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
}

--- 编辑 我需要删除这一行:

MainActivity.this.finish();

【问题讨论】:

    标签: java android andengine


    【解决方案1】:

    首先在Manifest中插入标签

    <application>...</application>
    

    这个标签:

     <activity
            android:name=".MyGame"
            android:label="MygameName" >
        </activity>
    

    并更改您的代码:

     public boolean onMenuItemClicked(final MenuScene pMenuScene,
            final IMenuItem pMenuItem,
            final float pMenuItemLocalX,
            final float pMenuItemLocalY) {
    
    switch(pMenuItem.getID()) {
    
    case MENU_PLAY:
    MainActivity.this.runOnUiThread(new Runnable() {
        public void run() {
    
            Intent intent = new Intent(MainActivity.this, MyGame.class);
            startActivity(intent);
            MainActivity.this.finish();
    
        }
    });
    return true;
    

    【讨论】:

    • 终于回到了这个话题。我已按照您的建议实施,但仍然出现相同的错误。我仍然在我原来的困境中,它正在寻找并且毫不奇怪地找不到 MyGame.class。根据下面的链接,类在apk中被编译成dex格式。 en.wikipedia.org/wiki/APK_%28file_format%29
    【解决方案2】:

    MyGame 必须是 Activity,并且必须在 Android.manifest 中作为 Activity 提及。

    http://developer.android.com/training/basics/firstapp/starting-activity.html

    【讨论】:

    • 阅读这个链接,它设置了父活动。所以父活动将是菜单,因为游戏(孩子)将上升到父母。我正在编辑的清单文件是在父项目还是子项目中?
    【解决方案3】:

    请删除对函数“finish()”的调用,然后它将带您返回父活动。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-24
      • 1970-01-01
      • 2011-09-04
      • 2018-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-14
      相关资源
      最近更新 更多