<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Some reminiscences, some memories &#187; 游戏</title>
	<atom:link href="http://www.mikespook.com/index.php/tag/%e6%b8%b8%e6%88%8f/feed" rel="self" type="application/rss+xml" />
	<link>http://www.mikespook.com</link>
	<description>Just another boring day</description>
	<lastBuildDate>Tue, 10 Jan 2012 03:14:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>[翻译]6款用于在线游戏的基于 Html5 的 Javascript 游戏开发框架</title>
		<link>http://www.mikespook.com/2011/02/%e7%bf%bb%e8%af%916%e6%ac%be%e7%94%a8%e4%ba%8e%e5%9c%a8%e7%ba%bf%e6%b8%b8%e6%88%8f%e7%9a%84%e5%9f%ba%e4%ba%8e-html5-%e7%9a%84-javascript-%e6%b8%b8%e6%88%8f%e5%bc%80%e5%8f%91%e6%a1%86%e6%9e%b6/</link>
		<comments>http://www.mikespook.com/2011/02/%e7%bf%bb%e8%af%916%e6%ac%be%e7%94%a8%e4%ba%8e%e5%9c%a8%e7%ba%bf%e6%b8%b8%e6%88%8f%e7%9a%84%e5%9f%ba%e4%ba%8e-html5-%e7%9a%84-javascript-%e6%b8%b8%e6%88%8f%e5%bc%80%e5%8f%91%e6%a1%86%e6%9e%b6/#comments</comments>
		<pubDate>Thu, 24 Feb 2011 01:15:15 +0000</pubDate>
		<dc:creator>mikespook</dc:creator>
				<category><![CDATA[Game]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[game engine]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[游戏]]></category>
		<category><![CDATA[翻译]]></category>

		<guid isPermaLink="false">http://www.mikespook.com/?p=847</guid>
		<description><![CDATA[<style type="text/css">
#leftcontainerBox {
	float:left;
	position: fixed;
	top: 60%;
	left: 70px;
}
#leftcontainerBox .buttons {
	float:left;
	clear:both;
	margin:4px 4px 4px 4px;
	padding-bottom:2px;
}
#bottomcontainerBox {
	width: 50%;
	padding-top: 1px;
}
#bottomcontainerBox .buttons {
	float: left;
	margin: 4px 4px 4px 4px;
}
</style>
原文在此：http://www.web-delicious.com/5-html5-javascript-game-development-frameworks-for-online-game-developers/

六款游戏引擎/框架都是好东西。Akihabara 我之前翻译的系列教程Akihabara指南里有介绍。而单从介绍和各引擎网站上来看，我对 Rocket 引擎还是很有期待的。

1. Gamequery – 用于 jQuery 的 Javascript 游戏引擎

