利用lua string库实现字符串中的数字变动效果

6 篇文章 0 订阅
该代码段实现了一个用于数值调整的功能,通过递归循环调用来逼近目标数值。它首先查找目标字符串中的小数点,然后找到当前显示字符串中的数值部分。根据数值与目标数值的比较,计算出调整步长,并更新数值。最后,设置节点的字符串并根据是否达到目标数值决定是否继续递归调用。
摘要由CSDN通过智能技术生成
function PetInfoPanel:runAddAction(node, target, index)
	if not index then
		index = 1
	end
	assert(node)
	if not node.getString then
		return 
	end
	-- 查找小数点
	local str = node:getString()
	local _, _, targetNum = string.find(target, "(%d+.%d+)")
	-- targetNum
	if targetNum == nil then
		-- print("目标字符串不含 小数点")
		_, _, targetNum = string.find(target, "(%d+)")
	end

	-- 查找当前显示字符串
	-- "-123.261&" 匹配结果为123.261 但是匹配不到"9%"中的9
	local _, _, num = string.find(str, "(%d+.%d+)")
	-- targetNum
	if num == nil then
		-- print("当前不含 小数点")
		_, _, num = string.find(str, "(%d+)")
	end
	print("target", target, "targetNum", targetNum, "str", str, "", "num", num)
	num = tonumber(num)
	targetNum = tonumber(targetNum)

	local xishu = 0.3
	local sub = num < targetNum and (targetNum-num) * xishu < 1 and 1 or math.floor((targetNum-num) * xishu) 
								or (targetNum-num) * xishu > -1 and -1 or math.floor((targetNum-num) * xishu)

	local temp = num + sub
	if sub > 0 then
		if temp >= targetNum then
			temp = targetNum
		end
	else
		if temp <= targetNum then
			temp = targetNum
		end
	end

	local str1 = string.gsub(str, num, temp)
	node:runAction(cc.Sequence:create(cc.DelayTime:create(0.05), cc.CallFunc:create(function( ... )
		node:setString(str1)
		if temp ~= targetNum then
			self:runAddAction(node, targetNum, index+1)
		end
	end)))

end
递归循环调用


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值