2013-02-08 9 views
0

미안하지만 정말 바보 같은 질문입니다. KineticJS를 사용하는 방법을 배우려고하고 있으며 셰이프 대신 정적 이미지를 사용하는 자습서 (http://www.html5canvastutorials.com/labs/html5-canvas-star-spinner/)를 수정하려고합니다. 가치가있는 것을 위해 Glenn Beck 머리의 PNG를 움직이게하려고 노력하고 있습니다 (여기도 실제로는 없습니다).객체에는 아무런 메소드가 없습니다.

지금까지 오류의 무리를 통해 뒤죽박죽했지만 내가 함께 붙어 점점 계속 :

"catch되지 않은 형식 오류 개체 #가있는 방법 '을 onFrame'이 없다"내가 여기에있는 개체/방법에 대한 여러 질문을 읽었습니다 나는 문제가 무엇인지 이해하고 생각하면서 SO 및 다른 사이트와, 나는 그것을 해결하는 방법을 잘 모르겠어요 :

object Object has no method

JavaScript object has no method

contains is object has no method?

"이해할 수 없음"오류는 호출 할 수있는 기능이 없음을 의미합니다. 확실히 "onFrame"은 Kinetic 내부에 있지만 ..? 나는 그들이 3.8.X (튜토리얼)와 4.X (내가 사용하고있는 라이브러리) 사이에서 이름을 바꿨는지 알아보기 위해 Kinetic 문서를 살펴 보았지만 마치 그들이 한 것처럼 보이지 않았다. 여기

내 코드 :

<head> 
    <script src="http://test.XXXXX.com/js/kinetic-v4.3.2.js"></script> 
    <script> 
     function animate(animatedLayer, beck, frame){ 
      var canvas = animatedLayer.getCanvas(); 
      var context = animatedLayer.getContext(); 

      // update 
      var angularFriction = 0.2; 
      var angularVelocityChange = beck.angularVelocity * frame.timeDiff * (1 - angularFriction)/ 1000; 
      beck.angularVelocity -= angularVelocityChange; 

      if (beck.controlled) { 
       beck.angularVelocity = (beck.rotation - beck.lastRotation) * 1000/frame.timeDiff; 
       beck.lastRotation = beck.rotation; 
      } 
      else { 
       beck.rotate(frame.timeDiff * beck.angularVelocity/1000); 
       beck.lastRotation = beck.rotation; 
      } 

      // draw 
      animatedLayer.draw(); 
     } 

     window.onload = function(){ 
      console.log('stage =', stage); // DEBUG 
      var stage = new Kinetic.Stage({ container: "container", width: 240, height: 320 }); 
      console.log('stage =', stage); // DEBUG 
      var backgroundLayer = new Kinetic.Layer(); 
      var animatedLayer = new Kinetic.Layer(); 


      var beck = new Image(); 
       beck.onload = function() { 

        var beck = new Kinetic.Image({ 
         x: 240, 
         y: stage.getHeight()/2 - 59, 
         image: beckHead, 
         width: 150, 
         height: 230 
        }); 
       beckHead.src = "http://test.XXXXX.com/i/beckhead.png"; 
       animatedLayer.add(beck); 
      }; 



      stage.on("mousedown", function(evt){ 
       this.angularVelocity = 0; 
       this.controlled = true; 
      }); 

      // add listeners to container 
      stage.on("mouseup", function(){ 
       beck.controlled = false; 
      }, false); 

      stage.on("mouseout", function(){ 
       beck.controlled = false; 
      }, false); 

      stage.on("mousemove", function(){ 
       if (beck.controlled) { 

        var mousePos = stage.getMousePosition(); 
        var x = (stage.width/2) - mousePos.x; 
        var y = (stage.height/2) - mousePos.y; 
        beck.rotation = 0.5 * Math.PI + Math.atan(y/x); 

        if (mousePos.x <= stage.width/2) { 
         beck.rotation += Math.PI; 
        } 
       } 
      }, false); 


      stage.add(backgroundLayer); 
      stage.add(animatedLayer); 

      // draw background 
      var context = backgroundLayer.getContext(); 
      context.save(); 
      context.beginPath(); 
      context.moveTo(stage.width/2, stage.height/2); 
      context.lineTo(stage.width/2, stage.height); 
      context.strokeStyle = "#555"; 
      context.lineWidth = 4; 
      context.stroke(); 
      context.restore(); 

      stage.onFrame(function(frame){ 
      console.log("onFrame fired") 
       animate(animatedLayer, beck, frame); 
      }); 


      stage.start(); 
     }; 
    </script> 
</head> 
<body onmousedown="return false;"> 
    <div id="container"><canvas id="container"></canvas> 
    </div> 

</body> 
+0

예제가 업데이트 된 것으로 보입니다. 나는 저자가 너를 경청한다 것을 나는 생각한다. – allenhwkim

+0

하하! 도와 주셔서 감사합니다! :디 – DRKMTTR

답변

1

이 오래된 예는 버전 3.8.4

<script src="http://www.html5canvastutorials.com/libraries/kinetic-v3.8.4.js"> 

를 사용하고, 현재의 버전은 현재> 4.3

<script src="http://www.html5canvastutorials.com/libraries/kinetic-v4.3.0-beta2.js"></script> 

인 버전에는 Stage # onFrame 및 Stage # start와 같은 메소드가 없습니다.

이 예제는 http://www.html5canvastutorials.com/kineticjs/html5-canvas-kineticjs-rotation-animation-tutorial/을 기반으로 한 다음 stage.on ("mouseup/down/move/out")을 추가하여 마우스 움직임을 감지하고 애니메이션에 영향을 줄 수 있습니다.

완벽한 예는 이전 예제를 새로운 버전으로 변환하는 것입니다.이 예제는 앞으로 시도 할 수 있습니다.

관련 문제