【问题标题】:My Dart project doesn't works even if i compile it as js. It works only in dartium即使我将它编译为 js,我的 Dart 项目也不起作用。它仅适用于 dartium
【发布时间】:2012-11-17 20:15:23
【问题描述】:

我正在使用画布在 dart 中编写一个基本应用程序,它基本上有 2 个方块,其中一个从屏幕的右到左移动,第二个在用户按下箭头键时移动。

现在的问题是,当我在 Dartium 中尝试它时,它工作正常。但如果我尝试在 Chrome/Firefox 中打开它,我只能看到一个空矩形。

Dart 编辑器不会显示任何错误,即使我将其编译为 javascript 代码也是如此。

但是当我查看 Chrome 的 Inspect 元素的控制台时,会出现错误消息:

Uncaught TypeError: Object [object Window] has no method 'webkitRequestAnimationFrame$1' 

对该方法的调用在这里:

  void main() { 
  var maincharacter = new Player(10,10, 70, 70, "red");
  var secondCharacter = new Player(400,250, 50,50, "yellow");
  player = maincharacter;

  sprites = new Set();
  randomnumbergenerator = new Random();
  window.on.keyDown.add(myKeyDownEvent);
  CanvasElement element = query("canvas");  
  context = element.context2d;
  maincharacter.context = context;
  secondCharacter.context = context;
  maincharacter.type = 'player';
  sprites.add(maincharacter);
  sprites.add(secondCharacter);  
  window.webkitRequestAnimationFrame(animate);   
}

这里:

void animate(num time){
  enemyCreator(time);
  context.clearRect(0,0,400,400);  
  for(final sprite in sprites){
    if(!sprite.isPlayer()) {
      sprite.move(5, 0);
      // sprite.isOutside(0);
      if(!(sprite.posx<0)){ 
        query('#text').text = " Posx: ${sprite.posx.toString()} Length: ${sprites.length}";
        sprite.draw();
      } else {
        query('#text').text = "Destroyed";
        sprites.remove(sprite);
      }      
    } else {
      sprite.draw();
      query('#text').text = " Time: $counter Length: ${sprites.length}";
    }
  }
  window.webkitRequestAnimationFrame(animate);  
}

这是引发异常的 javascript 行:

 $.window().webkitRequestAnimationFrame$1($.animate)

有什么想法吗?

【问题讨论】:

  • 您可以在调用 requestAnimationFrame 的地方发布飞镖代码吗?

标签: google-chrome dart dartium


【解决方案1】:

该方法在 Dart 中称为 requestAnimationFrame() 而不是 webkitRequestAnimationFrame()http://api.dartlang.org/docs/bleeding_edge/dart_html/LocalWindow.html#requestAnimationFrame

int requestAnimationFrame(RequestAnimationFrameCallback 回调)

正如约翰所说,尝试:

window.requestAnimationFrame(animate);

您可能将 Dart 的方法与“原生”DOM 方法混淆了

Window.prototype.webkitRequestAnimationFrame

在 Dart 中你不指定那个前缀。

【讨论】:

    【解决方案2】:

    试试

    window.requestAnimationFrame(animate);
    

    改为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-10
      • 2021-12-25
      相关资源
      最近更新 更多