大家不要说用cc的sequence,那个是针对一个node的顺序动作,现在想知道的是不同个多个sprite顺序发生一系列动作
大家有什么好的方案,求指导小弟,互相交流下。谢谢!
我写下我的发散想法。
1 所有sprite装入数组
2 声明一个变量,表示第几个sprite要runAction
3 注册事件 ,事件响应函数会根据 步骤2 变量的值从数组中取出 sprite, 然后让sprite执行动作, 最后 变量自增1 后,发消息给自身。
4 对数组第一个元素执行runAction , 然后变量自增1 , 发消息给注册的事件( 这里其实是整个调用的第一步)
另外你像体现出顺序效果,代码里发送消息的时候,加上延迟即可。
–消息延迟发送,延迟时间为攻击时间
scheduler.performWithDelayGlobal(function()
–发送消息,调用rpg模块
local event_ = cc.EventCustom:new(“RPG_EVENT”)
self.eventDispatcher:dispatchEvent(event_)
end, 0.5+0.2)
嗯嗯,多谢大哥。我也想着是用延时来做。我现在模拟一个 自动复原滑块拼图游戏的滑块 的功能,移动路径已经求出来。具体移动我是这么写的,可是还是有问题,就是动画会卡着不动然后后台跑完了前边的滑块直接移动到相应位置,而且可能由于滑块移动的顺序动作问题,有个别滑块位置并不对。
—下边这个是moveNumber函数:主要的动作都在里边,分为上下左右移动。
function GameView:moveNumber(position,move_dir) —函数里的self.blocks存储的就是需要移动的对象,也就是您所说的用数组来存移动对象
local x=math.floor((position-1 )%3)
local y=math.floor((position-1 )/3)
local Pathteps={{0,-1},{1,0},{0,1},{-1,0}}
local newX=x+Pathteps
local newY=y+Pathteps
print("position=="..position.. " direction== "..move_dir)
local num = self.numList
local block_move = 0
local newPos=newY*3+newX+1
for k,v in pairs(self.blocks) do
if(v:getNum()==num)then
block_move = k
end
end
if self.numList==0 then
if(move_dir ==1 ) then --up
local x,y = self.blocks:getPosition()
local para={} --x,y+180,0.5
para.time=0.1
para.x=x
para.y=y+180
self.blocks:moveTo(para)
elseif(move_dir == 2) then --right
local x,y = self.blocks:getPosition()
local para={} --x+180,y,0.5
para.time=0.1
para.x=x+180
para.y=y
self.blocks:moveTo(para)
elseif(move == 3) then --down
local x,y = self.blocks:getPosition()
local para={} --x,y-180,0.5
para.time=0.1
para.x=x
para.y=y-180
self.blocks:moveTo(para)
elseif(move_dir == 4) then --left
local x,y = self.blocks:getPosition()
local para={} --x-180,y,0.5
para.time=0.1
para.x=x-180
para.y=y
self.blocks:moveTo(para)
end
self.numList = self.numList
self.numList =0
end
end
—下边是移动的控制逻辑,告诉下一边该移动哪个滑块,移动方向是什么
–获取0元即空格的位置
local ps=0;
for k,v in pairs(bt) do
if(v==0) then
ps=k;
end
end
local DisNode;
DisNode = function(move_dir)
if(move_dir==0) then
self:moveNumber(ps-m,3); --down
ps=ps-m;
elseif(move_dir==2) then
self:moveNumber(ps+m,1) --up
ps=ps+m;
elseif(move_dir==1) then
self:moveNumber(ps-1,2) --right
ps=ps-1;
elseif(move_dir==3) then
self:moveNumber(ps+1,4) --left
ps=ps+1;
end
end
local k=0
while(k<dis) do ---Path存了移动路径,一直调用DisNode来执行移动控制。
DisNode(Path);
k=k+1;
local t = os.time()
while os.time() - t < 1 do ----这个地方就是我设置的延时,延时1秒然后才执行下一个DisNode,即移动
end
end