0

Eclipse は、非静的フィールド Art.instance への静的参照を作成できないと言います。静的コンテキストから Art.instance を呼び出していると思うのはなぜですか?

TDRenderer 自体は次のように呼び出されます。

renderer = new TDRenderer();

TDRenderer.java:

package towerDefense;

import java.awt.Graphics;
import java.awt.Image;

public class TDRenderer {

    public Art art;

    public TDRenderer()
    {
        art = Art.instance;
    }

    public void render(Graphics g)
    {
        for(int i = 0; i < 32; i++)
        {
            for(int j = 0; j < 24; j++)
            {
                Image itd = (Image)(art.sprites[art.level1.tiles[i][j].type]);
                g.drawImage(itd, itd.getWidth(null), itd.getHeight(null), null);
            }
        }
    }
}
4

3 に答える 3

4

静的なコンテキストにいるわけではありません。それinstanceはの静的フィールドではありませんが、それを静的であるかのように使用しようとしているArtことを意味します。Art.instance

于 2012-03-01T22:35:29.933 に答える
0
    public class TDRenderer {   
     public Art art;

        public TDRenderer()
        {
            art = Art.instance;
        }
//so on..

仮定 1 -Art.instancestaticインスタンスです。

artその場合は、ローカル変数を次のTDRendererように宣言する必要がありますpublic static Art art;

それでは、冗長で役に立ちません。Art.instance を必要なところに直接参照してみてはいかがでしょうか。

于 2012-03-01T22:40:52.587 に答える
0

classinstanceでプロパティを呼び出しています。Art

静的でない場合 (つまり、クラス変数) は、Artクラスからインスタンス化されたオブジェクト内で参照されることを期待しているため、値はありません。

どこからでも参照できる単一の値Artをインポートする場合は、staticプレフィックスをinstance宣言の前に置き、その値をArtファイルに指定します。instance特定のオブジェクトから変数にアクセスする場合は、オブジェクトを作成し、作成したオブジェクトのプロパティをArt参照する必要があります。instance

于 2012-03-01T22:36:47.473 に答える