2012-12-03 30 views
0

如果我在画布中绘制一个新元素,如何保存此元素的位置?如何跟踪画布中的元素位置?

Context2d context = canvas.getContext2d(); 
context.setStrokeStyle("black"); 
context.arc(50, 50, 20, 0, Math.PI*2); 
context.stroke(); 

或者另外:我怎么能在所有保持跟踪我创建了一个元素?是否有某种堆叠需要放置?我怎样才能保存刚创建的圆形元素供以后参考?

回答

2

我的理解是,您不会像在更改画布一样将对象保存到画布上。你创建的圆只是作为一组命令到画布,如果你想以某种方式存储它,你需要创建一个存储它的对象。

当我学习画布并写了一个小游戏时,我会创建一个具有draw(Canvas c)函数的对象。在这个函数中,我会做任何必要的操作来画在画布上,并且保持稍后可以调用的X,Y坐标。

public class SomeDrawableObject implements Drawable { 
    private float X; 
    private float Y; 

    public SomeDrawableObject(float X, float Y) { 
    this.X = X; 
    this.Y = Y; 
    } 

    @Override 
    public void draw(Canvas c) { 
    c.drawCircle(...); 
    //or c.drawWHATEVER(...); 
    } 

    public float getX() { 
    return X; 
    } 
    //etc. 
} 

然后从任何类修改画布,你可以保持SomeDrawableObject集合,并知道已被置于画布上和召回无论你已经保存在类职位/颜色/一切。您也可以扩展课程等。

+0

好吧,我明白了。但我想知道我是否正朝着正确的方向前进:我的目标是创建可以用鼠标绘制的drawable(椭圆,圆形,矩形),并且以后也可以拖动。这就是为什么我必须存储职位。当然拖放也应该可以在画布上看到。那么我是不是必须总是重新绘制那个对象所在的旧区域,然后再绘制新的区域?没有更好的方法吗? – membersound

+0

不是我意识到不幸。游戏GUI循环如你所描述的那样工作:重绘画布并从那里构建事物。我会说你在正确的轨道上,但也许比你讨价还价得多。通过扫描形状列表,然后使用Android'onTouch'事件来计算拖动,您可以检测到您的点击是否位于对象的区域内 – Grambot

0

绘图是暂时的:一旦你画出来,它就消失了。将形状对象存储在别处。然后,当您调用绘图方法时,请使用对形状对象的引用,检索其参数。