2

我只是让 socket.io 和 cocos2d-html5 工作。每次新客户端连接时,我都想在屏幕上放置一个新的 LabelTTF。随着应用程序的启动,我创建了一个主层,其中一个 Tilemaplayer 作为子层存储在 _tilemaplayer 中。

在我的主层上,我在 onEnter 中有以下代码:

var tilemap = new TilemapLayer();
this._tilemaplayer = tilemap;
this.addChild(tilemap);

socket = io.connect('hostname:port');
socket.on('connect', function(){
    socket.emit('setName', {name: 'Testname'})
})

socket.on('newClient', function(data){
    var testLabel = cc.LabelTTF.create(data.name, "Arial", 32);
    this._tilemaplayer.addChild(testLabel);
})

为什么这会给我一个 this._tilemaplayer 未定义的错误?我可以在主层的其他功能中访问它,为什么不在这里?

4

1 回答 1

2

我认为你的 socket.on 事件处理函数中的“this”不等于你的图层或场景的“this”。

您需要保存图层或场景的“this”的指针,代码如下:

var tilemap = new TilemapLayer();
this._tilemaplayer = tilemap;
this.addChild(tilemap);

socket = io.connect('hostname:port');
socket.on('connect', function(){
    socket.emit('setName', {name: 'Testname'})
});

_this = this;
socket.on('newClient', function(data){
    var testLabel = cc.LabelTTF.create(data.name, "Arial", 32);
    _this._tilemaplayer.addChild(testLabel);
})
于 2013-04-22T02:36:42.827 回答