<span class="readmore"><a href="http://www.mikespook.com/2011/02/%e7%bf%bb%e8%af%916%e6%ac%be%e7%94%a8%e4%ba%8e%e5%9c%a8%e7%ba%bf%e6%b8%b8%e6%88%8f%e7%9a%84%e5%9f%ba%e4%ba%8e-html5-%e7%9a%84-javascript-%e6%b8%b8%e6%88%8f%e5%bc%80%e5%8f%91%e6%a1%86%e6%9e%b6/" title="[翻译]6款用于在线游戏的基于 Html5 的 Javascript 游戏开发框架">阅读全文——共1799字</a></span>]]></description>
			<content:encoded><![CDATA[<style type="text/css">
#leftcontainerBox {
	float:left;
	position: fixed;
	top: 60%;
	left: 70px;
}
#leftcontainerBox .buttons {
	float:left;
	clear:both;
	margin:4px 4px 4px 4px;
	padding-bottom:2px;
}
#bottomcontainerBox {
	width: 50%;
	padding-top: 1px;
}
#bottomcontainerBox .buttons {
	float: left;
	margin: 4px 4px 4px 4px;
}
</style>
<p>原文在此：<a href="http://www.web-delicious.com/5-html5-javascript-game-development-frameworks-for-online-game-developers/" target="_blank">http://www.web-delicious.com/5-html5-javascript-game-development-frameworks-for-online-game-developers/</a></p>
<p>六款游戏引擎/框架都是好东西。Akihabara 我之前翻译的系列教程<a href="http://www.mikespook.com/index.php/akihabara-tutorial" target="_blank">Akihabara指南</a>里有介绍。而单从介绍和各引擎网站上来看，我对 Rocket 引擎还是很有期待的。</p>
<h1>1. Gamequery – 用于 jQuery 的 Javascript 游戏引擎</h1>
<p><a title="gamequery html5 game framework" href="http://gamequery.onaluf.org/">GameQuery</a> 是 <a title="Opens in a new window" href="http://jquery.com/" target="_blank">jQuery</a> 的 <a title="Opens in a new window" href="http://plugins.jquery.com/project/gameQuery" target="_blank">插件</a>，可帮助 javascript 游戏开发者更加容易的添加游戏相关的类。它还处于开发的初期，并且在将来的版本中可能会有许多变化。项目托管于 <a title="Opens in a new window" href="http://github.com/onaluf/gameQuery" target="_blank">GitHub</a> （它之前是托管在 <a title="Opens in a new window" href="http://code.google.com/p/jquery-gamequery/" target="_blank">Google Code</a> 的），你可以在这个 <a title="Opens in a new window" href="http://twitter.com/gameQuery" target="_blank">twitter 页面</a> 关注每日的开发进度。</p>
<div id="attachment_3703">
<p style="text-align: center;"><a href="http://www.mikespook.com/wp-content/uploads/2011/02/javascript-game-engine-with-jQuery.png"><img class="alignnone size-full wp-image-849" title="javascript-game-engine-with-jQuery" src="http://www.mikespook.com/wp-content/uploads/2011/02/javascript-game-engine-with-jQuery.png" alt="" width="417" height="264" /></a></p>
<p style="text-align: center;">Gamequery &#8211; 用于 jQuery 的 Javascript 游戏引擎</p>
<p><span id="more-847"></span></p>
</div>
<h1>2. processingjs – Processing Visualization Language 的移植<strong><br />
</strong></h1>
<p><a title="processingjs html5 game framework" href="http://processingjs.org/">Processing.js</a> 使你的数据可视化，数字艺术、交互动画、教育影像、视频游戏等，基于 Web 标准并且无须任何插件。使用 Processing language 编写代码，包含进 Web 页面中，Processing.js 会处理剩余的工作。这不是魔法，但是也差不多了。</p>
<p>最初由 <a href="http://benfry.com/">Ben Fry</a> 和 <a href="http://reas.com/">Casey Reas</a> 开发，Processing 标准就像一种基于 Java 的开源编程语言，用以帮助电子艺术和可视化设计团体在可视化环境中学习基本的计算机编程。Processing.js 将这个带入了更高的级别，允许任何支持 HTML5 的浏览器运行 Processing 代码，包括当前版本的 Firefox， Safari，  Chrome， Opera 和将要到来的 Internet Explorer 9。Processing.js  为 Processing 和 Web 开发者带来了最好的 Web 上的可视化编程。</p>
<div id="attachment_3704">
<p style="text-align: center;"><a href="http://www.mikespook.com/wp-content/uploads/2011/02/processingjs-exhibition.png"><img class="alignnone size-full wp-image-851" title="processingjs-exhibition" src="http://www.mikespook.com/wp-content/uploads/2011/02/processingjs-exhibition.png" alt="" width="625" height="374" /></a></p>
<p style="text-align: center;">processingjs 展示</p>
</div>
<h1>3.LimeJS 是 HTML5游戏框架</h1>
<p><a href="http://www.limejs.com/">LimeJS</a> 是基于 HTML5 的游戏框架，用于快速构建运行于所有现代触摸屏和桌面浏览器的纯正体验的游戏。</p>
<div id="attachment_3705">
<p style="text-align: center;"><a href="http://www.mikespook.com/wp-content/uploads/2011/02/LimeJS-HTML5-Game-Framework.png"><img class="alignnone size-full wp-image-852" title="LimeJS-HTML5-Game-Framework" src="http://www.mikespook.com/wp-content/uploads/2011/02/LimeJS-HTML5-Game-Framework.png" alt="" width="377" height="194" /></a></p>
<p style="text-align: center;">LimeJS HTML5游戏框架</p>
</div>
<h1>4.Akihabara html5/javascript 游戏引擎<strong><em><br />
</em></strong></h1>
<p><a title="akihabara html5 game framework" href="http://www.kesiev.com/akihabara/"><em>Akihabara</em></a> 是一系列的库、工具、预设置，用于使用 Javascript 创建像素化的8/16位时期的游戏，不使用 Flash 插件的情况下运行于浏览器，使用了相当小、相当小的 <a href="http://en.wikipedia.org/wiki/HTML_5">HTML5</a> 一部分特性，这些特性在大多数浏览器上已经实现。</p>
<p>Akihabara 用于快速游戏/原型开发，虽然 Javascript 不是唯一的有趣的脚本语言，但是在每日午饭后的餐余编码时间（我通常的自由时间）都还是可以用用的。引擎并不够精巧，但是可用在  <a href="http://www.kesiev.com/akihabara/sshot/chrome.png">Google Chrome</a>， <a href="http://www.kesiev.com/akihabara/sshot/safari.png">Safari</a>， <a href="http://www.kesiev.com/akihabara/sshot/firefox.png">Firefox</a>， <a href="http://www.kesiev.com/akihabara/sshot/opera.png">Opera</a>， <a href="http://www.kesiev.com/akihabara/sshot/konqueror.png">Konqueror</a> 和 <a href="http://www.kesiev.com/akihabara/sshot/ie9beta.png">Internet Explorer 9 Beta</a> 的 IE 9 模式。游戏在所有支持的浏览器和平台上都采用同样的模式运行，全部都是可见的。使用 Javascript 带来的另一个好处：游戏可在流行的移动设备，如 <a href="http://www.kesiev.com/akihabara/sshot/iphone.jpg">iPhone/iPod</a>， <a href="http://www.kesiev.com/akihabara/sshot/wii.jpg">Nintendo Wii</a> 的 Internet 通道，<a href="http://www.kesiev.com/akihabara/sshot/android.png">Android</a> 设备和 iPad。</p>
<div id="attachment_3706">
<p style="text-align: center;"><a href="http://www.mikespook.com/wp-content/uploads/2011/02/www_kesiev_com_akihabara.png"><img class="alignnone size-full wp-image-853" title="www_kesiev_com_akihabara" src="http://www.mikespook.com/wp-content/uploads/2011/02/www_kesiev_com_akihabara.png" alt="" width="554" height="356" /></a></p>
<p style="text-align: center;">akihabara html5游戏框架</p>
</div>
<h1>5. Rocket引擎</h1>
<p>由专家级游戏开发者为了同样级别的游戏开发者构建，<a title="rocketpack engine" href="http://rocketpack.fi/engine/">Rocket 引擎</a> 是唯一一个无须插件的浏览器游戏开发集成解决方案。如果你对构建夸平台的单人游戏、Facebook 游戏或者基于浏览器的MMO感兴趣，那么注意了！</p>
<p><a href="http://www.warimals.com/"><strong>Warimals，首款由 Rocket 引擎构建的游戏！</strong></a></p>
<div id="attachment_3707">
<p style="text-align: center;"><a href="http://www.mikespook.com/wp-content/uploads/2011/02/Rocket-Pack-html5-game-framework.png"><img class="alignnone size-full wp-image-854" title="Rocket-Pack-html5-game-framework" src="http://www.mikespook.com/wp-content/uploads/2011/02/Rocket-Pack-html5-game-framework.png" alt="" width="632" height="337" /></a></p>
<p style="text-align: center;">Rocket 集成 html5游戏框架</p>
</div>
<h1>6. Effect Games</h1>
<p><a title="effectgames html5 game framework" href="http://www.effectgames.com/effect/">Effect Games</a> 提供免费的在线工具，用于构建、分享和玩你自己的基于浏览器的游戏。</p>
<p>游戏可以包含音效、音乐和多个包含用于视差卷动的瓦片和精灵的层。</p>
<p>用户可以在浏览器里玩游戏，无须任何新的插件或扩展。可发布游戏到网站或者博客，在SNS上分享，或提交到我们的特色游戏专区！</p>
<p>使用 JavaScript、定制的浏览器游戏引擎、关卡编辑器和开发工具包构建游戏。Effect 引擎支持  Mac OS X，Windows，Linux和所有流行浏览器，包括 IE， Firefox，  Chrome， Opera 和 Safari。</p>
<div id="attachment_3708">
<p style="text-align: center;"><a href="http://www.mikespook.com/wp-content/uploads/2011/02/www_effectgames_com_effect.png"><img class="alignnone size-full wp-image-855" title="www_effectgames_com_effect" src="http://www.mikespook.com/wp-content/uploads/2011/02/www_effectgames_com_effect.png" alt="" width="411" height="353" /></a></p>
<p style="text-align: center;">effectgames 在线游戏构建工具</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.mikespook.com/2011/02/%e7%bf%bb%e8%af%916%e6%ac%be%e7%94%a8%e4%ba%8e%e5%9c%a8%e7%ba%bf%e6%b8%b8%e6%88%8f%e7%9a%84%e5%9f%ba%e4%ba%8e-html5-%e7%9a%84-javascript-%e6%b8%b8%e6%88%8f%e5%bc%80%e5%8f%91%e6%a1%86%e6%9e%b6/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Achron，新的战略？</title>
		<link>http://www.mikespook.com/2009/08/achron%ef%bc%8c%e6%96%b0%e7%9a%84%e6%88%98%e7%95%a5%ef%bc%9f/</link>
		<comments>http://www.mikespook.com/2009/08/achron%ef%bc%8c%e6%96%b0%e7%9a%84%e6%88%98%e7%95%a5%ef%bc%9f/#comments</comments>
		<pubDate>Fri, 28 Aug 2009 02:40:03 +0000</pubDate>
		<dc:creator>mikespook</dc:creator>
				<category><![CDATA[Game]]></category>
		<category><![CDATA[即时战略]]></category>
		<category><![CDATA[时间旅行]]></category>
		<category><![CDATA[游戏]]></category>

		<guid isPermaLink="false">http://www.mikespook.com/?p=388</guid>
		<description><![CDATA[<style type="text/css">
#leftcontainerBox {
	float:left;
	position: fixed;
	top: 60%;
	left: 70px;
}
#leftcontainerBox .buttons {
	float:left;
	clear:both;
	margin:4px 4px 4px 4px;
	padding-bottom:2px;
}
#bottomcontainerBox {
	width: 50%;
	padding-top: 1px;
}
#bottomcontainerBox .buttons {
	float: left;
	margin: 4px 4px 4px 4px;
}
</style>
昨天看到Solidot的一篇报道：Solidot &#124; Achron：基于时间旅行的即时战略游戏看起来很有意思的样子。于是晚上抽空看了视频和开发人员的采访（http://www.escapistmagazine.com/videos/view/the-escapist-show/890-Episode-43-Hazardous-Softwares-Achron）。

