2016-08-14 8 views
0

私はAndroidに興味がありました。私は新しいので、スクロールバックグラウンドを作成しました。スプライトを入れたいのですが、すでにキャラクタークラスとスクロールバックグラウンド。スプライトを右に移動したいのですが、GamePanelでエラーが発生しています。スクロールバックグラウンドで動いているスプライトを作成しようとしています

エラーは非静的メソッド(android.graphics.Canvas)は静的コンテキストから参照できません。何を意味しますか?これを修正する方法とスプライトを右に実行するようにしますか?

ここに私のコードです:

public class GamePanel extends SurfaceView implements SurfaceHolder.Callback { 

public static final int WIDTH = 856; 
public static final int HEIGHT = 480; 
public static int Score =0; 
public static int Highscore; 
private MainThread thread; 
private Background bg; 
private Bitmap bmp; 

public GamePanel(Context context) { 
    super(context); 
    getHolder().addCallback(this); 
    thread = new MainThread(getHolder(), this); 
    setFocusable(true); 

} 

@Override 
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 

} 
@Override 
public void surfaceDestroyed(SurfaceHolder holder) { 

    boolean retry = true; 
    while(retry) { 
     try { 
      thread.setRunning(false); 
      thread.join(); 
     }catch(InterruptedException e) { 
      e.printStackTrace(); 
      retry = false; 
     } 
    } 
} 
@Override 
public void surfaceCreated(SurfaceHolder holder) { 
    bg = new Background(BitmapFactory.decodeResource(getResources(), R.drawable.gamebg)); 
    bmp = BitmapFactory.decodeResource(getResources(), R.drawable.deer); 
    bg.setVector(-5); 
    thread.setRunning(true); 
    thread.start(); 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    return super.onTouchEvent(event); 
} 
public void update() { 
    Score += 2; 
    if (Score > Highscore) { 
     Highscore = Score; 
    } 
    bg.update(); 
} 
@SuppressLint("MissingSuperCall") 
@Override 
public void draw(Canvas canvas) { 
    final float scaleFactorX = (float)getWidth()/WIDTH; 
    final float scaleFactorY = (float)getHeight()/HEIGHT; 
    if(canvas !=null) { 
     final int savedState = canvas.save(); 
     canvas.scale(scaleFactorX, scaleFactorY); 
     bg.draw(canvas); 
     canvas.restoreToCount(savedState); 

     Paint textpaint = new Paint(); 
     textpaint.setTextSize(30); 
     canvas.drawText("Score:" +String.valueOf(Score), 0, 32, textpaint); 
     canvas.drawText("High Score: "+String.valueOf(Highscore), 0, 64, textpaint); 

    } 
} 
@Override 
protected void onDraw(Canvas canvas) { 
    Character.onDraw(canvas); 
} 

}

答えて

0

あなたは、静的な文脈から非静的メソッドにアクセスすることはできません。したがって、GamePanelクラスの関数またはオブジェクトにアクセスする場合は、GamePanelクラスのオブジェクトインスタンスを使用してこのメ​​ンバーを呼び出す必要があります。

単なる例:

間違っ:正しい

GamePanel.draw(canvas); 

GamePanel gamePanel = new GamePanel(this); 
gamePanel.draw(canvas); 
関連する問題