cocos2d - x 타자 효과 실현
이번 에는 cocos2d - x 에서 타자 효 과 를 실현 하 는 작은 기능 을 공유 합 니 다.
우선, cocos2d - x 에서 label 은 기본적으로 utf 8 인 코딩 입 니 다. quickx 는
string.utf8len
인 터 페 이 스 를 제공 합 니 다. 여기에 하위 문자열 을 캡 처 하 는 함 수 를 추가 합 니 다.function utf8str(str, start, num)
local function utf8CharSize(char)
if not char then
return 0
elseif char > 240 then
return 4
elseif char > 225 then
return 3
elseif char > 192 then
return 2
else
return 1
end
end
local startIdx = 1
while start > 1 do
local char = string.byte(str, startIdx)
startIdx = startIdx + utf8CharSize(char)
start = start - 1
end
local endIdx = startIdx
while num > 0 do
if endIdx > #str then
endIdx = #str
break
end
local char = string.byte(str, idx)
endIdx = endIdx + utf8CharSize(char)
num = num - 1
end
return str:sub(startIdx, endIdx - 1)
end
첫 번 째 실현 방식 은 처음에 모든 문 자 를 0 으로 스 케 일 하고 일정 시간 지연 한 후에 원래 크기 로 스 케 일 하 는 것 입 니 다.
-- textDelayTime
function typewriting(label, textDelayTime)
string = label:getString()
-- label
local totalLen = string.utf8len(string) + label:getStringNumLines()
for i = 1, totalLen do
local sprite = label:getLetter(i - 1)
if sprite then
sprite:setScale(0)
end
end
local textAppear = cc.ScaleTo:create(0, 1)
for i = 1, totalLen do
local textDelay = cc.DelayTime:create(textDelayTime * (i - 1))
local textActionSeq = cc.Sequence:create(textDelay, textAppear)
local sprite = label:getLetter(i - 1)
if sprite then
sprite:runAction(textActionSeq)
end
end
end
이러한 실현 효 과 는 점프 감 이 있 습 니 다. 다른 방식 으로 visibility 로 제어 합 니 다.
-- textDelayTime
function typewriting(label, textDelayTime)
string = label:getString()
-- label
local totalLen = string.utf8len(string) + label:getStringNumLines()
for i = 1, totalLen do
local sprite = label:getLetter(i - 1)
if sprite then
sprite:setVisible(false)
end
end
local textAppear = cc.Show:create()
for i = 1, totalLen do
local textDelay = cc.DelayTime:create(textDelayTime * (i - 1))
local textActionSeq = cc.Sequence:create(textDelay, textAppear)
local sprite = label:getLetter(i - 1)
if sprite then
sprite:runAction(textActionSeq)
end
end
end
이런 효과 도 별로 좋 지 않 습 니 다. 마지막 으로 본 찌꺼기 는 생각 을 바 꾸 었 습 니 다. 한 글자 한 글자 로 runAction 을 하지 않 고 label 을 전체 로 runAction 으로 바 꾸 었 습 니 다. action 에서 setString 을 제거 하 는 방식 의 효과 가 많이 좋아 졌 습 니 다.
-- textDelayTime
function typewriting(label, textDelayTime)
string = label:getString()
-- label
local totalLen = string.utf8len(string) + label:getStringNumLines()
label:setString("")
local textActions = {}
for i = 1, totalLen do
local textDelay = cc.DelayTime:create(textDelayTime)
local textAppear = cc.CallFunc:create(function()
label:setString(utf8str(string, 1, i))
end)
table.insert(textActions, textDelay)
table.insert(textActions, textAppear)
end
local textActionSeq = cc.Sequence:create(textActions)
label:runAction(textActionSeq)
end
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Cocos2dx+lua에서 Color 매개 변수의 구덩이cocos2x의 루아에는 다음과 같은 몇 가지 색깔 정의가 있습니다. 오늘 Cocos2dx를 사용한 Label이 문제가 생겼는데 무시당하기 쉬울 것 같아요. Label의 enableShadow 함수를 사용하여 정의된...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.