从视频上看，似乎是将游戏按照时间线进行记录。玩家可以跳转到之前的时间线修改自己的行为，这种修改立刻就会对现有的战斗格局产生影响。看起来很有趣的样子。

<span class="readmore"><a href="http://www.mikespook.com/2009/08/achron%ef%bc%8c%e6%96%b0%e7%9a%84%e6%88%98%e7%95%a5%ef%bc%9f/" title="Achron，新的战略？">阅读全文——共546字</a></span>]]></description>
			<content:encoded><![CDATA[<style type="text/css">
#leftcontainerBox {
	float:left;
	position: fixed;
	top: 60%;
	left: 70px;
}
#leftcontainerBox .buttons {
	float:left;
	clear:both;
	margin:4px 4px 4px 4px;
	padding-bottom:2px;
}
#bottomcontainerBox {
	width: 50%;
	padding-top: 1px;
}
#bottomcontainerBox .buttons {
	float: left;
	margin: 4px 4px 4px 4px;
}
</style>
<p>昨天看到Solidot的一篇报道：<a class="l" onmousedown="return clk(0,'','','res','4','')" href="http://solidot.org/article.pl?sid=09/08/27/0621203" target="_blank">Solidot | <em>Achron</em>：基于时间旅行的即时战略游戏</a>看起来很有意思的样子。于是晚上抽空看了视频和开发人员的采访（<a href="http://www.escapistmagazine.com/videos/view/the-escapist-show/890-Episode-43-Hazardous-Softwares-Achron" target="_blank">http://www.escapistmagazine.com/videos/view/the-escapist-show/890-Episode-43-Hazardous-Softwares-Achron</a>）。</p>
<p>从视频上看，似乎是将游戏按照时间线进行记录。玩家可以跳转到之前的时间线修改自己的行为，这种修改立刻就会对现有的战斗格局产生影响。看起来很有趣的样子。</p>
<p>不过我觉得，这更类似一种geek行为。或许那些梦想自己能进行时间旅行的geek会热衷于这个游戏。对于普通玩家，这款游戏在时间跳跃的基础上，对于思维的要求明显有些过高了。</p>
<p>我个人还是比较期待这个游戏的，我非常希望知道他们是如何设计时间线逆转这种反常规的行为。尤其是如何平衡游戏可玩度和时间跳跃这种非常逻辑的事情的关系。</p>
<p>记得有一种时间旅行的观点提出，改变一个过去的事件，不会对现有世界、当前时间产生影响。而在改变的那个时间点，世界分叉了。变成了并行的互不干扰的两个平行世界。</p>
<p>这很类似SVN管理的分支概念……</p>
<p>不扯淡，上图，大家臆想一下：</p>
<p><img class="alignnone" title="Achron" src="http://www.mikespook.com/wp-content/uploads/2009/12/2b0b_AchronThroughTime9.jpg" alt="" width="500" height="313" /></p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">
<h3 class="r"><a class="l" onmousedown="return clk(0,'','','res','4','')" href="http://solidot.org/article.pl?sid=09/08/27/0621203" target="_blank">Solidot | <em>Achron</em>：基于时间旅行的即时战略游戏</a></h3>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.mikespook.com/2009/08/achron%ef%bc%8c%e6%96%b0%e7%9a%84%e6%88%98%e7%95%a5%ef%bc%9f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SB玩家，大家围观</title>
		<link>http://www.mikespook.com/2009/06/sb%e7%8e%a9%e5%ae%b6%ef%bc%8c%e5%a4%a7%e5%ae%b6%e5%9b%b4%e8%a7%82/</link>
		<comments>http://www.mikespook.com/2009/06/sb%e7%8e%a9%e5%ae%b6%ef%bc%8c%e5%a4%a7%e5%ae%b6%e5%9b%b4%e8%a7%82/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 09:35:17 +0000</pubDate>
		<dc:creator>mikespook</dc:creator>
				<category><![CDATA[My life]]></category>
		<category><![CDATA[SB]]></category>
		<category><![CDATA[游戏]]></category>

		<guid isPermaLink="false">http://www.mikespook.com/?p=366</guid>
		<description><![CDATA[<style type="text/css">
#leftcontainerBox {
	float:left;
	position: fixed;
	top: 60%;
	left: 70px;
}
#leftcontainerBox .buttons {
	float:left;
	clear:both;
	margin:4px 4px 4px 4px;
	padding-bottom:2px;
}
#bottomcontainerBox {
	width: 50%;
	padding-top: 1px;
}
#bottomcontainerBox .buttons {
	float: left;
	margin: 4px 4px 4px 4px;
}
</style>
别人发群上的，非常搞笑。转到这里，给大家围观一下……

