quick cocos2dx 官网台球怎么设置力的方向

4331人阅读
-- Author:&
SocketMessage = {}
net = require(&framework.cc.net.init&)
cc.utils = require(&framework.cc.utils.init&)
index10001 = 1
local isConnected &= false & --是否已建立连接
local isConnecting = false & --是否真正建立连接
local isInited & & = false & --是否初始化过连接
-- 消息体长度占4个字节
SocketMessage.BODY_LEN = 4
local ip = nil
local port = nil
-- 数据缓存
local buf = cc.utils.ByteArrayVarint.new(cc.utils.ByteArrayVarint.ENDIAN_BIG)
function SocketMessage:init()
local time = net.SocketTCP.getTime()
print(&socket time:& .. time)
local socket = net.SocketTCP.new()
socket:setName(&SocketTcp&)
socket:setTickTime(0.001)
socket:setReconnTime(6)
socket:setConnFailTime(4)
print(&version is &..net.SocketTCP._VERSION)
net.SocketTCP._DEBUG = true
socket:addEventListener(net.SocketTCP.EVENT_DATA, handler(self, self.tcpData))
socket:addEventListener(net.SocketTCP.EVENT_CLOSE, handler(self, self.tcpClose))
socket:addEventListener(net.SocketTCP.EVENT_CLOSED, handler(self, self.tcpClosed))
socket:addEventListener(net.SocketTCP.EVENT_CONNECTED, handler(self, self.tcpConnected))
socket:addEventListener(net.SocketTCP.EVENT_CONNECT_FAILURE, handler(self, self.tcpConnectedFail))
self.socket_ = socket
function SocketMessage:Connect(_ip,_port)
print(& SocketMessage:Connect! &)
isConnecting &= true
if isInited == false then &--
isInited = true
self:init()
port = _port
print(& 开始建立socket连接 &)
self.socket_:connect(ip, port, true)
--type 消息类型
function SocketMessage:SendSokcetData(_data,type)&
-- local s = json.encode(_data)
-- if Globe_print then
-- print(&发送消息& .. &_data[&cmd&] .. &==具体参数& ..s) &-- for test lz
local c_byte = cc.utils.ByteArray.new(cc.utils.ByteArrayVarint.ENDIAN_BIG)
c_byte:writeStringBytes(_data)
c_byte:setPos(1)
local content_len = c_byte:getAvailable()
print(& the content_len is &..content_len)
local msg_byte = cc.utils.ByteArray.new(cc.utils.ByteArrayVarint.ENDIAN_BIG)
-- msg_byte:writeUInt(content_len)
msg_byte:writeUShort(content_len+4)
msg_byte:writeUShort(type)
msg_byte:writeStringBytes(_data)
-- msg_byte:writeString(s)
-- msg_byte:setPos(1)
print(&发送数据 &_dada is &.._data)
if self.socket_.isConnected then & &--&
-- self.socket_:send(_data)
-- self.socket_:send(msg_byte:getPack(1, msg_byte:getAvailable()))
self.socket_:send(msg_byte:getPack())
print(& the pack is &..msg_byte:getPack())
print(&socket 已经断开,正在重新连接! &)
self.socket_:connect(ip, port, true)
function SocketMessage:CloseSocket()
if self.socket_.isConnected then
self.socket_:close()
function SocketMessage.getBaseBA()
return cc.utils.ByteArrayVarint.new(cc.utils.ByteArrayVarint.ENDIAN_BIG)
local function _tick(msg)
local __msgs = {}
print(&buf len is &..buf:getLen())
buf:setPos(buf:getLen()+1)
buf:writeBuf(msg)
buf:setPos(1)
while buf:getAvailable() &= SocketMessage.BODY_LEN do&
local bodyLen = buf:readUShort()
print(&bodyLen &length &is &..bodyLen)
local len2 = buf:readUShort()
& & print(& the data type &is &..len2)
if buf:getAvailable() & bodyLen-4 then
buf:setPos(buf:getPos() - SocketMessage.BODY_LEN)
print(& the data is &&..buf:readStringBytes(bodyLen-4))
local len3 = buf:getAvailable()
print(& the data len3 is &..len3)
-- __msgs[#__msgs+1] = buf:readStringBytes(bodyLen)
if buf:getAvailable() &= 0 then
buf = SocketMessage.getBaseBA()
local __tmp = SocketMessage.getBaseBA()
buf:readBytes(__tmp, 1, buf:getAvailable())
buf = __tmp
return __msgs
function SocketMessage:tcpData(event)
local msgs = _tick(event.data)
print_lua_table(msgs)
if event.data ~= nil then
-- print(&接收到的数据 &data is &..event.data)
-- local data = &cjson.decode(event.data)
-- if conditions then
-- Event_dispatchEvent(data.cmd,data)
print(& SocketMessage:tcpData is nil&)
function SocketMessage:tcpClose()
print(& socket连接已经关闭! &)
function SocketMessage:tcpConnected()
print(& socket连接建立成功! &)
self:SendSokcetData(&1&,1000)
function SocketMessage:tcpConnectedFail()
print(& socket连接已经断开! &)
function SocketMessage:onExit()
if self.socket_.isConnected then
self.socket_:close()
self.socket_:disconnect()
return SocketMessage
quick-cocos2dx中使用socketTCP这个类,这个是zengrong写的。
1.读取socket的规则是*a,*a的规则是有多少读取多少,没有最大值
2.有一个tick_time,这个时候,是程序获取socket内读取到多少东西的时间间隔,这个时间间隔一般设置1秒
3.socket通信,使用的是.ByteArray的数据,需要处理粘包和半包,这两个问题
&粘包的意思就是一次socket通信,同时发送了2个消息。客户端的表现就是获取的event.data中含有两个消息。
客户端的处理就是对每一个消息分别进行处理,这个比较简单。
半包的意思就是一次socket通信,只发送了部分消息。客户端的表现就是获取的event.data中消息的len包含的长度大于包的长度,
这个时候,这个包就没有收全,这个时候,不能调用解析处理包的逻辑。需要等待下次数据,把下次socket获取的数据加入到这部分消息的buf中,
然后,如果len小于等于新的包的长度,那么就可以调用处理包的逻辑,进行处理了。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:441350次
积分:4176
积分:4176
排名:第7008名
原创:68篇
转载:61篇
评论:27条
(1)(1)(4)(2)(4)(4)(4)(1)(2)(2)(1)(1)(2)(1)(1)(2)(2)(1)(1)(1)(3)(2)(2)(1)(1)(1)(9)(9)(1)(4)(15)(10)(8)(2)(2)(1)(2)(3)(3)(2)(6)(5)(5)我为什么应该选择 quick-cocos2d-x? - 知乎问题已关闭。原因:不构成提问或问题表意不明确。请将问题表述完整,消除歧义。让其他人准确理解你的提问是获得回答的前提。104被浏览14225分享邀请回答1添加评论分享收藏感谢收起0添加评论分享收藏感谢收起更多1 个回答被折叠()与世界分享知识、经验和见解

我要回帖

更多关于 quick cocos2dx 3.6 的文章

 

随机推荐