﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-平民程序 - linghuye's blog-随笔分类-游戏理论和技术</title><link>http://www.cnitblog.com/linghuye/category/590.html</link><description>&lt;p align=right style="background-color: transparent"&gt;天下风云出我辈，一入江湖岁月催。皇图霸业谈笑中，不胜人生一场醉。提剑跨骑挥鬼雨，白骨如山鸟惊飞。尘事如潮人如水，只笑江湖几人回。&lt;p align=right style="background-color: transparent;"&gt;&lt;/p&gt;</description><language>zh-cn</language><lastBuildDate>Mon, 26 Sep 2011 09:20:20 GMT</lastBuildDate><pubDate>Mon, 26 Sep 2011 09:20:20 GMT</pubDate><ttl>60</ttl><item><title>如何让Ansi工程支持Unicode Edit的输入</title><link>http://www.cnitblog.com/linghuye/archive/2009/04/17/56436.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Fri, 17 Apr 2009 02:28:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2009/04/17/56436.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/56436.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2009/04/17/56436.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/56436.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/56436.html</trackback:ping><description><![CDATA[<p>1.使用CreateWindowExW创建控件,如<br>hEditWnd = CreateWindowExW(WS_EX_NOPARENTNOTIFY | WS_EX_CLIENTEDGE, L"Edit", NULL, WS_VISIBLE | WS_CHILD | WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL, 0, 0, 300, 24, m_hWnd, (HMENU)IDC_UNICODE_EDIT, NULL, NULL);</p>
<p>2.在焦点进入Edit控件时,进入自己的消息泵,此消息泵使用GetMessageW,DispatchMessageW来完成消息分发.<br>&nbsp;m_bStopMonitorUnicodeEdit = false;<br>&nbsp;for(;;)<br>&nbsp;{&nbsp;<br>&nbsp;&nbsp;if(m_bStopMonitorUnicodeEdit)<br>&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;MSG msg = { 0 };<br>&nbsp;&nbsp;BOOL bRet = ::GetMessageW(&amp;msg, NULL, 0, 0);<br>&nbsp;&nbsp;if(bRet == -1)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;continue;&nbsp;&nbsp; // error, don't process<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;else if(!bRet)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;// WM_QUIT! exit message loop<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;::TranslateMessage(&amp;msg);<br>&nbsp;&nbsp;::DispatchMessageW(&amp;msg);<br>&nbsp;}</p>
<p>4.在焦点退出Edit控件时,&nbsp;退出消息泵.<br>&nbsp;&nbsp;&nbsp; m_bStopMonitorUnicodeEdit = true;<br><br>Reference:<br>在网络上查过资料,那些回答都是垃圾,连问题的根源都没摸著边.</p>
<img src ="http://www.cnitblog.com/linghuye/aggbug/56436.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2009-04-17 10:28 <a href="http://www.cnitblog.com/linghuye/archive/2009/04/17/56436.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Lua概念备忘</title><link>http://www.cnitblog.com/linghuye/archive/2007/11/12/36192.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Mon, 12 Nov 2007 12:49:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2007/11/12/36192.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/36192.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2007/11/12/36192.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/36192.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/36192.html</trackback:ping><description><![CDATA[<p>1.当处理数据文件时,一般总是写比读来得简单,因为写文件时我们有完全的控制,读时却不能确保碰上什么样的数据,我们需要保证健壮的程序能优雅地处理各种各样的错误数据.</p>
<p>2. <br>Entry<br>{<br>&nbsp;title = "Tecgraf",<br>&nbsp;&nbsp;&nbsp; org = "Computer Graphics Technology Group, PUC-Rio",<br>&nbsp;&nbsp;&nbsp; url = "<a href="http://www.tecgraf.puc-rio.br/">http://www.tecgraf.puc-rio.br/</a>",<br>&nbsp;&nbsp;&nbsp; contact = "Waldemar Celes",<br>};<br>语法含义是Entry函数调用,传入参数为指定的table.</p>
<p>3.a.Metatables allow us to change the behavior of a table.<br>&nbsp; b.Each table in Lua may have its own metatable.<br>&nbsp; c.Lua always create new tables without metatables.<br>&nbsp; d.use setmetatable to set or change the metatable of any table<br>&nbsp; e.Any table can be the metatable of any other table.<br>&nbsp; f.A group of related tables may share a common meta.<br>&nbsp; g.A table can be its own metatable.<br>&nbsp; h.__add: +<br>&nbsp;&nbsp;&nbsp; __mul: *<br>&nbsp;&nbsp;&nbsp; __sub: - <br>&nbsp;&nbsp;&nbsp; __div: / <br>&nbsp;&nbsp;&nbsp; __unm: 取负 <br>&nbsp;&nbsp;&nbsp; __pow: 次方 <br>&nbsp;&nbsp;&nbsp; __concat: ..<br>&nbsp;&nbsp;&nbsp; __eq: equality<br>&nbsp;&nbsp;&nbsp; __lt: less than<br>&nbsp;&nbsp;&nbsp; __le: less or equal<br>&nbsp;&nbsp;&nbsp; __tostring <br>&nbsp;&nbsp;&nbsp; __metatable <br>&nbsp;&nbsp;&nbsp; __index<br>&nbsp;&nbsp;&nbsp; __newindex </p>
<p>&nbsp; i:If the first value has a metatable with an __add field, Lua uses this value as the metamethod, independently of the second value; (2) otherwise, if the second value has a metatable with an __add field, Lua uses this value as the metamethod; (3) otherwise, Lua raises an error.<br>4.将light user data作为指针使用,并在脚本环境中维护一个以lightuserdata为key的table,value为对应的lua对象,则有,key为C++对象,value为lua对象.<br>5.userdata本质为一段内存区,在脚本中可作为单一参数进行传递.可为之定义脚本函数以操作该内存,一簇的函数形成一个对象概念,一个内存对象概念.<br>6.userdata可以有metatable,意味着其可以完成完整的C++对象语义. 检查userdata的metatable(luaL_checkudata)以确保该userdata是所期望的内存对象.<br>7.Remember that <code>a:size()</code> is equivalent to <code>a.size(a)</code>. Therefore, we have to arrange for the expression <code>a.size</code> to return our <code>getsize</code> function. The key mechanism here is the <code>__index</code> metamethod. For tables, this metamethod is called whenever Lua cannot find a value for a given key. For userdata, it is called in every access, because userdata have no keys at all. <br>8.设置metatable的__index为get方法,__newindex设为set方法,以实现[]的语法语义. <br>9.设置metatable的__index为metatable自身,并定义get,set,size函数,以实现C++对象语法语义</p>
<img src ="http://www.cnitblog.com/linghuye/aggbug/36192.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2007-11-12 20:49 <a href="http://www.cnitblog.com/linghuye/archive/2007/11/12/36192.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第三只眼看中国网游(觉得对我胃口,转载)</title><link>http://www.cnitblog.com/linghuye/archive/2006/04/25/9634.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Tue, 25 Apr 2006 01:11:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2006/04/25/9634.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/9634.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2006/04/25/9634.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/9634.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/9634.html</trackback:ping><description><![CDATA[
		<strong>第三只眼看中国网游（ On The Outside, Looking In ）</strong>
		<p>作者：杰西卡·玛丽甘（ Jessica Mulligan ）<br />2005 年 8 月 25 日</p>
		<p>　　你们中的某些人或许认识我，我开发网络游戏约有将近 20 年，写过辛辣的业界专栏，与布利特·帕彻斯凯合著过一本关于网游开发的书，并在全球发行，包括中国的两个版本。所以，在很大程度上，正如人们常说的，我是一个过来之人。 </p>
		<p>　　过去这几年，我密切关注着网络游戏业在亚洲的爆发式成长。感谢弘亚世代的编辑给了我一个表述观点的平台，这个专栏每月或多或少都会有所更新。下面就让我们开始吧。 </p>
		<p>　　请容我先对中国网络游戏业的同仁们说上一句：你们疯了。 </p>
		<p>　　疯得很到位。狂野而充满实验的味道，一次次将这个行业推向崭新的高度。正如历史上那些失去理智的伟人们，如居里夫人、爱迪生、郑和、特斯拉和福特，你们遵从着同样的疯狂理念：用力去推动某一事物，直到它轰然倒下，再从废墟上建造起一件更牢固、更优良的事物。 </p>
		<p>　　我很钦佩这种品质，也很欣赏你们的疯狂。 </p>
		<p>　　六年前，如果你告诉我未来会有 2000 万中国人愿意付费玩网络游戏，我会当面嘲笑你。但这能怪我吗？ 1999 年 8 月，全世界只有不到 50 万人在付费玩网络游戏。我想大家应该能够原谅我僵化的思维。即便今天，你们的 2000 万的数字仍然比整个美国和欧洲的付费玩家数高出六倍甚至更多，而且差距在不断扩大。 </p>
		<p>　　你们让我们这些西方人感到惊讶。你瞧，三十年前是我们创造了网络游戏业，我们以为我们能够一直统治它。今天，争夺网游控制权的战争就像上世纪 60 年代各国之间的太空竞争，我们始终坚信最先登月的必定是我们国家。你可以想象一下，假如我们的宇航员在 1969 年登上月球后，发现你们已经在月球上建造并经营起了几座城市，还穿着“月球欢迎尼尔和埃德温（译者注：人类首次登上月球的两名美国宇航员）”的 T 恤，手里拿着飞往火星的打折飞船票，站在外面迎接我们，我们会是怎样的感受？ </p>
		<p>　　这简直让人感到羞耻。当然，一款西方的产品——《魔兽世界》——已经成为时下全球最火爆的网络游戏。但别忘了，至少有一款来自中国本土的游戏击败了《魔兽世界》，其峰值同时在线比《魔兽世界》高出一倍（译者注：指《梦幻西游》）。这意味着什么？如果你们的市场继续以过去六年来的速度成长，那么在未来六年里，中国将占据全球市场。这些日子我们在美国学会了一句中国话：“我们不再是世界市场领导。” </p>
		<p>　　我们作为美国和欧洲网游行业的一员，并没有因此而感到痛苦。相反，我们很羡慕你们。羡慕你们拥有充满激情的用户；羡慕你们的年轻和敢于拓荒；羡慕你们低廉的开发成本，这让你们能够尝试各种新的风格和类型；羡慕你们愿意尝试一切的心态；甚至羡慕你们政府毫无保留的支持——他们宣布投入 10 亿元人民币用于开发 100 款游戏，以帮助开发者更快地成长起来。这在美国永远不会发生，除非哈里伯顿（ Halliburton ）或埃克森（ Exxon ）也开始成立网络游戏事业部（译者注：美国的两家石油巨头）。 </p>
		<p>　　既然如此，我还能对你们说些什么？ </p>
		<p>　　事实上有很多。你们还没有学会从我们所犯的错误中汲取教训，相信我，你们还有很多需要学习的地方。我们将在未来的几个月里讨论这些问题，不过现在，请允许我先给你们三个简短的忠告。 </p>
		<p>　　1 、数量不等于质量。我之所以这么说是因为我觉得你们正在犯下一些错误，这些错误我们在上世纪 90 年代已经犯过——尽可能多地开发网络游戏，寄希望于其中几款能够获得市场的认可，使自己一举成为市场领导者。这种做法就像是拿着一把散弹枪去射杀一只苍蝇，也许你能做到，但在做到之前你需要耗费大把大把的弹药。 </p>
		<p>　　以我的经验来看，这是一个巨大的错误。无论怎样的市场，无论 MMORPG 还是休闲游戏，最终吸引玩家的都将是产品质量。这里的产品质量包括多个方面，例如游戏性、客户服务、便捷性、收费模式等。与其以散弹枪的方式同时开发三款游戏，不如拿出三倍于此的时间开发一款游戏，以保证这款游戏在上述几个方面都能做好。 </p>
		<p>　　回顾历史，你会发现美国公司追求数量的时期是在 1994 年到 1998 年，这一做法不仅宣告失败，更糟糕的是，它留下了一个加州大小的冒着烟的巨大弹坑。那时约有 130 多款网络游戏被投入研发，最后能够运营的只有不到 10 款。这足足浪费了 2 亿美元的研发费用，无论以怎样的标准衡量，损失都是惨重的。这等于是驾着小船跑到离岸 200 公里的海上，投下 16 亿人民币，然后把船敲沉，自己再游回岸边。 </p>
		<p>　　这个故事告诉我们：数量不等于质量。 </p>
		<p>　　2 、越小越好。我之所以说“越小越好”，因为我认为最优秀的创意和游戏往往来自那些以热情去工作的小公司。这一点在我们这里已经被证实了很多次。成功往往意味着创造力的日渐消逝，与之相伴的是不断增加的派系斗争和一无是处的官僚作风。没有人希望看到这一切，但它确实会发生，这是公司这头野兽的天性。 </p>
		<p>　　看看网游领域内的任何一家美国或韩国公司，在最初的成功后，有谁还能继续开发出真正成功的游戏？只有那些规模较小的外部工作室，他们能做到这一点。 </p>
		<p>　　在分配政府拨款，或是门户网站和运营商们决定如何在网游开发上投钱的时候，请记住这个教训。 </p>
		<p>　　3 、别在游戏还没做好前就把它们推向市场。这是几年来我们在美国和欧洲一直犯的另一个错误，而且未来也会定期犯类似的错误。看看现在在美国和欧洲运营的那些游戏，有多少因为不稳定的技术而崩溃，或是遗漏了关键的功能，或是两者兼具。对此没什么可辩解的，即便是“没钱了”也不能拿来作为你的借口。 </p>
		<p>　　除了做到技术上的稳定，以及拥有被我们的竞争对手训练出来的、大部分或所有玩家都在期待的游戏特性外，要在今天如此拥挤的市场上取得成功，你的游戏还必须有一些独特之处。这里所说的“独特之处”可能很简单，例如在某些特性上比其它游戏作得更好，或是拥有全球最优良的、反应最迅速的客户服务系统；也可能很复杂、有着很高的风险，例如加入其它游戏中从未出现过的特性。 </p>
		<p>　　仅仅依靠抄袭现有的东西已经远远不够了，市场的先发优势已经丧失，要想成功，你就必须击败对手，而不是效仿对手。</p>
		<p>
				<br />
				<b>“太多低劣的游戏会扼杀产业”</b> ——杰西卡·玛丽甘专访</p>
		<p>记者：是什么促使您写了这篇专栏？ </p>
		<p>杰西卡：我一直都在记录自己对网络游戏业的看法。 Skotos.net 网站上有我的“ Biting the Hand ”专栏，这个专栏我坚持写了六年。 2001 年到 2002 年，布利特·帕彻斯凯和我合著《网络游戏开发》的时候，我们花了些时间来考察亚洲市场，之后我就被这块市场迷住了。我发现西方人已经经历过的许多事情，今天的中国网游市场正在经历。所以我决定写点东西，帮助东、西方两块市场在研发和商业方面走得更近。   </p>
		<p>记者：您现在对自己半年前的这篇文章有没有什么新的看法？ </p>
		<p>杰西卡：有。不过我会把我的更新放到另一篇文章中去谈。（笑）   </p>
		<p>记者：为什么您认为中国的网游业过于重视数量而忽视了质量？ </p>
		<p>杰西卡：很简单，中国的网游业仍然很年轻，仍然在成长，仍然有很多可感知的机会。每个人都想尽快进入这块市场，希望赚到大钱。同样的事情在 1994 年到 1997 年之间的美国和欧洲也曾发生过，今天随着中国和韩国网游市场的兴起，全球的网游开发规模又开始了新一轮的扩张。你们应该从美国所犯的错误中汲取教训，要知道， 90% 甚至更多的开发中的游戏不会取得成功，甚至不可能走到商业化运营这一步。这对于分析师和风险投资商来说是在烧钱，钱会很快烧光。   </p>
		<p>记者：对于仍处于初级阶段的中国游戏研发业来说，没有烂游戏的存在，就不可能有好游戏的出现。从这个角度看，数量是否仍然很重要，至少它给了更多的人一个犯错误并从错误中汲取教训的机会？ </p>
		<p>杰西卡：的确如此。不过，太多低劣的游戏会扼杀产业，或是减缓产业的前进步伐。这在上世纪 90 年代中期的美国网游业身上已经得到了证实。看看 1984 年著名的“雅达利冲击”（ Atari Shock ）对于美国家用游戏机市场的打击，就是因为众多劣质游戏充斥市场而导致的。因此，我们有必要在数量和质量之间保持某种平衡，而我个人更倾向于偏重质量一些。   </p>
		<p>记者：您认为《梦幻西游》为什么能击败《魔兽世界》？ </p>
		<p>杰西卡：简单谈几个原因： </p>
		<p>A. 董瑞豹（网易公司首席运营官）和网易的团队可以说是这个行业中最聪明的一群人，不仅仅在中国，在全球范围内也是如此。他们很聪明，知道应该培养自己的内部研发力量，这使得游戏的维护变得更方便，对用户和整体市场的需求的反应速度也更快。 </p>
		<p>B. 《梦幻西游》从一开始就是一款为中国人定做的游戏，游戏的特色和游戏性准确命中了中国玩家的需求，而且设计师聪明地把《西游记》的背景故事融入了游戏世界之中。 2004 年我第一次来中国的时候，和几十个中国玩家一起吃了顿饭，我问他们在 MMO 中最想要的是什么？几乎每个人都回答说：“中国的历史和神话。”可见这对于中国玩家来说是重要而有意义的。 </p>
		<p>我本人也非常喜欢《西游记》这部小说，现在正在读第二遍。我很崇拜美猴王，也很想和猪八戒一起做任务。   </p>
		<p>记者：盛大有着庞大的研发团队，但他们开发的几款大型网络游戏并不能算成功。您认为原因何在？ </p>
		<p>杰西卡：盛大也在培养他们的自主研发力量，这一点还是明智的。但从中我们也可以了解到，即便你每个环节都做对了，玩家还是可能不喜欢玩你的游戏。这并不稀奇，许多欧美人开发的针对欧美玩家的游戏最后也失败了。这是一个残酷的行业。   </p>
		<p>记者：现在盛大已经暂停了 MMO 的开发，专注于休闲游戏，尤其是 EZ 系列平台上的休闲游戏。您对此作何评价？ </p>
		<p>杰西卡：我很羡慕盛大的野心，他们的胃口很大！（笑）不过他们选择了一件最难做的事情去做，一旦你踏入硬件相关的开发和支持，你会发现你所需要面对的问题和风险在呈几何级数增长。 </p>
		<p>至于休闲游戏，基于自己的硬件平台做开发，这对于盛大来说是合理的一步，我认为是明智之举。如果换作我，我不会完全放弃 MMO 的开发。不过盛大向来善于物色并代理第三方的游戏，所以他们在产品线上可以做到既有新的 MMO 游戏在运营，又能保证内部工作室专注于 EZ 和休闲游戏的开发。   </p>
		<p>记者：当您说“越小越好”的时候，您是不是在警告网易和盛大这样的公司？ </p>
		<p>杰西卡：这无疑是一种警告。我的意思是，如果开发团队过于直接地被高层管理者控制，就会丧失他们的创造力和创新意识。如果高层管理者过多地介入研发，开发团队就会去设计那些能够被管理层认同的游戏，而不是设计玩家真正需要的游戏。这就是为什么你会在市场上找到 100 款《魔兽世界》的克隆品，却找不到一款出色的新游戏。 </p>
		<p>当然，管理层需要知道研发正在做些什么，并提出“继续”或“停止”的商业决策。但他们必须小心，不要过度卷入创意的过程，否则开发团队的热情和经验会变得一无用处。我在欧美的许多大型发行商中曾多次目睹过这样的错误，这不是什么让人愉快的事情。   </p>
		<p>记者：开发者为什么要急于把未完成的游戏推向市场？您对此有何建议？ </p>
		<p>杰西卡：根据我的经验，这主要有三个原因： </p>
		<p>A. 许多规模较小的、处于起步阶段的开发者在最初启动项目的时候就没有足够的资金，当投入的资金耗尽后，绝望中的他们不得不把未完成的游戏推向市场，希望吸引足够多的用户，这样就会有其他投资商愿意继续往里投钱，以保证他们存活下去。 </p>
		<p>B. 对于运营商的内部开发团队来说，高层管理者常会强迫游戏提早开始运营，通常是因为这些游戏的开发成本过高，他们需要或者说希望尽快看到投资回报。 </p>
		<p>C. 在某些情况下，过早地运营游戏仅仅是由于经验缺乏。开发团队以为游戏已经完成了，事实上他们的游戏还没有经过充分测试，或是游戏的平衡性还存在问题，这会导致许多不良后果的产生。 </p>
		<p>基于上述三个原因，我的建议是： </p>
		<p>A. 在启动项目前确保你的开发计划拥有足够的资金，否则，你应该把重心放在尽快制作出原型（ prototype ）上，用它去吸引更多投资。 </p>
		<p>B. 如果你是一位主管，记住，与其投入大笔金钱，然后又逼着游戏仓促上市，不如及早砍掉这款游戏。你可以每周或每两周对游戏的开发进度进行检查，这时你可以提一些严厉的问题，别害羞。如果你无法确定游戏的开发状况，那就请一些有经验、开发过一款以上的 MMO 的外部人士来，让他们对游戏的开发状况进行检查。 </p>
		<p>C. 如果这是你所在的公司或工作室开发的第一款 MMO （即便你拥有有经验的开发人员），千万不要以为没发生爆炸就等于一切平安。尽快开始你的第一次封闭 Alpha 测试，看看那些有经验的玩家是如何评价你的游戏的。如果你不得不对原有设计或特性作重大修改，就在这个阶段进行，千万不要等到封闭 Beta 测试后再去改。<br /><br />================================================================<br />读后很对我脾胃,想想自己这些年的开发经验:</p>
		<p>任何一个有质量的游戏项目不论开发期拖了多长,总是成功的.当前的投资商不要,下一个投资商会要,投资商总是心血来潮地说市场要求4个月完成游戏,4个月后又有一个投资商说市场要求4个月完成这个游戏,每个人对市场地认识不同而已.有质量的项目在自己手里就是个固定资产,带来的是长期收益.</p>
		<p>而一个没有质量的项目即使按时完成,应付了当前的投资商,也注定它失败的命运,最终难免崩盘的一天.作100个没质量的项目,最终还是两手空空,没有任何累积性的长远利益.</p>
		<p>要有质量而又按时完成的游戏项目?世界上没有这种项目!</p>
		<p>什么是有质量的游戏项目,开发组的每个成员都真心地觉得自己开发的这款游戏有点cool,自己想玩.</p>
<img src ="http://www.cnitblog.com/linghuye/aggbug/9634.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2006-04-25 09:11 <a href="http://www.cnitblog.com/linghuye/archive/2006/04/25/9634.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Lua的长字符串合并算法</title><link>http://www.cnitblog.com/linghuye/archive/2006/01/15/6185.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Sun, 15 Jan 2006 07:20:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2006/01/15/6185.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/6185.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2006/01/15/6185.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/6185.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/6185.html</trackback:ping><description><![CDATA[<P>形如:<BR>-- WARNING: bad code ahead!!<BR>local buff = ""<BR>for line in io.lines() do<BR>&nbsp;buff = buff .. line .. "\n"<BR>end</P>
<P>1.每次buff = buff .. line .. "\n",导致新建一块内存,复制原buff内存,销毁原buff内存.<BR>2.由于GC内存回收机制的的存在使得当字符串为几十k时,程序效率无法接受.</P>
<P>作如下算法:<BR>function newStack ()<BR>&nbsp; return { "" }&nbsp;&nbsp; -- starts with an empty string<BR>end</P>
<P>-- 将每个字符串加入到stack table中<BR>-- 规定table中的字符串从尾至前为从长度小的字符串到长度长的字符串.<BR>-- 故,在加入一字符串时,检查其是否长于尾部的字符串,若长于前字符串,与之相加.<BR>-- 接着再向前判断前方的元素,若相加后的字符串前元素,再如此向前.<BR>function addString (stack, s) <BR>&nbsp; table.insert(stack, s)&nbsp;&nbsp;&nbsp; -- 塞入尾部<BR>&nbsp; for i=table.getn(stack)-1, 1, -1 do<BR>&nbsp;&nbsp; if(string.len(stack[i+1])&nbsp; &gt;&nbsp; string.len(stack[i])) then<BR>&nbsp;&nbsp;&nbsp; stack[i] = stack[i] .. table.remove(stack)&nbsp;-- 移出尾部元素,并相加.<BR>&nbsp;&nbsp; else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<BR>&nbsp; end<BR>end</P>
<P>-- 调用<BR>local s = newStack()<BR>for line in io.lines() do<BR>&nbsp; addString(s, line .. "\n")<BR>end<BR>s = toString(s)<BR><BR>Reference:<BR>Programming in lua</P><img src ="http://www.cnitblog.com/linghuye/aggbug/6185.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2006-01-15 15:20 <a href="http://www.cnitblog.com/linghuye/archive/2006/01/15/6185.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于脚本引擎系统的思考及Luabind实践</title><link>http://www.cnitblog.com/linghuye/archive/2005/08/13/1834.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Sat, 13 Aug 2005 09:13:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2005/08/13/1834.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/1834.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2005/08/13/1834.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/1834.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/1834.html</trackback:ping><description><![CDATA[脚本引擎基本功能语义:<BR>&nbsp;&nbsp;1.分析并执行字符串脚本和文件脚本.<BR>&nbsp;&nbsp;2.从程序内部获取和设置脚本变量<BR>&nbsp;&nbsp;3.从程序内部调用脚本函数,包括参数传递和返回值处理.<BR>&nbsp;&nbsp;4.让脚本获取和设置程序变量<BR>&nbsp;&nbsp;5.让脚本调用程序函数,包括参数传递和返回值处理.<BR>&nbsp;&nbsp;6.类体系的体现和交互,包括2-5的内容. 
<P>&nbsp;</P>
<P>Luabind非常好地建立了从C++到lua脚本的扩展,但存在几个普遍的问题：<BR>1.C++泛型和接口式编程天生的不兼容性,编译期和运行期多态的本质有别。<BR>2.要使用&nbsp;Luabind,需要关联lua,特别是几十兆的boost,自己用无所谓,要用于小组开发,god&nbsp;dam&nbsp;n官僚的软件工程。<BR>3.现在相对越来越慢的CPU，大量的泛型技巧的编译速度实在令人难以忍受。<BR>4.接口化引擎是必然的，只有从lua底层作起。</P><img src ="http://www.cnitblog.com/linghuye/aggbug/1834.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2005-08-13 17:13 <a href="http://www.cnitblog.com/linghuye/archive/2005/08/13/1834.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>