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クラスを正しく宣言または呼び出していません。しかし、ドキュメントhereを見ると、何が間違っているのかわかりません。

4

2 に答える 2

0

の最初の引数WinJS.Class.define(はコンストラクター関数で、2番目の引数はメンバーのプロパティと関数です。これを試して:

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 に答える