【问题标题】:Kinetic JS Image layering and Animation issueKinetic JS图像分层和动画问题
【发布时间】:2014-04-29 12:12:25
【问题描述】:

我正在尝试旋转我的多个图像层并为其设置动画。问题是当我在其中一张图像上调用动画旋转功能时,我的调试器说图像没有旋转功能。这是我得到的

var stage = new Kinetic.Stage({
    container: 'container',
    width: 300,
    height: 300
  });
  var layer1 = new Kinetic.Layer();
  var layer2 = new Kinetic.Layer();
  var layer3 = new Kinetic.Layer();
  var layer4 = new Kinetic.Layer();

  var logo4 = new Image();
  var logo3 = new Image();
  var logo2 = new Image();
  var logo1 = new Image();

  var logoRing, logoCross, logoCentreRings, logoCentre;

  var loadCount = 0;
 logo4.onload = function() {
     loadCount ++;
     if(loadCount == 4&& !loaded){
         loaded = true;
         putOnStage();
     }
 };

 logo3.onload = function() {
     loadCount ++;
     if(loadCount == 4&& !loaded){
         loaded = true;
         putOnStage();
     }
 };

 logo2.onload = function() {
     loadCount ++;
     if(loadCount == 4&& !loaded){
         loaded = true;
         putOnStage();
     }
 };

 logo1.onload = function() {
     loadCount ++;
     if(loadCount == 4 && !loaded){
         loaded = true;
         putOnStage();
     }
 };
 var loaded = false;


  logo4.src = "logo_ring.png";
  logo3.src = "logo_cross.png";
  logo2.src = "logo_centre_rings.png";
  logo1.src = "logo_centre.png";
  var logoPosX = 0;
  var logoPosY = 0;
  var logoWidth = 300;
  var logoHeight = 300;

  function putOnStage(){


       logoRing = new Kinetic.Image({
          x: 0,
          y: 0,
          image: logo4,
          width: logoWidth,
          height: logoHeight
        });
      layer4.add(logoRing);
      stage.add(layer4);


         logoCross = new Kinetic.Image({
          x: 0,
          y: 0,
          image: logo3,
          width: logoWidth,
          height: logoHeight
        });
      layer3.add(logoCross);
      stage.add(layer3);

         logoCentreRings = new Kinetic.Image({
          x: 0,
          y: 0,
          image: logo2,
          width: logoWidth,
          height: logoHeight
        });
      layer2.add(logoCentreRings);
      stage.add(layer2);


         logoCentre = new Kinetic.Image({
          x: 0,
          y: 0,
          image: logo1,
          width: logoWidth,
          height: logoHeight
        });
      layer1.add(logoCentre);
      stage.add(layer1);
  }
    var angularSpeed = 360 / 4;
    var rotateCentreRings = new Kinetic.Animation(function(frame) {
      var angleDiff = frame.timeDiff * angularSpeed / 1000;
      logoCross.rotate(angleDiff);
    }, layer2);

    rotateCentreRings.start();

【问题讨论】:

    标签: javascript kineticjs


    【解决方案1】:

    您使用的是哪个版本的 KineticJS?最新版本已弃用 rotateDeg,而只是让 rotate 使用度数而不是弧度。

    此外,您正在加载图像之前创建和启动动画。这就是为什么 logoCross 在您尝试旋转它时未定义的原因。将它移到putOnStage 内部,它应该可以工作。

    function putOnStage(){
    
    
         logoRing = new Kinetic.Image({
            x: 0,
            y: 0,
            image: logo4,
            width: logoWidth,
            height: logoHeight
          });
        layer4.add(logoRing);
        stage.add(layer4);
    
    
           logoCross = new Kinetic.Image({
            x: 0,
            y: 0,
            image: logo3,
            width: logoWidth,
            height: logoHeight
          });
        layer3.add(logoCross);
        stage.add(layer3);
    
           logoCentreRings = new Kinetic.Image({
            x: 0,
            y: 0,
            image: logo2,
            width: logoWidth,
            height: logoHeight
          });
        layer2.add(logoCentreRings);
        stage.add(layer2);
    
    
           logoCentre = new Kinetic.Image({
            x: 0,
            y: 0,
            image: logo1,
            width: logoWidth,
            height: logoHeight
          });
        layer1.add(logoCentre);
        stage.add(layer1);
        var angularSpeed = 360 / 4;
      var rotateCentreRings = new Kinetic.Animation(function(frame) {
        var angleDiff = frame.timeDiff * angularSpeed / 1000;
        logoCross.rotate(angleDiff);
      }, layer2);
    
      rotateCentreRings.start();
    }
    

    【讨论】:

    • 版本 5.0.1,我使用了 rotateDeg,它给了我“无法调用未定义的方法 'rotateDeg'”
    • 谢谢,我也选择了错误的图层来制作动画。 :) 但您的解决方案有所帮助
    猜你喜欢
    • 2012-05-10
    • 2014-02-28
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多