RequireJS和类继承

RequireJS and Class Inheritance

本文关键字:继承 RequireJS      更新时间:2023-09-26

我正在尝试使用RequireJS模块在Javascript中实现经典继承,以使用HTML5构建游戏引擎。我试过使用John Resig的Class.js,但它似乎不像我预期的那样工作。这是我的Github项目代表,如果你下载文件并在客户端文件夹中打开index.html,该应用程序可以在没有服务器的情况下运行。

在应用中,我创建了一个名为Entity的基类。实体是游戏中所有对象的基类,并由许多其他类扩展。精灵类扩展了实体类并包含了动画方法。玩家类扩展了精灵类。

当我创建一个名为Image的类来扩展Entity类时,出现了这个问题。Player和Image类都扩展了实体(玩家是实体->精灵->玩家),但是当玩家设置速度时,它也会影响图像的实例。我添加了一个console.log,在图像的思考函数(游戏循环滴答)中打印物体的速度。如果你按下方向键让玩家四处走动,你会看到玩家的速度来自图像思考打印。

它们不应该是具有单独属性的独立对象吗?这就是我想要的。关于我做错了什么或链接/模式来完成适当的继承的任何想法?

Entity#velocity应该在构造函数中初始化,而不是在"类定义"中初始化(尽管JavaScript中没有这样的事情,即使使用John Resig的class .js等辅助库)。

所有JavaScript变量和属性都只是指向内存中不同位置的指针。您的代码只是简单地更改了velocity属性的x属性,而没有实际更改velocity的引用,因此为什么属性x的更改会镜像到其他对象中。

所以不是:

var Entity = Class.extend({
  velocity: { x: 0, y: 0 },
  init: function () { }
});

你可以这样做:

var Entity = Class.extend({
  init: function () {
    this.velocity = { x: 0, y: 0 };
  }
});