我有一个问题,我试图解决将近2天。 (最后切换到OpenGL:D) 无论如何......我有Canvas,我正在尝试做一个简单的蛇游戏。只是为了这个问题想象我们的蛇是由5x5像素的矩形组成的,他正在离开小道(没有空地)并从0,50位置向右移动......这里是代码:
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();
}
}
}
这是输出:
并不是全部,当它有点移动时...意味着你所看到的是向右侧移动所以它实际上不会站在同一个地方......
如果您知道为什么会这样,请告诉我!
答案 0 :(得分:0)
在画布中,有一个可重用的功能,实际上只是在画布中的任何内容上添加新的绘图,因此如果你当时正在绘制1个方格,下次你将拥有+1之前的任何东西,如果你不喜欢不想这样,你想要从头开始完全操纵每一个画,只需在开始画之前添加这行代码
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
它将清除您在画布的先前状态中所拥有的任何内容,并且您可以再次开始绘制您想要的任何内容......
希望它有帮助!
问候!