【问题标题】:Google Cast Game Manager ReceiverGoogle Cast 游戏管理器接收器
【发布时间】:2015-08-31 08:41:30
【问题描述】:

我在尝试启动并运行 Cast Game Manager 时遇到了一个不知道如何修复的错误。我已经能够连接游戏管理器,并获得状态更新。在此之后,我尝试发送 PlayerAvailableRequest。接收方更新游戏调试 ui 以指示请求成功,但随后在尝试将其响应消息发送给发送方时崩溃。下面我附上了相关的控制台日志,以及 GameDebug UI 的图片。请让我知道我是否遗漏了什么。

 [ 59.643s] [cast.receiver.IpcChannel] Received message: {"data":"{\"type\":1100,\"requestId\":1}","namespace":"urn:x-cast:com.google.cast.games","senderId":"219:C97BEC14-B8AF-4BD1-855A-C55CEED51E43"}
cast_receiver.js:37  [ 59.650s] [cast.receiver.CastMessageBus] Dispatching CastMessageBus message
cast_receiver.js:37  [ 59.669s] [cast.receiver.IpcChannel] IPC message sent: {"namespace":"urn:x-cast:com.google.cast.games","senderId":"219:C97BEC14-B8AF-4BD1-855A-C55CEED51E43","data":"{\"type\":1,\"requestId\":1,\"playerToken\":null,\"statusCode\":0,\"errorDescription\":\"\",\"gameplayState\":1,\"lobbyState\":1,\"players\":[{\"playerId\":\":0\",\"playerState\":1,\"playerData\":null}],\"gameData\":null,\"gameStatusText\":\"\",\"gameManagerConfig\":{\"applicationName\":\"Code Cast\",\"maxPlayers\":2,\"version\":\"1.0.0\"},\"extraMessageData\":null}"}
cast_receiver.js:37  [ 59.689s] [cast.receiver.IpcChannel] Received message: {"data":"{\"type\":1,\"requestId\":2}","namespace":"urn:x-cast:com.google.cast.games","senderId":"219:C97BEC14-B8AF-4BD1-855A-C55CEED51E43"}
cast_receiver.js:37  [ 59.696s] [cast.receiver.CastMessageBus] Dispatching CastMessageBus message
cast_games_receiver.js:220 Uncaught TypeError: Cannot read property 'call' of undefined cast_games_receiver.js:220 b.Zbcast_games_receiver.js:221 l.f.EventTarget.dkcast_games_receiver.js:218 b.dispatchEventcast_games_receiver.js:261 Qcast_games_receiver.js:255 cast.receiver.games.j.Clcast_receiver.js:22 ybcast_receiver.js:21 g.dispatchEventcast_receiver.js:33 R.gbcast_receiver.js:22 ybcast_receiver.js:21 g.dispatchEventcast_receiver.js:31 g.hbcast_receiver.js:22 ybcast_receiver.js:21 g.dispatchEventcast_receiver.js:28 g.hb

编辑:我已通过 addGameManagerListener 将其范围缩小到使用 GameManagerListener。我已经让我的听众像示例一样简单,但它仍然崩溃。

Game Manager Listener Object:
MyGame = function () {
};

MyGame.prototype.onPlayerAvailable = function (event) {
    console.log('Player ' + event.playerInfo.playerId + ' is available');
};

MyGame.prototype.onPlayerReady = function () { };
MyGame.prototype.onPlayerIdle = function () { };
MyGame.prototype.onPlayerPlaying = function () { };
MyGame.prototype.onPlayerDropped = function () { };
MyGame.prototype.onPlayerQuit = function () { };
MyGame.prototype.onGetGameManagerStatus = function () { };
MyGame.prototype.onGameMessage = function () { };
MyGame.prototype.onGameLoading = function () { };
MyGame.prototype.onGameRunning = function () { };
MyGame.prototype.onGamePaused = function () { };
MyGame.prototype.onGameShowingInfoScreen = function () { };
MyGame.prototype.onLobbyOpen = function () { };
MyGame.prototype.onLobbyClosed = function () { };

line adding it:
this.mMyGame = new MyGame();
this.mCastGameManager.addGameManagerListener(this.mMyGame);

【问题讨论】:

    标签: javascript google-cast


    【解决方案1】:

    抱歉 - 这是因为 documentation guide 中的错误:

    • GameManagerListener 示例缺少其他方法 覆盖。
    • 在结尾的分号前有一个“)” 实现 GameManager 属性的示例。

    对于addGameManagerListener,实现https://developers.google.com/cast/docs/reference/receiver/cast.receiver.games.GameManagerListener中列出的GameManagerListener的所有方法

    例如,你需要添加:

    MyGame.prototype.onGameMessageReceived = function() {};
    MyGame.prototype.onGameDataChanged = function() {};
    MyGame.prototype.onPlayerDataChanged = function() {};
    MyGame.prototype.onGameDataChanged = function() {};
    MyGame.prototype.onGameStatusTextChanged = function() {};
    

    至于实现定义的 GameManager 属性的回调,请确保没有语法错误,例如

    gameManager.onPlayerAvailable = function(event) {
        console.log('Player ' + event.playerInfo.playerId + ' is available');
    };
    

    而不是

    gameManager.onPlayerAvailable = function(event) {
        console.log('Player ' + event.playerInfo.playerId + ' is available');
    });
    

    再次道歉 - 我们会修复文档。 :)

    【讨论】:

    • 现在 Cast SDK 的 Games Manager API 已被弃用,请问我们使用什么库来创建 Google Cast 游戏?
    【解决方案2】:

    好的,我将我的解决方案发布给其他遇到相同问题的实施此问题的人。

    在文档中指出, "使用 GameManager 设置请求事件回调的三种方法。

    • 为特定请求调用 addEventListener 方法。
    • 为定义的 GameManager 属性实现回调。
    • 调用 addGameManagerListener 方法提供一个对象(实现 GameManagerListener)来处理所有请求。 "

    事实证明,似乎只有 addEventListener 方法有效。当我创建一个类并将其添加为侦听器时,我得到了我在原始问题中发布的错误。当我实现回调时,没有被击中。我不确定这是否是由于我正在做的事情,但是,再次,似乎只有 addEventListener 有效。

    【讨论】:

    • 您知道现在 Cast SDK 的游戏管理器 API 已被弃用,是否还有替代 API?
    猜你喜欢
    • 2014-03-02
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    • 2019-04-11
    • 2021-12-10
    • 2018-03-21
    相关资源
    最近更新 更多