# 【笨木头Lua专栏】基础补充07：协同程序初探

## 2.创建协同程序

```
1    local co = coroutine.create(function() print("hello coroutine"); end);

```

```
12    local co = coroutine.create(function() print("hello coroutine"); end);
coroutine.resume(co);

```

[LUA-print] hello coroutine

## 3.更像样的协同程序

```
123456    local co = coroutine.create(function()
for i = 1, 2, 1 do
print("木头挺聪明的+" .. i);
end
end);
coroutine.resume(co);

```

[LUA-print] 木头挺聪明的+1
[LUA-print] 木头挺聪明的+2

## 4.让协同程序挂起——yield

```
12345678    local co = coroutine.create(function()
for i = 1, 2, 1 do
print("木头挺聪明的+" .. i);
coroutine.yield();
end
end);
coroutine.resume(co);
print(coroutine.status(co));

```

[LUA-print] 木头挺聪明的+1
[LUA-print] suspended

```
1234567891011121314    local co = coroutine.create(function()
for i = 1, 2, 1 do
print("木头挺聪明的+" .. i);
coroutine.yield();
end
end);
coroutine.resume(co);
print(coroutine.status(co));

coroutine.resume(co);
print(coroutine.status(co));

coroutine.resume(co);
print(coroutine.status(co));

```

[LUA-print] 木头挺聪明的+1
[LUA-print] suspended
[LUA-print] 木头挺聪明的+2
[LUA-print] suspended

```
12345678910111213141516    local co = coroutine.create(function()
for i = 1, 2, 1 do
print("木头挺聪明的+" .. i);
coroutine.yield();
print("一次循环结束");
end
print("协同程序结束");
end);
coroutine.resume(co);
print(coroutine.status(co));

coroutine.resume(co);
print(coroutine.status(co));

coroutine.resume(co);
print(coroutine.status(co));

```

[LUA-print] 木头挺聪明的+1
[LUA-print] suspended
[LUA-print] 一次循环结束
[LUA-print] 木头挺聪明的+2
[LUA-print] suspended
[LUA-print] 一次循环结束
[LUA-print] 协同程序结束

## 5.resume操作的返回值

```
12345678    local co = coroutine.create(function()
for i = 1, 2, 1 do
coroutine.yield();
end
end);
local result, msg = coroutine.resume(co);
print(result);
print(msg);

```

[LUA-print] true
[LUA-print] nil

resume返回两个值，第一个值代表协同程序是否正常执行，第二个返回值自然是代表错误信息。

```
123456    local co = coroutine.create(function()
error("呵呵，报错了吧");
end);
local result, msg = coroutine.resume(co);
print(result);
print(msg);

```

[LUA-print] false
[LUA-print] [string “src/main.lua”]:91: 呵呵，报错了吧

## 19 评论

2. 吾问无为谓说道：

木哥，新手学cocos2d-x，我觉得cocos2d-x lua比较简单，但是后期书籍资料比较少，你觉得我该肿么办？cocos2d-x那个c++貌似有点难学

1. 虽然先学C++版本会让你后续更加地勇猛（学会C++之后，什么lua版本、js版本、java版本都没什么难度了），但如果确实对C++没什么抵抗力，那就先学Lua版本吧。千万不要因此觉得自己吃亏什么的，学习永远都不吃亏，多绕一点弯而已，总比走直径但却走不下去要强。

1. 吾问无为谓说道：

但是cocos2d-x-lua版本的书籍基本没有,你也没写lua版本的书籍，我买了本关东升老师的lua卷，感觉介绍的知识点不够用，不足矣能够自己开发“““““`

1. 因为游戏开发的思想大同小异，只要你会用lua、了解cocos2d-x的API，剩下的就是不同类型游戏的开发思路了。一般很少人会专门针对lua去写这些思路吧，毕竟游戏开发还是c++的多，java应该也有一些。入门的话，看官方demo吧，到了要进阶和提高的时候，你的C++是不得不学了（因为后续需要c++和lua相互调用）

1. 吾问无为谓说道：

哦，十分感谢开导啊

2. 吾问无为谓说道：

木歌，还有事请教，你开发那个lua版本的游戏用的什么版本，cocos2d-x lua还是quick cocos2d-x,quick貌似现在变成cocos2d-lua了，我已经迷糊了，现在用了cocos2d-x lua和cocos ide,想问下这2个到底有啥区别？

3. Pingback： skype free
4. Pingback： java runtime