1

就像我在一个类中获得 CanvasRenderingContext2D 和 CanvasElement 一样,但是如何在其他类中使用我的 CanvasRenderingContext2D?

class Unnamed {
    CanvasElement c;
    CanvasRenderingContext ctx;

    Unnamed() {
        this.c = query('#canvas');
        this.ctx = this.c.getContext('2d');
    }
}

以及如何在其他类中使用我的未命名类中的 ctx?就像是:

class Box {
    num x,
        y;

    Box() {
        this.x = x;
        this.y = y;
    }

    void draw() {
        myCtxFromUnnamedClass.fillRect(this.x, this.y, 64, 64);
    }
}

对不起我的英语不好。

4

2 回答 2

1

最好的方法是将 CanvasRenderingContext2D 作为方法 draw 的参数传递。

class Box {
    num x, y;

    Box() {
        this.x = x;
        this.y = y;
    }

    void draw(CanvasRenderingContext ctx) {
        ctx.fillRect(this.x, this.y, 64, 64);
    }
}
于 2012-07-23T17:16:17.860 回答
0

首先,您的 Box() 不会编译为 noxy提供给Box()构造函数。

 void draw(CanvasRenderingContext ctx) {
        ctx.fillRect(this.x, this.y, 64, 64);
    }

ctx如果您作为Box' 构造函数参数传递,则没有任何意义。但要回答你的问题:

void main() { 
  Unnamed unnamed = new Unnamed();
  Box box = new Box(unnamed.ctx, 0, 0);
  box.draw();
}

class Unnamed {
  CanvasElement c;
  CanvasRenderingContext ctx;

  Unnamed() : c = query('#canvas') { // variable initialization should be done this way
    this.ctx = c.getContext('2d');
  }
}

class Box {
  num x, y;
  CanvasRenderingContext myCtxFromUnnamedClass;

  Box(this.myCtxFromUnnamedClass, this.x, this.y); // this is an idiomatic Dart constructor

  void draw() {
    myCtxFromUnnamedClass.fillRect(this.x, this.y, 64, 64);
  }
}
于 2012-07-23T21:19:51.033 回答