0

同じ CopyOnWriteArrayList にアクセスするすべてのメソッド render、update、および majorUpdate が実行されると、render は正常に動作しますが、update および majorUpdate は CopyOnWriteArrayList の長さが 0 であると出力します。コードは次のとおりです。

package main.world.layer;

import main.world.tile.ITile;
import org.newdawn.slick.Graphics;

import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

public class Layer {
    private List<ITile> tiles = new CopyOnWriteArrayList<ITile>();

    public void add(ITile tile){
        tiles.add(tile);
    }

    public void remove(ITile tile){
        tiles.remove(tile);
    }

    public void render(ITile tile, Graphics graphics){
        tile.render(graphics);
    }

    public void render(Graphics graphics){
        for(ITile tile : tiles){
            render(tile, graphics);
        }
    }

    public List<ITile> getTiles() {
        return tiles;
    }

    public void majorUpdate(ITile tile){
        tile.onMajorUpdate();
    }

    public void majorUpdate(){
        System.out.println("MAJOR UPDATE! " + tiles.size());
        for(ITile tile : tiles){
            majorUpdate(tile);
            System.out.println("major update");
        }
    }

    public void update(ITile tile, int delta){
        tile.update(delta);
    }

    public void update(int delta){
        System.out.println("update " + tiles.size());
        for(ITile tile : tiles){
            update(tile, delta);
            System.out.println("update");
        }
    }
}
4

1 に答える 1

0

サイズがゼロとして印刷されている場合、tiles印刷対象はゼロです。ほとんどの場合、別のリストでレンダリング、更新、メジャーアップデートを実行しているときに、1 つのリストのサイズを出力しています。

于 2015-01-14T08:34:57.627 に答える