0

我有以下类定义:

var gameEngine = WinJS.Namespace.define("GameEngine", {    

interaction: WinJS.Class.define(
    function() {},
    {
        destination: 0,
        currentXPos: 0,
        handleTouch: function handleTouch(event) {
            this.destination = event.x;
            console.log("New destination: " + this.destination);
        }
    }
),
...

我正在尝试在handleTouch这里使用该功能:

WinJS.Namespace.define("drawScreen", {

DrawScreen: WinJS.Class.define(function DrawScreen() {
    canvas.addEventListener("MSPointerUp", gameEngine.interaction.handleTouch, false);

...

问题似乎gameEngine.interaction.handleTouch是未定义的。显然,我没有interaction正确声明或调用该类-但是查看此处的文档,我看不出我做错了什么。

4

2 回答 2

0

第一个参数WinJS.Class.define(是构造函数,而第二个是成员属性和函数。试试这个:

interaction: WinJS.Class.define(
    function() {},
    {
        // initialize your class here
    }, 
    {
        destination: 0,
        currentXPos: 0,
        handleTouch: function handleTouch(event) {
            this.destination = event.x;
            console.log("New destination: " + this.destination);
        }
    }
),
...
于 2013-02-25T18:53:22.513 回答
0

由于您已gameEngine.interaction在实例声明中定义为具有成员的类,因此您需要首先实例化它的实例。因此,您需要执行以下操作:

var gameInteraction = new gameEngine.interaction();
canvas.addEventListener("MSPointerUp", gameInteraction.handleTouch, false);

如果您interaction直接在命名空间内而不是在类中定义所有类成员,则不需要实例化它。另一种选择是直接在您的命名空间中实例化该类,例如:

var gameEngine = WinJS.Namespace.define("GameEngine", {    

interaction: new WinJS.Class.define(
...
于 2013-02-25T18:55:15.350 回答