【问题标题】:Setting an object's property afterwards?之后设置对象的属性?
【发布时间】:2013-12-01 11:52:24
【问题描述】:

我正在尝试使用 KineticJs,并且想要拥有对象,因此我可以轻松处理元素。

这是我的代码。它不起作用,我不知道为什么。 (我真的不知道oop,只是学习)

 $(function(){     
    var stage = new Kinetic.Stage({
        container: 'gridalea',
        width: 172,
        height: 720
    });

    var color_layer = new Kinetic.Layer();
    var sh_layer = new Kinetic.Layer();

    var Left={
        light: {
            frame: function(){
                poly = new Kinetic.Polygon({
                    points: [70, 0, 0, 22, 0, 672, 70, 720, 70, 710, 6, 667, 6, 29, 70, 10, 70, 0],
                    stroke: 'white',
                    strokeWidth: 1
                });
                // add the shape to the layer
                color_layer.add(poly);
                stage.add(color_layer); 
            },
            fill: function(color){
                poly.setFill(color);
            }
        },
        dark: {
            frame: function(){
                var poly = new Kinetic.Polygon({
                    points: [6, 193, 6, 667, 11, 663, 11, 440, 6, 437, 6, 427, 11, 425, 11, 193, 6, 193],
                    stroke: 'white',
                    strokeWidth: 1
                });
                // add the shape to the layer
                color_layer.add(poly);
                stage.add(color_layer); 
            },
            fill: function(color){
                poly.setFill(color);
            }
        },
    }
    Left.light.frame();
    Left.light.fill('red');
});

我打算做的是能够在创建多边形后设置它们的填充颜色,我必须处理图像的很多部分,所以我使用对象来简化它。你能指出我的代码的问题吗? 我很抱歉,我知道我很瘸,我只是需要你的帮助。

编辑:当我添加

Left.dark.frame();
Left.dark.fill('red');

之后

Left.light.frame();
Left.light.fill('red');

Left.light.frame() 变成红色,但 Left.dark.frame() 没有

【问题讨论】:

  • 你有一个额外的逗号和缺少分号(fill: function 之后和Left.light.frame(); 之前的代码末尾),尽管我不认为这是问题所在。
  • 谢谢,但这并没有解决我的问题
  • 也许您应该先输入fill(),然后再输入frame()
  • 感谢帮助我解决实际问题

标签: javascript oop canvas html5-canvas kineticjs


【解决方案1】:

问题是我必须在填充之后添加图层到舞台!

stage.add(color_layer);

走到最底层

【讨论】:

    【解决方案2】:

    您的fill 函数的末尾应该有color_layer.draw()stage.draw()

    为什么它如您的编辑中提到的那样工作:

    基本上,当您在调用Left.light 之后调用Left.dark.frame() 时,您正在向图层添加另一个对象并尝试将图层添加回舞台,其中之一(我现在不确定哪个可以查看源代码)正在调用draw() 方法。我的猜测很可能是再次将图层添加到舞台的调用,这会刷新您的画布并且您会看到 Light 多边形的填充颜色。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-11
      • 1970-01-01
      • 1970-01-01
      • 2016-09-23
      • 2018-12-02
      相关资源
      最近更新 更多