/*&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;*/

某马甲悄悄的对JJ说：珊瑚舞，怎么才能离开公会啊？

<span class="readmore"><a href="http://www.mikespook.com/2009/06/sb%e7%8e%a9%e5%ae%b6%ef%bc%8c%e5%a4%a7%e5%ae%b6%e5%9b%b4%e8%a7%82/" title="SB玩家，大家围观">阅读全文——共1790字</a></span>]]></description>
			<content:encoded><![CDATA[<style type="text/css">
#leftcontainerBox {
	float:left;
	position: fixed;
	top: 60%;
	left: 70px;
}
#leftcontainerBox .buttons {
	float:left;
	clear:both;
	margin:4px 4px 4px 4px;
	padding-bottom:2px;
}
#bottomcontainerBox {
	width: 50%;
	padding-top: 1px;
}
#bottomcontainerBox .buttons {
	float: left;
	margin: 4px 4px 4px 4px;
}
</style>
<p>别人发群上的，非常搞笑。转到这里，给大家围观一下……</p>
<p>/*&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;*/<span id="more-366"></span></p>
<p>某马甲悄悄的对JJ说：珊瑚舞，怎么才能离开公会啊？<br />
珊瑚舞悄悄的对[某马甲]说：/GQUIT<br />
珊瑚舞离开了公会。<br />
[公会][幸福晨晨]：？？？<br />
珊瑚舞加入了公会。<br />
[公会][卡卡呦]：欢迎回来！<br />
[公会][幸福晨晨]：饿&#8230;..<br />
[公会][卡卡呦]：355，你怎么走了？<br />
[公会][珊瑚舞]：毛巾花露水的！有S B害我，问我怎么退出工会。<br />
[公会][幸福晨晨]：那你是怎么回答的？<br />
珊瑚舞离开了公会。<br />
[公会][幸福晨晨]：？<br />
[公会][卡卡呦]：&#8230;&#8230;汗!!<br />
[公会][疯狂暴击]：。。。。。。。<br />
[公会][卡卡哟]：。。。。。。。<br />
珊瑚舞加入了公会。<br />
[公会][卡卡呦]：再次欢迎355回来<br />
[公会][幸福晨晨]：JJ，你怎么又走了？<br />
[公会][珊瑚舞]：少装蒜，还不是你害我！<br />
[公会][幸福晨晨]：我怎么害你了？<br />
[公会][珊瑚舞]：你问我怎么回答退会指令的！<br />
[公会][幸福晨晨]：那你是怎么回答的啊？<br />
珊瑚舞离开了公会。<br />
[公会][幸福晨晨]：。。。。。这里不适合我?我回火星去了.<br />
幸福晨晨下线了。<br />
珊瑚舞加入了公会。<br />
[公会][卡卡呦]：再次再次欢迎355回来。。。<br />
[公会][疯狂暴击]：毛了毛了,老婆你退来退去的干什么呢？<br />
[公会][珊瑚舞]：。。。有人害我。。。<br />
[公会][疯狂暴击]：？<br />
[公会][珊瑚舞]：他们问我怎么退会<br />
[公会][疯狂暴击]：你怎么回答的？<br />
[公会][珊瑚舞]：。。。你猜？<br />
疯狂暴击离开了公会。<br />
[公会][珊瑚舞]：毛了毛了。。。BJ和我一样S B！！真没选错人.<br />
疯狂暴击加入了公会。<br />
[公会][珊瑚舞]：哈哈，回来啦？记得下次在前面加个空格哦。<br />
[公会][疯狂暴击]：在什么前面加空格？<br />
珊瑚舞离开了公会。<br />
[公会][卡卡哟]：。。。服了！！！<br />
[公会][卡卡哟]：在/gquit前面加空格，就行了。<br />
疯狂暴击开了公会<br />
[公会][卡卡哟]：。。。<br />
珊瑚舞加入了公会。<br />
[公会][珊瑚舞]J那个死人呢？！！！<br />
[公会][卡卡哟]：畏罪潜逃了。。。<br />
疯狂暴击加入了公会。<br />
[公会][疯狂暴击]：日，空格键坏了。<br />
[公会][魍魉魑魅俊]：怎么了？<br />
[公会][珊瑚舞]：有人骗我退出工会<br />
[公会][魍魉魑魅俊]：那你怎么回答的？<br />
[公会][珊瑚舞]：你少忽悠我！<br />
[公会][卡卡哟]：还是我来解释吧，这两个要再说没准又要退会了。<br />
卡卡哟离开了工会。<br />
[公会][珊瑚舞]：哈哈<br />
[公会][疯狂暴击]：。。。<br />
卡卡哟加入了工会。<br />
[公会][疯狂暴击]：退了就别回来了。。。<br />
[公会][卡卡哟]：NND，我的空格键也坏了，没注意。<br />
[公会][疯狂暴击]：哈哈，你也有今天。<br />
[公会][疯狂暴击]：就一个命令，瞧折腾的。下次别打英文命令了，打中文。<br />
[公会][卡卡哟]：中文命令是什么？<br />
疯狂暴击离开了工会。<br />
[公会][卡卡哟]：。。。<br />
[公会][珊瑚舞]：。。。。<br />
疯狂暴击加入了工会。<br />
[公会][疯狂暴击]：谁再和我说话我怒了啊！<br />
[公会][魍魉魑魅俊]：息怒息怒。。。<br />
[公会][卡卡哟]：我不说了。。。<br />
[公会][珊瑚舞]：。。。是不是打“/退出工会”了？<br />
[公会][疯狂暴击]：。。。你打错字了<br />
[公会][珊瑚舞]：哪个字？<br />
[公会][疯狂暴击]：应该是“公会”。<br />
魍魉魑魅俊离开了工会<br />
[公会][疯狂暴击]：。。。这和我没关系。。<br />
[公会][珊瑚舞]：跟我也没关系。。。。<br />
幸福晨晨上线了<br />
魍魉魑魅俊加入了工会<br />
[公会][Gavin]：真是猪头啊~~<br />
[公会][珊瑚舞]：up<br />
[公会][枫舞]：&#8230;&#8230;<br />
[公会][Gavin]：其实还有更加好玩的命令，例如/gdi**and<br />
[公会][珊瑚舞]：什么命令啊？打了一点反应都没有..<br />
[公会][魍魉魑魅俊]：我也是没有反应，ga你在忽悠我们吧？<br />
[公会][幸福晨晨]：/gdi**and<br />
SilverTimes已经成功解散<br />
[1-综合][奥格瑞玛][珊瑚舞]：饿。。。啊啊啊啊啊<br />
[1-综合][奥格瑞玛][Gavin]：=_=<br />
[1-综合][奥格瑞玛][枫舞]：=。=<br />
[1-综合][奥格瑞玛][逍遥]：靠！都给我回来！！！！ga你死定了！！！<br />
[1-综合][奥格瑞玛][Gavin]：= =||谁叫你打的。。。你当会长都不知道这个命令是解散公会的我有什么办法=。=</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikespook.com/2009/06/sb%e7%8e%a9%e5%ae%b6%ef%bc%8c%e5%a4%a7%e5%ae%b6%e5%9b%b4%e8%a7%82/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>在游戏中使用脚本语言</title>
		<link>http://www.mikespook.com/2009/05/%e5%9c%a8%e6%b8%b8%e6%88%8f%e4%b8%ad%e4%bd%bf%e7%94%a8%e8%84%9a%e6%9c%ac%e8%af%ad%e8%a8%80/</link>
		<comments>http://www.mikespook.com/2009/05/%e5%9c%a8%e6%b8%b8%e6%88%8f%e4%b8%ad%e4%bd%bf%e7%94%a8%e8%84%9a%e6%9c%ac%e8%af%ad%e8%a8%80/#comments</comments>
		<pubDate>Fri, 22 May 2009 05:55:34 +0000</pubDate>
		<dc:creator>mikespook</dc:creator>
				<category><![CDATA[Game]]></category>
		<category><![CDATA[NetBeans]]></category>
		<category><![CDATA[Demo]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[游戏]]></category>

		<guid isPermaLink="false">http://www.mikespook.com/?p=330</guid>
		<description><![CDATA[<style type="text/css">
#leftcontainerBox {
	float:left;
	position: fixed;
	top: 60%;
	left: 70px;
}
#leftcontainerBox .buttons {
	float:left;
	clear:both;
	margin:4px 4px 4px 4px;
	padding-bottom:2px;
}
#bottomcontainerBox {
	width: 50%;
	padding-top: 1px;
}
#bottomcontainerBox .buttons {
	float: left;
	margin: 4px 4px 4px 4px;
}
</style>
这只是一个有趣的探索，demo 使用 java 编写。模拟了一个龙与地下城类 RPG 游戏中，在不同的房间内移动的简单游戏场景。

