var textInputGetRect = function (node) {
var rc = cc.rect(node.x,node.y,node.width,node.height);
rc.x -= rc.width / 2;
rc.y -= rc.height / 2;
return rc;
};
var InputComponent = cc.Layer.extend({
_trackNode:null,_beginPos:null,ctor:function () {
this._super();
if( 'touches' in cc.sys.capabilities ){
cc.eventManager.addListener({
event: cc.EventListener.TOUCH_ALL_AT_ONCE,onTouchesEnded: this.onTouchesEnded
},this);
} else if ('mouse' in cc.sys.capabilities )
cc.eventManager.addListener({
event: cc.EventListener.MOUSE,onMouseUp: this.onMouseUp
},this);
},onClickTrackNode:function (clicked) {
},onTouchesEnded:function (touches,event) {
var target = event.getCurrentTarget();
if (!target._trackNode)
return;
// grab first touch
if(touches.length == 0)
return;
var touch = touches[0];
var point = touch.getLocation();
var rect = textInputGetRect(target._trackNode);
target.onClickTrackNode(cc.rectContainsPoint(rect,point));
//cc.log("----------------------------------");
},onMouseUp:function (event) {
var target = event.getCurrentTarget();
if (!target._trackNode)
return;
var point = event.getLocation();
var rect = textInputGetRect(target._trackNode);
target.onClickTrackNode(cc.rectContainsPoint(rect,point));
}
});
var TextFieldTTFDefaultTest = InputComponent.extend({
_charLimit:20,_textField:null,ctor:function () {
this._super();
},onEnter:function () {
this._super();
var winSize = cc.director.getWinSize();
this._textField = new cc.TextFieldTTF("<click here for input>","Arial",36);
this._textField.setColor(cc.color(0xff0000));
this.addChild(this._textField);
//this._textField.setDelegate(this);
this._textField.x = winSize.width / 2;
this._textField.y = winSize.height /3;
this._trackNode = this._textField;
},callbackRemoveNodeWhenDidAction:function (node) {
this.removeChild(node,true);
},onClickTrackNode:function (clicked) {
var textField = this._trackNode;
if (clicked) {
// TextFieldTTFTest be clicked
//cc.log("TextFieldTTFDefaultTest:CCTextFieldTTF attachWithIME");
textField.attachWithIME();
} else {
// TextFieldTTFTest not be clicked
//cc.log("TextFieldTTFDefaultTest:CCTextFieldTTF detachWithIME");
textField.detachWithIME();
}
},onTextFieldAttachWithIME:function (sender) {
return false;
},onTextFieldDetachWithIME:function (sender) {
return false;
},onTextFieldInsertText:function (sender,text,len) {
// if insert enter,treat as default to detach with ime
if ('\n' == text) {
return false;
}
// if the textfield's char count more than m_nCharLimit,doesn't insert text anymore.
if (sender.getCharCount() >= this._charLimit) {
return true;
}
return false;
},onTextFieldDeleteBackward:function (sender,delText,len) {
// create a delete text sprite and do some action
// var label = new cc.LabelTTF(delText,"Arial",36);
// this.addChild(label);
//
// var winSize = cc.director.getWinSize();
// var endPos = cc.p(-winSize.width / 4.0,winSize.height * (0.5 + Math.random() / 2.0));
//
// label.x = endPos.x;
// label.y = endPos.y;
return false;
},onDraw:function (sender) {
return false;
}
});
原文链接:https://www.f2er.com/cocos2dx/338566.html