0

私のゲームで助けが必要です! 私はビットマップを使って私のプレイモデルを描画しています。私はontouchイベントでモデルを変更したいのですが、動作していません。私が間違っていることはわかりません:( まずはplayerclassは私は、ビットマップを作成しています:キャンバスのビットマップをinvalidate()で再描画できません。

private Player player; 

private int PlayerSprite = R.drawable.test;; 
private int Playerhight = 120; 
private int Playerwight = 115; 
private int PlayerFrames = 8; 

@Override 
public void surfaceCreated(SurfaceHolder holder) { 
    player = new Player(BitmapFactory.decodeResource(getResources(), PlayerSprite), Playerwight, Playerhight, PlayerFrames); 

    invalidate(); 
    thread.setRunning(true); 
    thread.start(); 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if(event.getAction()==MotionEvent.ACTION_DOWN){ 

      PlayerSprite = R.drawable.sliden; 
      Playerhight = 52; 
      Playerwight = 130; 
      PlayerFrames = 1; 

     return true; 
    } 
    if(event.getAction()==MotionEvent.ACTION_UP) 
    { 
     player.setUp(false); 
     PlayerSprite = R.drawable.test; 
     Playerhight = 120; 
     Playerwight = 115; 
     PlayerFrames = 8; 
     return true; 
    } 

    return super.onTouchEvent(event); 
} 

public void update() { 
    if (player.getPlaying() == true && State == STATE.INGAME) { 
     player.update(); 

@Override 
public void draw(Canvas canvas) { 
    super.draw(canvas); 
    final float scaleFactorX = getWidth()/(WIDTH*1.f); 
    final float scaleFactorY = getHeight()/(HEIGHT*1.f); 
    if (canvas != null && State == STATE.INGAME) { 
     final int savedState = canvas.save(); 
     canvas.scale(scaleFactorX, scaleFactorY); 
     player.draw(canvas); 
     canvas.restoreToCount(savedState); 
     invalidate(); 
    } 
} 

私が欲しい:

public class Player extends GameObject{ 
private Bitmap spritesheet; 
private String scoreText; 
public int score; 
private double dya; 
private boolean up; 
private boolean playing; 
private Animation animation = new Animation(); 
private long startTime; 
public boolean jumpable = false; 
public boolean jumphigh; 
public boolean falldown; 
private int boden; 
private boolean sliden; 

public Player(Bitmap res, int w, int h, int numFrames) { 

    x = 100; 
    y = GamePanel.HEIGHT - GamePanel.HEIGHT/4 +26 ; 
    //y = GamePanel.HEIGHT - GamePanel.HEIGHT/4 - 100; 
    dy = 0; 
    score = 0; 
    height = h; 
    width = w; 
    boden = GamePanel.HEIGHT - GamePanel.HEIGHT/4 -100; 

    Bitmap[] image = new Bitmap[numFrames]; 
    spritesheet = res; 

    for (int i = 0; i < image.length; i++) 
    { 
     image[i] = Bitmap.createBitmap(spritesheet, i*width, 0, width, height); 
    } 
    animation.setFrames(image); 
    animation.setDelay(40); 
    startTime = System.nanoTime(); 
} 

public void setUp(boolean b){up = b;} 

public void update() 
{ 
    //score 
    long elapsed = (System.nanoTime()-startTime)/1000000; 
    if(elapsed>100) 
    { 
     score = score+7; 
     startTime = System.nanoTime(); 
     scoreText = ""+score ; 
    } 
    animation.update(); 
    if(up == true && jumpable == true){ 
     jumphigh = true; 
     // dy = -5; 
     // System.out.println(up); 
    }else{ 
     jumphigh = false; 

    } 
    if (jumphigh == true){ 
     dy = -5; 
    } 
    if (falldown == true){ 
     dy = 5; 
    } 

    if(dy>14)dy = 14; 
    if(dy<-14)dy = -14; 
    y += dy*2; 

    if (y >= boden){ 
     y = boden; 
     jumpable = true; 
     falldown = false; 
     dy = 0; 
    }else if (y <= 60){ 
     y= 60; 
     up = false ; 
     jumphigh = false; 
     falldown = true; 
     dy = 0; 

    } 
    if (y < GamePanel.HEIGHT - GamePanel.HEIGHT/4 -100){ 
     jumpable = false; 

    } 
} 
public void restart(){ 
    x = 100; 
    y = GamePanel.HEIGHT - GamePanel.HEIGHT/4 - 100; 
    dy = 0; 
    score = 0; 

} 
public void draw(Canvas canvas) 
{ 
    canvas.drawBitmap(animation.getImage(),x,y,null); 

    Paint paint = new Paint(); 
    paint.setTypeface(Typeface.create(Typeface.SANS_SERIF,Typeface.NORMAL)); 
    paint.setColor(Color.BLACK); 
    paint.setTextSize(50); 
    canvas.drawText(scoreText, 50 , 50 , paint); 

} 

public void setY(Canvas canvas){ 
    y = GamePanel.HEIGHT - GamePanel.HEIGHT/4 -20 ; 
    boden = GamePanel.HEIGHT - GamePanel.HEIGHT/4 -20 ; 
    draw(canvas); 
} 
public int getScore(){return score;} 
public void setSliden() {sliden = true; } 
public boolean getPlaying(){return playing;} 
public void setPlaying(boolean b){playing = b;} 
public void resetP(){ x = 100; 
    y = GamePanel.HEIGHT - GamePanel.HEIGHT/4 - 100; 
    dy = 0;} 
public void resetDYA(){dya = 0;} 
public void resetScore(){score = 0;} 

そして、ここでは、私は(私はあなたがこの質問のために必要な部分だけを与える)私のビットマップを呼んでいる私のGamePanelのコードですonTouchイベントでプレーヤのイメージを変更したいだけで、うまく動作しないようにしたいのです。

+0

将来コードフォーマットを整理してください –

答えて

0

invalidate()onTouchEvent(MotionEvent event)()に電話して、変更を確認してください。

onDraw()で無効化を呼び出さないと、永続的なループが発生し、アプリのパフォーマンスが低下します。

関連する問題