阅读本文前，首先下载使用 Netbeans 6.5 建立的完整项目代码：下载。然后，我会用 UML 图的方式来说明如何在游戏中使用脚本，其中可能还会简介一下游戏中实体对象的建立和管理（不知道值得不值得另外写一篇文章来介绍了）。

I have a dream&#8230;

<span class="readmore"><a href="http://www.mikespook.com/2009/05/%e5%9c%a8%e6%b8%b8%e6%88%8f%e4%b8%ad%e4%bd%bf%e7%94%a8%e8%84%9a%e6%9c%ac%e8%af%ad%e8%a8%80/" title="在游戏中使用脚本语言">阅读全文——共3691字</a></span>]]></description>
			<content:encoded><![CDATA[<style type="text/css">
#leftcontainerBox {
	float:left;
	position: fixed;
	top: 60%;
	left: 70px;
}
#leftcontainerBox .buttons {
	float:left;
	clear:both;
	margin:4px 4px 4px 4px;
	padding-bottom:2px;
}
#bottomcontainerBox {
	width: 50%;
	padding-top: 1px;
}
#bottomcontainerBox .buttons {
	float: left;
	margin: 4px 4px 4px 4px;
}
</style>
<p>这只是一个有趣的探索，demo 使用 java 编写。模拟了一个龙与地下城类 RPG 游戏中，在不同的房间内移动的简单游戏场景。</p>
<p>阅读本文前，首先下载使用 Netbeans 6.5 建立的完整项目代码：<a href="http://www.mikespook.com/wp-content/uploads/2009/05/gamescripting.zip">下载</a>。然后，我会用 UML 图的方式来说明如何在游戏中使用脚本，其中可能还会简介一下游戏中实体对象的建立和管理（不知道值得不值得另外写一篇文章来介绍了）。</p>
<p>I have a dream&#8230;<span id="more-330"></span></p>
<p>现在要构建一个极为无聊的小世界。说它小，是因为我只打算让它有三个房间，三个房间之间两两互通的门。仅此而已。首先上图：<a href="http://www.mikespook.com/wp-content/uploads/2009/05/rooms.gif"><img class="alignright size-full wp-image-333" title="三个房间" src="http://www.mikespook.com/wp-content/uploads/2009/05/rooms.gif" alt="三个房间" width="241" height="241" /></a></p>
<p>我们假设左边上面的房间叫 room-1，右边上面的房间叫 room-2，下面的房间叫 room-3。玩家在这三个房间中穿行，当然，不可能是穿墙。人，一定是要走门的。如图。就这么简单的逻辑而已，不用脚本语言也能轻松完成。不过如果希望多来一点拓展性呢？比如，room-3 不允许等级在5级以下玩家进入；room-2 当十级以上玩家进入后就会自动瞬间移动到 room-1；门锁住以后就不能通过，更夸张一点，门锁住以后如果不把锁打坏就不能通过……可能性太多了。不用脚本的情况下，如果要将这么多都实现，是一件非常繁琐的事情。</p>
<p>好吧，让我们来看看那些游戏公司是怎么解决这个问题的。哦，需要说明的是，这里的解决方案仅仅是一个 demo，只用来解释原理。真正的环境中，还要更复杂一点，不过也就是复杂一点点而已。</p>
<p><a href="http://www.mikespook.com/wp-content/uploads/2009/05/gamescripting-e7b1bbe59bbe-1.jpg"><img class="alignleft size-medium wp-image-334" title="类图" src="http://www.mikespook.com/wp-content/uploads/2009/05/gamescripting-e7b1bbe59bbe-1-300x211.jpg" alt="类图" width="300" height="211" /></a>游戏中实体类如图设计，为了简化期间，没有实体管理器，所以也没有集成自统一的父类。</p>
<p>Ninny 类也就是玩家，有保存当前所在房间的成员变量。Room 类也就是房间，保存有在当前房间的玩家列表。Door 是描述门的类，保存了这个门连接的两个房间的列表。</p>
<p>为了简单期间，demo 中使用了 java 内置的 javascript 作为脚本语言，详情看<a href="http://java.sun.com/developer/technicalArticles/J2SE/Desktop/scripting/" target="_blank">这里</a>。</p>
<p><span style="text-decoration: line-through;">本来还想多写一点的，急着出门。算了，反正有代码，大家看看先。有空回头写。重点在 js 目录下的那几个脚本 enterDoor.js，exitDoor.js，enterRoom.js，exitRoom.js。</span></p>
<p>好，继续！</p>
<p>为了用起来方便，稍稍封装了一下Scripting的代码。大家直接看代码，不说话：</p>
<pre lang="Java" line="1">
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class Script {

    private final static ScriptEngineManager factory = new ScriptEngineManager();
    private final static ScriptEngine engine = factory.getEngineByName("JavaScript");

    public void put(String key, Object value) {
        engine.put(key, value);
    }

    public Object get(String key) {
        return engine.get(key);
    }

    public Object eval(String fileName) throws ScriptException {
        try {
            return engine.eval(new FileReader(System.getProperty("user.dir", ".") + "/js/" + fileName + ".js"));
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Script.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
}
</pre>
<p>从类图上可以看到，Door 和 Room 都实现了 Enterable 接口，两个方法：一个入 enter，一个出 exit。显然，当进入一个 Room 的时候，必须从另外一个房间出来。为了保证这个一致性，所以限定玩家不能穿墙只能走门：</p>
<pre lang="Java" line="1">
        Room r1 = new Room("room-1");
        Room r2 = new Room("room-2");
        Door d12 = new Door();
        d12.add(r1);
        d12.add(r2);
        Ninny player = new Ninny("ninny", r1);
        d12.enter(player);
</pre>
<p>在不用脚本的情况下怎么写这个 Door 的 enter 方法呢？首先判断一下 ninny 是不是跟 Door 在同一个房间；获得 ninny 的当前房间后 exit；获得门另一端的房间 enter。就是这么简单。不过考虑到前面说说的那种种可能性，为了拓展让我们来看一看用脚本是如何处理的：</p>
<pre lang="Java" line="1">
// Door 的 enter 方法
    public boolean enter(Ninny ninny) {
        Room currentRoom = ninny.getOwner();
        // 玩家在当前门所在的房间
        if(!member.containsKey(currentRoom.getName())) {
            return false;
        }
        // 门另一侧的房间
        Room nextRoom = getAnotherRoom(currentRoom);

        try {
            Script script = new Script();
            script.put("room1", currentRoom);
            script.put("room2", nextRoom);
            script.put("door", this);
            script.put("player", ninny);
            script.eval("enterDoor");
            System.out.println("enterDoor: " + script.get("message"));
            return Boolean.valueOf(script.get("result").toString());
        } catch (ScriptException ex) {
            Logger.getLogger(Door.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
    }
</pre>
<p>这里实际上 enter 什么也没有做，只是传递了一些数据到 Script，然后执行了 enterDoor 这个脚本：</p>
<pre lang="JavaScript" line="1">
importClass(Packages.foobar.Room);
importClass(Packages.foobar.Ninny);
importClass(Packages.foobar.Door);

room1.exit(player);
room2.enter(player);

var message = player.getName() + " enter from the room " + room1.getName() +  " to the romm " + room2.getName() + "!";
var result = true;
</pre>
<p>脚本也很简单，只是让玩家推出当前房间，进入下一个房间。如果房间对进入的玩家有等级要求，则只需：</p>
<pre lang="JavaScript" line="1">
importClass(Packages.foobar.Room);
importClass(Packages.foobar.Ninny);
importClass(Packages.foobar.Door);

var result = false;
var message = '';
if(room2.needLevel >= player.level ) {
    room1.exit(player);
    room2.enter(player);

    message = player.getName() + " enter from the room " + room1.getName() +  " to the romm " + room2.getName() + "!";
    result = true;
} else {
    message = player.getName() + " can't enter the romm " + room2.getName() + "! Level" + room2.needLevel +" needed!";
}
</pre>
<p>在我的例子代码中并没有这部分代码，实际上 Room、Door、Ninny 这几个类都应该从一个父类 Entity 中继承。这个 Entity 有一个 Map<String, Object> 的成员变量。通过 setAttr(String, Object) 和 getAttr(String) 两个方法就可以分别设置和获取每个 Entity 的属性。这样就可以在脚本中自由的使用各种属性来实现各种功能。<br />
通过 Enterable（可进入），Pickable（可捡起），Attackable（可攻击）等接口，调用对应的脚本来完成真正的游戏逻辑。<br />
其实那神秘的游戏脚本化就是这么简单。本来还想画几个序列图说明一下脚本的调用，实在有些困了。<br />
准备洗洗睡觉。尚未补充完整的内容，全当大家进阶学习吧。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikespook.com/2009/05/%e5%9c%a8%e6%b8%b8%e6%88%8f%e4%b8%ad%e4%bd%bf%e7%94%a8%e8%84%9a%e6%9c%ac%e8%af%ad%e8%a8%80/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Xnova是山寨版的 ogame？ogame 是作强了的山寨版？</title>
		<link>http://www.mikespook.com/2008/12/xnova%e6%98%af%e5%b1%b1%e5%af%a8%e7%89%88%e7%9a%84-ogame%ef%bc%9fogame-%e6%98%af%e4%bd%9c%e5%bc%ba%e4%ba%86%e7%9a%84%e5%b1%b1%e5%af%a8%e7%89%88%ef%bc%9f/</link>
		<comments>http://www.mikespook.com/2008/12/xnova%e6%98%af%e5%b1%b1%e5%af%a8%e7%89%88%e7%9a%84-ogame%ef%bc%9fogame-%e6%98%af%e4%bd%9c%e5%bc%ba%e4%ba%86%e7%9a%84%e5%b1%b1%e5%af%a8%e7%89%88%ef%bc%9f/#comments</comments>
		<pubDate>Wed, 24 Dec 2008 07:17:04 +0000</pubDate>
		<dc:creator>mikespook</dc:creator>
				<category><![CDATA[My life]]></category>
		<category><![CDATA[ogame]]></category>
		<category><![CDATA[xnova]]></category>
		<category><![CDATA[游戏]]></category>

		<guid isPermaLink="false">http://www.mikespook.com/index.php/archives/253</guid>
		<description><![CDATA[<style type="text/css">
#leftcontainerBox {
	float:left;
	position: fixed;
	top: 60%;
	left: 70px;
}
#leftcontainerBox .buttons {
	float:left;
	clear:both;
	margin:4px 4px 4px 4px;
	padding-bottom:2px;
}
#bottomcontainerBox {
	width: 50%;
	padding-top: 1px;
}
#bottomcontainerBox .buttons {
	float: left;
	margin: 4px 4px 4px 4px;
}
</style>
这里要说说 Xnova，哦，就是 ogame 泄露出来的代码。不是技术层面，技术层面没什么好说的。想了解的可以看 http://blog.csdn.net/lanphaday/category/493714.aspx。

最开始知道 ogame 代码泄露，是从赖勇浩（http://blog.csdn.net/lanphaday/）那里听说的。这哥们也够意思，直接给我传了一份代码过来。临近期末，准备课程论文，忙……（数日后）

今日得闲简单研究了一下。

<span class="readmore"><a href="http://www.mikespook.com/2008/12/xnova%e6%98%af%e5%b1%b1%e5%af%a8%e7%89%88%e7%9a%84-ogame%ef%bc%9fogame-%e6%98%af%e4%bd%9c%e5%bc%ba%e4%ba%86%e7%9a%84%e5%b1%b1%e5%af%a8%e7%89%88%ef%bc%9f/" title="Xnova是山寨版的 ogame？ogame 是作强了的山寨版？">阅读全文——共864字</a></span>]]></description>
			<content:encoded><![CDATA[<style type="text/css">
#leftcontainerBox {
	float:left;
	position: fixed;
	top: 60%;
	left: 70px;
}
#leftcontainerBox .buttons {
	float:left;
	clear:both;
	margin:4px 4px 4px 4px;
	padding-bottom:2px;
}
#bottomcontainerBox {
	width: 50%;
	padding-top: 1px;
}
#bottomcontainerBox .buttons {
	float: left;
	margin: 4px 4px 4px 4px;
}
</style>
<p style="text-align: left;">这里要说说 Xnova，哦，就是 ogame 泄露出来的代码。不是技术层面，技术层面没什么好说的。想了解的可以看 <a href="http://blog.csdn.net/lanphaday/category/493714.aspx" target="_blank">http://blog.csdn.net/lanphaday/category/493714.aspx</a>。</p>
<p style="text-align: left;">最开始知道 ogame 代码泄露，是从赖勇浩（<a href="http://blog.csdn.net/lanphaday/" target="_blank">http://blog.csdn.net/lanphaday/</a>）那里听说的。这哥们也够意思，直接给我传了一份代码过来。临近期末，准备课程论文，忙……（数日后）<br />
今日得闲简单研究了一下。<br />
首先要说的是README_GER.TXT 的内容。伴随 google translation 大体了解了Xnova 是什么。这里有两个地方值得注意：<br />
LICENCE<br />
=======<br />
G.N.U.<br />
(Please read LICENCE.txt for more informations)</p>
<p>INFORMATIONS<br />
============<br />
OGame Script based on UGamela<br />
Developed by XNova Team<br />
and XNova-Ugamela-World<br />
第一点说，XNova 是 GNU 协议，也就是 GPL 的。而不是像坊间所传是泄露的代码。所以在安装我手头这份代码显示的诸如“仅供学习研究，不能公开使用”纭纭完全是臆断了。<br />
第二点说，Ogame 是基于 UGamela。我估计是 Ogame 现在的运营公司从Xnova 手中购买了某个版本的代码。不确切，但是就从这个地方来看，是先有了 Xnova 后才有 ogame。</p>
<p>从程序角度来看 Xnova 不算非常优秀。使用 php4 编写的典型应用。有不少漏洞，同时在一些执行效率上欠缺考量。我甚至有点怀疑用这个程序，同时在线游戏人数能不能超过1000人。<br />
但是，从另外一个角度来看，在一个简陋的技术环境下建立的游戏，比如 ogame，成为了一个很多人追随的游戏。成功的原因肯定不是因为技术如何如何出色。</p>
<p><strong>游戏策划对于游戏的成败起到决定作用。</strong></p>
<p>所以例如暴雪这么多年作为游戏业的龙头老大，似乎对于游戏开发技术并没有太多建树。反倒是对于游戏题材、类型、内容等贡献颇为深刻。做游戏？反思啊，一定要反思啊！！！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikespook.com/2008/12/xnova%e6%98%af%e5%b1%b1%e5%af%a8%e7%89%88%e7%9a%84-ogame%ef%bc%9fogame-%e6%98%af%e4%bd%9c%e5%bc%ba%e4%ba%86%e7%9a%84%e5%b1%b1%e5%af%a8%e7%89%88%ef%bc%9f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

