2014-02-11 101 views
0

我有一個問題,我想解決了近2天。 (它結束了切換到OpenGL的:d) 反正...我有帆布,我試圖做一個簡單的貪吃蛇遊戲。就爲了這個問題想象我們的蛇是從5×5像素矩形組成,他留下的蹤跡(沒有清算),並移動到從0開始,50位右...這裏是代碼:Android的帆布怪異移

public class Snake extends AnimationWallpaper { 

    @Override 
    public Engine onCreateEngine() { 
     return new SnakeEngine(); 
    } 

    class SnakeEngine extends AnimationEngine { 
     int i = 0; 
     Paint paint = new Paint(); 

     @Override 
     public void onCreate(SurfaceHolder surfaceHolder) { 
      super.onCreate(surfaceHolder); 

      // By default we don't get touch events, so enable them. 
      setTouchEventsEnabled(true); 
     } 

     @Override 
     public void onSurfaceChanged(SurfaceHolder holder, int format, 
            int width, int height) { 
      super.onSurfaceChanged(holder, format, width, height); 
     } 

     @Override 
     public void onOffsetsChanged(float xOffset, float yOffset, 
            float xOffsetStep, float yOffsetStep, int xPixelOffset, 
            int yPixelOffset) { 

      super.onOffsetsChanged(xOffset, yOffset, xOffsetStep, yOffsetStep, 
        xPixelOffset, yPixelOffset); 
     } 

     @Override 
     public Bundle onCommand(String action, int x, int y, int z, 
           Bundle extras, boolean resultRequested) { 
      if ("android.wallpaper.tap".equals(action)) { 
      } 
      return super.onCommand(action, x, y, z, extras, resultRequested); 
     } 

     @Override 
     protected void drawFrame() { 
      SurfaceHolder holder = getSurfaceHolder(); 

      Canvas c = null; 
      try { 
       c = holder.lockCanvas(); 
       if (c != null) { 
        draw(c); 
       } 
      } finally { 
       if (c != null) 
        holder.unlockCanvasAndPost(c); 
      } 
     } 

     void draw(Canvas c) { 
      //c.save(); 
      //c.drawColor(0xff000000); 

      paint.setAntiAlias(true); 

      // paint the fill 
      paint.setColor(Color.RED); 
      paint.setStyle(Paint.Style.FILL_AND_STROKE); 
      c.drawRect(i*5, 50, (i+1)*5, 55, paint); 

      //c.restore(); 
     } 

     @Override 
     protected void iteration() { 
      i++; 

      super.iteration(); 
     } 

    } 

} 

而且這裏是輸出: output

而這還不是全部,當它繪製它有點移...這意味着什麼,你看到的是轉移到右側所以它並不actualy在同一個地方站...

如果你有任何想法,爲什麼它的行爲,請告訴我!

回答

0

在畫布上,有一個可重用性功能,這實際上只是增加新的圖紙無論是在畫布上,因此,如果您繪製的時候1萬,下一次你將有什麼ü+1有過,如果你不想說,你想完全操縱從頭每一個平局,只需添加這行代碼之前就開始繪製

canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); 

這將清除任何你在畫布以前的狀態了,而你可以重新開始繪製任何你想要的......

希望它能幫助!

商祺!

+0

不,我不想明確,actualy我想oposite。但它應該畫直線而不是虛線......這就是我正在談論的「轉變」。 Srsly不知道問題在哪裏......我記錄了實際變量,他們很好......也許有一些DPI問題?不知道... – arenaq