0

私は見て、見て、答えを見つけることができません。しかし、ここに私の問題があります。メインの Game クラスの目盛りに基づいて、別のクラスの int を変更したいと考えています。コードは次のとおりです。

痕跡:

    02-16 02:10:58.605: W/dalvikvm(1578): threadid=13: thread exiting with uncaught                 exception (group=0x40c5ca68)
    02-16 02:10:58.615: E/AndroidRuntime(1578): FATAL EXCEPTION: Thread-16720
    02-16 02:10:58.615: E/AndroidRuntime(1578): java.lang.NullPointerException
    02-16 02:10:58.615: E/AndroidRuntime(1578):     at    com.mojang.ld22.Game.tick(Game.java:374)
    02-16 02:10:58.615: E/AndroidRuntime(1578):     at   com.mojang.ld22.Game.iterate(Game.java:300)
    02-16 02:10:58.615: E/AndroidRuntime(1578):     at com.mojang.ld22.GameActivity$4.run(GameActivity.java:136)
    02-16 02:10:58.615: E/AndroidRuntime(1578):     at java.lang.Thread.run(Thread.java:856)

Game.java スニペット

    public void tick() {
    tickCount++;

    ...
    ...
    ...

        if (tickCount % 1000 == 0) {
            if (rising) {
                lightlvl++;
Would error here too        clock.time++;    <-----------

                if (lightlvl >= 8) {
                    rising = false;
                }

            } else {
                lightlvl--;
    LINE 374 ---------->        clock.time--;    <------------

                if (lightlvl <= -2) 
                    rising = true;
            }
        }
    }

}  

そしてClock.java

    package com.mojang.ld22.entity;

    import com.mojang.ld22.crafting.Crafting;
    import com.mojang.ld22.entity.particle.TextParticle;
    import com.mojang.ld22.entity.particle.TimeClock;
    import com.mojang.ld22.gfx.Color;
    import com.mojang.ld22.gfx.Screen;
    import com.mojang.ld22.screen.CraftingMenu;
    import com.mojang.ld22.item.FurnitureItem;

    public class Clock extends Furniture {


/**
 * 
 */
private static final long serialVersionUID = 3146189783597003582L;

Player player;
public int time = 0;
public int clock = 1;
public boolean rising = false;

public Clock() {
    super("Clock");
    col = Color.get(-1, 100, 321, 431);
    sprite = 10;
    xr = 3;
    yr = 2;

}

@Override
public void tick(){
    if (time <= 0)
        clock = 1;
    if (time == 1)
        clock = 1;
    if (time == 2)
        clock = 2;
    if (time == 3)
        clock = 3;
    if (time == 4)
        clock = 4;
    if (time == 5)
        clock = 5;
    if (time == 6)
        clock = 6;
    if (time == 7)
        clock = 7;
    if (time == 8);
        clock = 8;
}



@Override
public void render(Screen screen){
    int col = Color.get(-1, 531, 000, 534);
    //incorrect times TODO
    if (clock == 8)
        screen.render(x - 8, y - 8, 7 + 11 * 32, col, 0);
    if (clock == 6)
        screen.render(x - 8, y - 8, 8 + 11 * 32, col, 0);
    //noon midnight
    if (clock == 5)
        screen.render(x - 8, y - 8, 9 + 11 * 32, col, 0);
    if (clock == 4)
        screen.render(x - 8, y - 8, 10 + 11 * 32, col, 0);
    //Before noon after noon
    if (clock == 3)
        screen.render(x - 8, y - 8, 11 + 11 * 32, col, 0);
    if (clock == 2)
        screen.render(x - 8, y - 8, 12 + 11 * 32, col, 0);
    //730pm 530pm
    if (clock == 1)
        screen.render(x - 8, y - 8, 13 + 11 * 32, col, 0);
    if (clock == -1)
        screen.render(x - 8, y - 8, 14 + 11 * 32, col, 0);
}
}

そして、はい、これはきれいではありません。これは基本的に、game.java から clock.java に int をプルできなかったときに試したものです。これは、送信をテストするためのものでした。プレイヤーがインベントリから取り出すまで clock.java が作成されないため、別々のティックを使用することはできません。

これがうまくいくことを願っています。必要な場合は、さらにコードを提供できます。

4

1 に答える 1

4

risingは false であるため、else ブランチが実行されてclocknull になり、NullPointerException がスローされます。

ところで、tick メソッドは次のように記述できます。

public void tick(){
    if (time <= 0) clock = 1;
    else if (time <= 8) clock = time;
}
于 2013-02-16T09:17:50.307 に答える