-1

Android TMX Loader を使用してゲーム マップをロードしようとしています。ファイルがロードされていないことが原因である/と思われる問題が引き続き発生します。提供された例を使用し、ファイルを置き換えただけですが、使用するパスに関係なく、ロードされません。ファイルが見つからないという例外、またはファイルをロードする行でヌルポインタ例外が発生します。アセットが WinRar を使用して APK に配置されていることを確認しましたが、実際に存在しています...

これが私のコードです:

ImageView mapView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    loadWorld("World.tmx");

    setContentView(R.layout.activity_main);
}

/*
 * public void displayMap() { Display display =
 * getWindowManager().getDefaultDisplay(); Point size = new Point();
 * display.getSize(size); int width = size.x; int height = size.y;
 * 
 * }
 */

public void loadWorld(String path) {
    // Start the parser, get back TMX data object
    TileMapData t = TMXLoader.readTMX(path, this);

    mapView = (ImageView) findViewById(R.id.MapImage);

    // Create a Bitmap from the tilemap data
    Bitmap mapImage = TMXLoader.createBitmap(t, this, 0, t.layers.size());

    // Set the imageview to show the map, if we have one
    if (mapImage != null) {
        mapView.setImageBitmap(mapImage);
    }
    // Map loading problem, inform the user.
    else {
        Toast errorMessage = Toast.makeText(getApplicationContext(),
                "Map could not be loaded", Toast.LENGTH_LONG);
        errorMessage.show();
    }
}

最新の LogCat スタックは次のとおりです。

12-31 07:44:25.046: E/AndroidRuntime(18074): FATAL EXCEPTION: main
12-31 07:44:25.046: E/AndroidRuntime(18074): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.fionaheiss.shovelshovel/com.fionaheiss.shovelshovel.DisplayMap}: java.lang.NullPointerException
12-31 07:44:25.046: E/AndroidRuntime(18074):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2006)
12-31 07:44:25.046: E/AndroidRuntime(18074):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2031)
12-31 07:44:25.046: E/AndroidRuntime(18074):    at android.app.ActivityThread.access$600(ActivityThread.java:126)
12-31 07:44:25.046: E/AndroidRuntime(18074):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1166)
12-31 07:44:25.046: E/AndroidRuntime(18074):    at android.os.Handler.dispatchMessage(Handler.java:99)
12-31 07:44:25.046: E/AndroidRuntime(18074):    at android.os.Looper.loop(Looper.java:137)
12-31 07:44:25.046: E/AndroidRuntime(18074):    at android.app.ActivityThread.main(ActivityThread.java:4486)
12-31 07:44:25.046: E/AndroidRuntime(18074):    at java.lang.reflect.Method.invokeNative(Native Method)
12-31 07:44:25.046: E/AndroidRuntime(18074):    at java.lang.reflect.Method.invoke(Method.java:511)
12-31 07:44:25.046: E/AndroidRuntime(18074):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
12-31 07:44:25.046: E/AndroidRuntime(18074):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12-31 07:44:25.046: E/AndroidRuntime(18074):    at dalvik.system.NativeStart.main(Native Method)
12-31 07:44:25.046: E/AndroidRuntime(18074): Caused by: java.lang.NullPointerException
12-31 07:44:25.046: E/AndroidRuntime(18074):    at com.fionaheiss.shovelshovel.DisplayMap.loadWorld(DisplayMap.java:38)
12-31 07:44:25.046: E/AndroidRuntime(18074):    at com.fionaheiss.shovelshovel.DisplayMap.onCreate(DisplayMap.java:20)
12-31 07:44:25.046: E/AndroidRuntime(18074):    at android.app.Activity.performCreate(Activity.java:4635)
12-31 07:44:25.046: E/AndroidRuntime(18074):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
12-31 07:44:25.046: E/AndroidRuntime(18074):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1970)
12-31 07:44:25.046: E/AndroidRuntime(18074):    ... 11 more

何がうまくいかないのですか?一生解けません。

助けてくれてありがとう!

4

2 に答える 2

1

ここ

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    loadWorld("World.tmx");  //<< here

    setContentView(R.layout.activity_main);
}

現在のアクティビティにレイアウトを追加する前に見つけようとしているImageView MapImage ので、コードを次のように変更します。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    setContentView(R.layout.activity_main);

    loadWorld("file:///android_asset/World.tmx");
}
于 2012-12-31T15:37:49.217 に答える
0

これは、t または t.layers のいずれかが null であることを意味します。

于 2012-12-31T15:37:46.277 に答える