lua php 触摸精灵,【教程】Lua模拟多并发加Buffer

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

在游戏脚本中,有时候需要用到多线程并发操作,比如人物有10个Buffer需要加,那么没有并发机制时,只能在每次释放一次技能后调用10个函数去分别检测和加Buffer。如果有多线程,那么可以给每个Buffer创建一个线程,在循环中一直循环检测和加Buffer,这样在打怪过程中,就不需要再去关注Buffer的问题。

Lua中没有真正的多线程,而且使用协同程序来模拟并发操作,这样的好处是避免的多线程中的同步问题,而且可以更自由的控制各个函数的时间片,例如上面加多个Buffer的问题可以在Lua中这样写:

function addBuffer1() -- 循环检测和补充buffer1

while true do -- 主循环

if getColor(100, 100) ~= 0x000000 then -- 如果没有buffer1

touchDown(0, 100, 100); -- 释放buffer1

touchUp(0);

end

mSleep(500);

coroutine.yield(); -- 主动挂起自己

end

end

function addBuffer2() -- 循环检测和补充buffer2

while true do -- 主循环

if getColor(200, 200) ~= 0x000000 then -- 如果没有buffer2

touchDown(0, 200, 200); -- 释放buffer2

touchUp(0);

end

mSleep(500);

coroutine.yield(); -- 主动挂起自己

end

end

function addBuffer3() -- 循环检测和补充buffer3

while true do -- 主循环

if getColor(300, 300) ~= 0x000000 then -- 如果没有buffer3

touchDown(0, 300, 300); -- 释放buffer3

touchUp(0);

end

mSleep(500);

coroutine.yield(); -- 主动挂起自己

end

end

function addBuffer4() -- 循环检测和补充buffer4

while true do -- 主循环

if getColor(400, 400) ~= 0x000000 then -- 如果没有buffer4

touchDown(0, 400, 400); -- 释放buffer4

touchUp(0);

end

mSleep(500);

coroutine.yield(); -- 主动挂起自己

end

end

function addBuffer5() -- 循环检测和补充buffer5

while true do -- 主循环

if getColor(500, 500) ~= 0x000000 then -- 如果没有buffer5

touchDown(0, 500, 500); -- 释放buffer5

touchUp(0);

end

mSleep(500);

coroutine.yield(); -- 主动挂起自己

end

end

function kill() -- 循环打怪一直到怪物死亡

while true do

if getColor(600, 600) ~= 0x000000 then -- 如果怪物没死

touchDown(0, 1000, 1000); -- 释放一次技能

touchUp(0);

end

mSleep(500);

coroutine.yield(); -- 主动挂起自己

end

end

function main()

co1 = coroutine.create(addBuffer1);

co2 = coroutine.create(addBuffer2);

co3 = coroutine.create(addBuffer3);

co4 = coroutine.create(addBuffer4);

co5 = coroutine.create(addBuffer5);

co6 = coroutine.create(kill);

while true do

coroutine.resume(co1);

coroutine.resume(co2);

coroutine.resume(co3);

coroutine.resume(co4);

coroutine.resume(co5);

coroutine.resume(co6);

end

end

上面的main函数在一个循环中负责切换各个协程,每个协程虽然是一个循环,但是会在做一些操作后主动挂起自己,让其他协程可以运行,这样就可以模拟出并发执行的效果。

转自触摸精灵官方论坛:

http://www.touchelf.com/?fromuid=10761

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值