??xml version="1.0" encoding="utf-8" standalone="yes"?>九九热久久免费视频,久久国产亚洲精品,久久久高清免费视频http://www.shnenglu.com/Husiwa/category/15242.htmlzh-cnThu, 18 Nov 2010 00:03:44 GMTThu, 18 Nov 2010 00:03:44 GMT60monodevelop 命opȝhttp://www.shnenglu.com/Husiwa/archive/2010/11/11/133310.htmlHusiwaHusiwaThu, 11 Nov 2010 06:45:00 GMThttp://www.shnenglu.com/Husiwa/archive/2010/11/11/133310.htmlhttp://www.shnenglu.com/Husiwa/comments/133310.htmlhttp://www.shnenglu.com/Husiwa/archive/2010/11/11/133310.html#Feedback0http://www.shnenglu.com/Husiwa/comments/commentRss/133310.htmlhttp://www.shnenglu.com/Husiwa/services/trackbacks/133310.htmlhttp://monodevelop.com/Developers/Articles/The_Command_System#Menus_and_Toolbars
命opȝ
本文阐述了Monodevelop命opȝ的工作机制以及开发者如何利用这些优势来写自q插g?/p>

1。基本概?/strong>
在阐qMonodevelop命opȝ的工作机制之前,我们先要了解两g?br>命o和用这些命令的菜单和工h是分开定义?br>命o的执行是取决于上下文的,比如说你在文本编辑器中调用delete和在工程目录树中调用delete虽然?/p>

是同一条命令,但是执行l果却是不一L?br>2。命令定?/strong>
命o都是要定义在"/MonoDevelop/Ide/Commands" q个扩展点下面,如下Q?br>

<Command id = "MonoDevelop.Ide.Commands.ProjectCommands.Run"
    defaultHandler 
= "MonoDevelop.Ide.Commands.RunHandler"
    icon 
= "gtk-execute"
    shortcut 
= "F5"
    description 
= "Run"
    _label 
= "Run" />


id:命o的标识,注意Q这个id一定要和已存在的枚丄型的全名Q包括命名空_保持一致。这个枚?/p>

cd会被用来定执行那个具体的命令?/p>

defaultHandler:是用来标识执行当前上下文中默认的命oc?/p>

iconQ在工具条和菜单栏中昄的图?/p>

_lable: 在菜单栏上显C的文本

description:昄在tooltip上的文字Q可选)

shortcut: 命o的快捷键

Toggle 命o
是用来在L本旁ҎCZ个是否触发状态的命oQ以及显C工h是否Ȁzȝ标识。这些命令用check

来标识。如下:

<Command id = "MonoDevelop.Ide.Commands.ProjectCommands.IncludeInBuild"
  type 
= "check"
 _label 
= "Build" />

 

如果有多个toggle命o怺排斥Q那么你可以用radiocd来标识?br>Custom commands 自定义命?br>自定义命令用来展C在菜单和工h上的自定义的窗体。如果要使用它,先将type属性设|ؓcustom?/p>

后在widget标签中指定相应的窗体类。如下:

<Command id = "MonoDevelop.Ide.Commands.ProjectCommands.ConfigurationSelector"
    type 
= "custom"
    widget 
= "MonoDevelop.Ide.Gui.ConfigurationComboBox"
    _label 
= "Active Configuration" />

 

Command Arrays 命ol?br>命ol是用来实现菜单栏中的选择列表?br>

<Command id = "MonoDevelop.Ide.Commands.WindowCommands.OpenWindowList"
    defaultHandler 
= "MonoDevelop.Ide.Commands.OpenWindowListHandler"
    type
="radio|array"
    _label 
= "Window List" />


注意Qarray和check可以同时使用Q也可以和radio一起用。一般来_命ol用来动态的在菜单和?/p>

h上生命令?br>

<Command id = "MonoDevelop.Ide.Commands.FileCommands.RecentFileList"
     defaultHandler 
= "MonoDevelop.Ide.Commands.RecentFileListHandler"
     type
="array"
     _label 
= "Recent Files" />

 


3。菜单和工具?/strong>

Menus and Toolbars 菜单栏和工具?br>菜单栏和工具条用相同的方式来定义。IDE提供了很多扩展点来定义主菜单Q主工具条,如下Q?/p>

CommandItem

Creates an item that will invoke the command identified by the id attribute. If the command

is actually a command array, it will create an item for each element in the command array.

SeparatorItem

ItemSet
创徏一个item的字菜单,它有两个属性_label和icon
用在工具栏上Q那是下拉式的

LinkItem
创徏打开|络q接的入?br>Creates a menu or toolbar entry that opens a web page in the default web browser. For

example:

 

<LinkItem id = "MonoDevelop" _label = "MonoDevelop" link = "http://www.monodevelop.com" />

 

4。执行命?/strong>

执行命o
牢记Q命令的执行和命令的上下文息息相?br>那什么是上下文呢Q上下文是拥有焦点的窗体,当焦Ҏ变的时候,上下文也随之而变。命令集p着

变ؓ可用或者不可用?br>q意呌我们每一个窗体定义命令执行类了吗Q非也,每个widget都有一个command dispathcroute.dang

当调用一个命令的时候,如果h焦点的widget没有handlerQ那么它׃传递给route上的下一个对象,

也就是父widget
如下图所C:

通常Qcommand routes会按照下面这个顺序来LQ?br>*拥有焦点的widget
*父widgetQ直到root widget
*全局command HandlerQ用这个来注册QIde.CommandServices.RegisterGlobalHandler(object)
*default handlerQ就是配|文件中的defaulterHandler

Implementing command handlers实现

 

[CommandHandler (FileCommands.Save)]
protected void OnSaveFile ()
{
     
// Do the save
}

 

FileCommands.Save是用来标记命令的枚D?/p>

Managing Command Status 更改命o状?br>打开monodevelopQ新Z个文Ӟ发现delete是禁用的Q输入一些字Q发现它可用用了Q点一些Q务列

表,发现它又不可以用了。这是怎么做到的呢Q?br>我们先要理解一件事:命opȝ会自动禁用不是该command route上的命o.q是在焦点发生改变的时候发

生的?br>如果命o的状态依附于应用内部的逻辑l构Q可用将它加入到一个特D的Command Update Handler?/p>

 

[CommandUpdateHandler (FileCommands.Save)]
protected void OnUpdateSaveFile (CommandInfo info)
{
    IViewContent content 
= window.ActiveViewContent as IViewContent;
    info.Enabled 
= content.IsDirty;
}

 

q条命o会在命opȝ惌知道命o的状态的时候调用。比如说菜单命oQ当菜单要显C的时候就调用Q?/p>

工具栏是周期性的调用?/p>

因ؓ命o更新和命令是一体的Q所以更新的Ҏ要和执行的方法在一起写?/p>

在command update handler 中,你可以用commandinfo对象来改变对象的状态。但q不限于此,你可?/p>

改变command的所有属性,比如说描q文字,可见性等{?/p>

Array command handlers

The default command handler

Startup Extension Path
q个Ҏ的commandhandler会在monodevelop启动的时候调用的Q你需要做两g事?br>首先Q将你的class 比如说myhandler加入到启动的扩展点,修改MonoDevelop.Ide.addin.xml 文g像这

P

<Extension path = "/MonoDevelop/Ide/StartupHandlers">
  
<Class class = "MyHandler"/>
</Extension>


接下来,完成q个cȝ实现

class MyHandler: CommandHandler
{
  
protected override void Run ()
  
{
    Console.Out.WriteLine(
"Hello World!");
  }
  
}

 

 

 



Husiwa 2010-11-11 14:45 发表评论
]]>
Orx-教程--7Ҏ--九天修订?/title><link>http://www.shnenglu.com/Husiwa/archive/2010/07/07/119534.html</link><dc:creator>Husiwa</dc:creator><author>Husiwa</author><pubDate>Wed, 07 Jul 2010 00:58:00 GMT</pubDate><guid>http://www.shnenglu.com/Husiwa/archive/2010/07/07/119534.html</guid><wfw:comment>http://www.shnenglu.com/Husiwa/comments/119534.html</wfw:comment><comments>http://www.shnenglu.com/Husiwa/archive/2010/07/07/119534.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/Husiwa/comments/commentRss/119534.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Husiwa/services/trackbacks/119534.html</trackback:ping><description><![CDATA[ <h2><a id="lD" name="lD">lD</a></h2> <div id="txhnjfr" class="level2"> <p>参看前面的教E?a class="wikilink1" title="cn:orx:tutorials:main" ><font color="#009900">基础</font></a>,<a class="wikilink1" title="cn:orx:tutorials:object" ><font color="#009900"> 对象创徏</font></a>,<a class="wikilink2" title="cn:orx:tutorials:clock" rel="nofollow"><font color="#ff3300"> 旉</font></a> , <a class="wikilink2" title="cn:orx:tutorials:frame" rel="nofollow"><font color="#ff3300">框架层次l构</font></a>Q?<a class="wikilink1" title="cn:orx:tutorials:anim" ><font color="#009900">动画</font></a>Q?a class="wikilink1" title="cn:orx:tutorials:viewport" ><font color="#009900"> 视口与摄像机</font></a>Q和 <a class="wikilink2" title="cn:orx:tutorials:sound" rel="nofollow"><font color="#ff3300">声音与音?</font></a>?br>q篇教程介绍了什么是Ҏ以及如何创徏它们<br>Ҏ是将曲线及其l合而成的一l数据(正uUѝ三角型辏V矩形或者线性)Q应用在不同cd的参C。如Q羃放、旋转、位|、速度、颜色等?br></p> <p>Ҏ在配|文件中讄Q仅仅只需要一行代码就可以在对象上使用q些Ҏ?br>可以有最?条Q意类型的曲线l合在一起Ş成一个特效?br>在同一旉Q可以有最?个特效应用于同一个对象上面?br></p> <p>Ҏ可以使用l对值或者相对|q取决于配置文g中Absolute标签?br>控制曲线的周期、相位、和振幅都是允许的?br>对于位置和速度Ҏ来说Q输出值可以用对象的方向 ??~放|以相Ҏ式应用于对象目前的状态?br></p> <p>q也允许我们创造极其拉风的视觉Ҏ?</p> <p>除非Ҏ已经~存在内存中Q否则特效参数全部在配置文g中进行调_q且使用退格键来即旉载?(cf.通过 <code>KeepInCache</code> 属性来实现内存的缓?.<br>比如_你不能调整正在运行的循环ҎQ因Z已经在默认的配置文g中定义好了。在q个试E序q行的时候,所有其它的Ҏ能够被更新?br></p> <p>通常说来Q随机值的使用可以l特效带来更多的变化?br>比如, 晃动方式的羃放(the wobble scale), 带颜色的闪光(the flash color) ?d式的Ud(the “attack” move) {特效就使用了少量的随机? </p> <p>像昄事g一P我们也可以注册特效的开始播攑֒停止的事件。因为@环时间是永远不会停下来的Q所以对应的停止事g(<code>orxFX_EVENT_STOP</code>)永远不会发生. 我们也会单的介绍一下如何一些个性数据(仅仅包含一个布值的l构Q添加到orxOBJECT中?sup><a class="fn_top" id="fnt__1" name="fnt__1"><font color="#436976">1)</font></a></sup><br>在事件的回调函数中,我们通过它,在特效开始的时候ؓ对象加锁Q在l束的时候解锁?br>我们使用锁是Z让soldier(士兵)在同一时刻只有一个特效在发挥作用?br>把这些东西写在这里,仅仅h教育意义?sup><a class="fn_top" id="fnt__2" name="fnt__2"><font color="#436976">2)</font></a></sup> </p> </div> <h2><a id="详细内容" name="详细内容">详细内容</a></h2> <div id="r99jj9x" class="level2"> <p>通常Q我们先载入配置文gQ创Z个时钟,然后注册更新函数Q最后,创徏我们的士兵和盒子对象。请?a class="wikilink1" title="cn:orx:tutorials:main" ><font color="#009900">之间的教E?/font></a>中获取更多信息?. </p> <p>然后Q我们注册输入和Ҏ事g </p> <pre class="code c">orxEvent_AddHandler<span id="vdpdr7z" class="br0"><font color="#66cc66">(</font></span>orxEVENT_TYPE_FX<span id="7rr9f7j" class="sy0"><font color="#66cc66">,</font></span> EventHandler<font color="#66cc66"><span id="j7lt7n9" class="br0">)</span><span id="9b7d9zd" class="sy0">;</span></font> orxEvent_AddHandler<span id="1zr77lz" class="br0"><font color="#66cc66">(</font></span>orxEVENT_TYPE_INPUT<span id="9j7pxzv" class="sy0"><font color="#66cc66">,</font></span> EventHandler<font color="#66cc66"><span id="1lt9dvj" class="br0">)</span><span id="zp7vzzz" class="sy0">;</span></font></pre> <p>大家可以看到Q在q两个事件中Q我们用了同一个回调函敎ͼEventHandlerQ? </p> <p>现在我们q速的扫一Dq“对象”数据l构?</p> <pre class="code c"><span id="1bpd9fd" class="kw4"><font color="#993333">typedef</font></span> <span id="9rll9pf" class="kw4"><font color="#993333">struct</font></span> MyObject <span id="1lfxt9r" class="br0"><font color="#66cc66">{</font></span> orxBOOL bLock<span id="pvth9nn" class="sy0"><font color="#66cc66">;</font></span> <span id="lx779t9" class="br0"><font color="#66cc66">}</font></span> MyObject<span id="rvlpld9" class="sy0"><font color="#66cc66">;</font></span></pre> <p>接下来,看看如何?orxObject_SetUserData()它l定到soldier?</p> <pre class="code c">MyObject <span id="d79pr9r" class="sy0"><font color="#66cc66">*</font></span>pstMyObject<span id="dzbf79p" class="sy0"><font color="#66cc66">;</font></span>   pstMyObject <span id="b917tb9" class="sy0"><font color="#66cc66">=</font></span> orxMemory_Allocate<span id="p7txfvl" class="br0"><font color="#66cc66">(</font></span><span id="7x9f9ft" class="kw4"><font color="#993333">sizeof</font></span><span id="97vzddb" class="br0"><font color="#66cc66">(</font></span>MyObject<font color="#66cc66"><span id="pzlhd9h" class="br0">)</span><span id="7nz99b9" class="sy0">,</span></font> orxMEMORY_TYPE_MAIN<font color="#66cc66"><span id="bl799nv" class="br0">)</span><span id="977999f" class="sy0">;</span></font> pstMyObject<span id="77h9p97" class="sy0"><font color="#66cc66">-></font></span>bLock <span id="bt7nzpp" class="sy0"><font color="#66cc66">=</font></span> orxFALSE<span id="vnjnj79" class="sy0"><font color="#66cc66">;</font></span>   orxObject_SetUserData<span id="7tpb9t7" class="br0"><font color="#66cc66">(</font></span>pstSoldier<span id="zvhdxfd" class="sy0"><font color="#66cc66">,</font></span> pstMyObject<font color="#66cc66"><span id="fpbvf7l" class="br0">)</span><span id="7197n79" class="sy0">;</span></font></pre> <p>现在看看如何在Update函数中用特?</p> <pre class="code c">orxSTRING zSelectedFX<span id="vhlhtzz" class="sy0"><font color="#66cc66">;</font></span>   <span id="bdz97r7" class="kw1"><font color="#b1b100">if</font></span><span id="lh7jl7x" class="br0"><font color="#66cc66">(</font></span>orxInput_IsActive<span id="7rdptjz" class="br0"><font color="#66cc66">(</font></span><span id="xtpj7ll" class="st0"><font color="#ff0000">"SelectWobble"</font></span><font color="#66cc66"><span id="xjvzv7z" class="br0">)</span><span id="vxtxbb7" class="br0">)</span></font> <span id="fh9t9zh" class="br0"><font color="#66cc66">{</font></span> zSelectedFX <span id="9nz9ztr" class="sy0"><font color="#66cc66">=</font></span> <span id="97dp9n7" class="st0"><font color="#ff0000">"WobbleFX"</font></span><span id="tvl79xf" class="sy0"><font color="#66cc66">;</font></span> <span id="91d7lpv" class="br0"><font color="#66cc66">}</font></span> <span id="pj979px" class="kw1"><font color="#b1b100">else</font></span> <span id="bn999b9" class="kw1"><font color="#b1b100">if</font></span><span id="z79n9xd" class="br0"><font color="#66cc66">(</font></span>orxInput_IsActive<span id="jfnpdjj" class="br0"><font color="#66cc66">(</font></span><span id="h9dx799" class="st0"><font color="#ff0000">"SelectCircle"</font></span><font color="#66cc66"><span id="9xrnrz7" class="br0">)</span><span id="fz7f7dl" class="br0">)</span></font> <span id="n79vhzh" class="br0"><font color="#66cc66">{</font></span> zSelectedFX <span id="71zl79r" class="sy0"><font color="#66cc66">=</font></span> <span id="ll777rz" class="st0"><font color="#ff0000">"CircleFX"</font></span><span id="7zl9t9x" class="sy0"><font color="#66cc66">;</font></span> <span id="dfvz797" class="br0"><font color="#66cc66">}</font></span>   <span id="7ft9999" class="br0"><font color="#66cc66">[</font></span>...<span id="pjp7tnt" class="br0"><font color="#66cc66">]</font></span>   <span id="pj7vpx7" class="co1"><em><font color="#808080">// Soldier not locked?</font></em></span> <span id="j9vjldd" class="kw1"><font color="#b1b100">if</font></span><font color="#66cc66"><span id="fp9bx7j" class="br0">(</span><span id="jvl7nnd" class="sy0">!</span><span id="9dxz7rp" class="br0">(</span><span id="zbjdzz7" class="br0">(</span></font>MyObject <font color="#66cc66"><span id="7bxj7rz" class="sy0">*</span><span id="rt79bbh" class="br0">)</span></font>orxObject_GetUserData<span id="nxfbd7b" class="br0"><font color="#66cc66">(</font></span>pstSoldier<font color="#66cc66"><span id="j7nh799" class="br0">)</span><span id="p79lfpn" class="br0">)</span><span id="vxnp79n" class="sy0">-></span></font>bLock<span id="7fzd9tt" class="br0"><font color="#66cc66">)</font></span> <span id="dfj7p79" class="br0"><font color="#66cc66">{</font></span> <span id="9799dlb" class="kw1"><font color="#b1b100">if</font></span><span id="xr7p79r" class="br0"><font color="#66cc66">(</font></span>orxInput_IsActive<span id="9p9tpx9" class="br0"><font color="#66cc66">(</font></span><span id="z79rd9z" class="st0"><font color="#ff0000">"ApplyFX"</font></span><span id="f7hvj79" class="br0"><font color="#66cc66">)</font></span> <span id="97j9f9h" class="sy0"><font color="#66cc66">&&</font></span> orxInput_HasNewStatus<span id="77f9vvd" class="br0"><font color="#66cc66">(</font></span><span id="zjfjf7b" class="st0"><font color="#ff0000">"ApplyFX"</font></span><font color="#66cc66"><span id="pbnbd9j" class="br0">)</span><span id="97lnbtt" class="br0">)</span></font> <span id="htpjxdt" class="br0"><font color="#66cc66">{</font></span> orxObject_AddFX<span id="f799x9h" class="br0"><font color="#66cc66">(</font></span>pstSoldier<span id="7nrvr99" class="sy0"><font color="#66cc66">,</font></span> zSelectedFX<font color="#66cc66"><span id="ldzdz7v" class="br0">)</span><span id="9z977r9" class="sy0">;</span></font> <span id="7nj7bj9" class="br0"><font color="#66cc66">}</font></span> <span id="7dzlpb9" class="br0"><font color="#66cc66">}</font></span></pre> <p>可以看到Q我们通过orxObject_GetUserData()q个函数得到了我们想要的数据Q向solder里添加特效的Ҏ跟添加声音的Ҏ如出一辙,用的都是q个函数orxObject_AddFX()?</p> <p>接下来,看看EventHandlerq个函数 </p> <p>首先是输入方面,q里只展CZ每次输入时哪个按键被使用了?</p> <pre class="code c"><span id="xtnbl97" class="kw1"><font color="#b1b100">if</font></span><span id="v9799pf" class="br0"><font color="#66cc66">(</font></span>_pstEvent<span id="97bx99t" class="sy0"><font color="#66cc66">-></font></span>eType <span id="77bp9f9" class="sy0"><font color="#66cc66">==</font></span> orxEVENT_TYPE_INPUT<span id="jf7bhb7" class="br0"><font color="#66cc66">)</font></span> <span id="fjvx7b7" class="br0"><font color="#66cc66">{</font></span> <span id="vxtxhpx" class="kw1"><font color="#b1b100">if</font></span><span id="7rn7lr7" class="br0"><font color="#66cc66">(</font></span>_pstEvent<span id="p9vxl79" class="sy0"><font color="#66cc66">-></font></span>eID <span id="999xrj9" class="sy0"><font color="#66cc66">==</font></span> orxINPUT_EVENT_ON<span id="lx77ndx" class="br0"><font color="#66cc66">)</font></span> <span id="nzj7r79" class="br0"><font color="#66cc66">{</font></span> orxINPUT_EVENT_PAYLOAD <span id="9lxb9b9" class="sy0"><font color="#66cc66">*</font></span>pstPayload<span id="nhvp7z9" class="sy0"><font color="#66cc66">;</font></span>   pstPayload <span id="r9tp7jx" class="sy0"><font color="#66cc66">=</font></span> <span id="9799999" class="br0"><font color="#66cc66">(</font></span>orxINPUT_EVENT_PAYLOAD <font color="#66cc66"><span id="79ht779" class="sy0">*</span><span id="zb9zv7l" class="br0">)</span></font>_pstEvent<span id="j7vxp79" class="sy0"><font color="#66cc66">-></font></span>pstPayload<span id="p9jx777" class="sy0"><font color="#66cc66">;</font></span>   <span id="97txvxn" class="kw1"><font color="#b1b100">if</font></span><span id="99999d9" class="br0"><font color="#66cc66">(</font></span>pstPayload<span id="znpjhhh" class="sy0"><font color="#66cc66">-></font></span>aeType<span id="77z7nn9" class="br0"><font color="#66cc66">[</font></span><span id="dnr7jzz" class="nu0"><font color="#cc66cc">1</font></span><span id="7pbvjz7" class="br0"><font color="#66cc66">]</font></span> <span id="p7rdr7z" class="sy0"><font color="#66cc66">!=</font></span> orxINPUT_TYPE_NONE<span id="7rlht9j" class="br0"><font color="#66cc66">)</font></span> <span id="rlftnld" class="br0"><font color="#66cc66">{</font></span> orxLOG<span id="zbnxjbz" class="br0"><font color="#66cc66">(</font></span><span id="h9lfjzj" class="st0"><font color="#ff0000">"[%s] triggered by '%s' + '%s'."</font></span><span id="bdzb79r" class="sy0"><font color="#66cc66">,</font></span> pstPayload<span id="7nbnzxp" class="sy0"><font color="#66cc66">-></font></span>zInputName<span id="v7xlnnd" class="sy0"><font color="#66cc66">,</font></span> orxInput_GetBindingName<span id="771h9h9" class="br0"><font color="#66cc66">(</font></span>pstPayload<span id="p9jv7xz" class="sy0"><font color="#66cc66">-></font></span>aeType<span id="9t99r99" class="br0"><font color="#66cc66">[</font></span>0<font color="#66cc66"><span id="97pj9b9" class="br0">]</span><span id="dp7dzpp" class="sy0">,</span></font> pstPayload<span id="7hj9z7t" class="sy0"><font color="#66cc66">-></font></span>aeID<span id="fr79pfn" class="br0"><font color="#66cc66">[</font></span>0<font color="#66cc66"><span id="r7d99fh" class="br0">]</span><span id="pz79hxf" class="br0">)</span><span id="bl97d79" class="sy0">,</span></font> orxInput_GetBindingName<span id="j7dztdb" class="br0"><font color="#66cc66">(</font></span>pstPayload<span id="vz9dxp7" class="sy0"><font color="#66cc66">-></font></span>aeType<span id="x7b9nv9" class="br0"><font color="#66cc66">[</font></span>1<font color="#66cc66"><span id="fppzndb" class="br0">]</span><span id="77jn999" class="sy0">,</span></font> pstPayload<span id="rdtpbjp" class="sy0"><font color="#66cc66">-></font></span>aeID<span id="7vf9dbj" class="br0"><font color="#66cc66">[</font></span>1<font color="#66cc66"><span id="9d99ld9" class="br0">]</span><span id="7j77h9r" class="br0">)</span><span id="979tftl" class="br0">)</span><span id="z9n9rzf" class="sy0">;</span></font> <span id="dvx7ff7" class="br0"><font color="#66cc66">}</font></span> <span id="tf7lzxx" class="kw1"><font color="#b1b100">else</font></span> <span id="77j9t9z" class="br0"><font color="#66cc66">{</font></span> orxLOG<span id="jlxr7l9" class="br0"><font color="#66cc66">(</font></span><span id="d77dpp9" class="st0"><font color="#ff0000">"[%s] triggered by '%s'."</font></span><span id="nrvz77r" class="sy0"><font color="#66cc66">,</font></span> pstPayload<span id="l7ft79n" class="sy0"><font color="#66cc66">-></font></span>zInputName<span id="vxlfjrp" class="sy0"><font color="#66cc66">,</font></span> orxInput_GetBindingName<span id="lnb97pr" class="br0"><font color="#66cc66">(</font></span>pstPayload<span id="7nzvhv7" class="sy0"><font color="#66cc66">-></font></span>aeType<span id="9bvp999" class="br0"><font color="#66cc66">[</font></span>0<font color="#66cc66"><span id="779xltb" class="br0">]</span><span id="nzlf779" class="sy0">,</span></font> pstPayload<span id="vhbnhpf" class="sy0"><font color="#66cc66">-></font></span>aeID<span id="7xjl7vp" class="br0"><font color="#66cc66">[</font></span>0<font color="#66cc66"><span id="bfpbndt" class="br0">]</span><span id="h9lhblb" class="br0">)</span><span id="dnhvxp7" class="br0">)</span><span id="x79tvfl" class="sy0">;</span></font> <span id="dvzdhf7" class="br0"><font color="#66cc66">}</font></span> <span id="dhb9t97" class="br0"><font color="#66cc66">}</font></span> <span id="jv9dpnd" class="br0"><font color="#66cc66">}</font></span></pre> <p>正如你所见,我们通过按下的是一个单键还是一个组合键来判断展CZ同的信息?</p> <p>我们仅用了两个首次输入点,因ؓ我们知道Q我们的配置文g中没有超q两个的l合键。尽orx支持最多四个组合键来做Z个单键?</p> <p>orxInput_GetBindingName() 函数l了我们一个输入的文字昄?</p> <p>注意Q这些名U在配置文g中也l定C对应的按键上面?</p> <p>现在来看下如何处理这个事?</p> <pre class="code c"><span id="9bpb79f" class="kw1"><font color="#b1b100">if</font></span><span id="nf7lpxx" class="br0"><font color="#66cc66">(</font></span>_pstEvent<span id="9rdpdb7" class="sy0"><font color="#66cc66">-></font></span>eType <span id="pb9zll7" class="sy0"><font color="#66cc66">==</font></span> orxEVENT_TYPE_FX<span id="9jdh9hp" class="br0"><font color="#66cc66">)</font></span> <span id="9lnt7b9" class="br0"><font color="#66cc66">{</font></span> orxFX_EVENT_PAYLOAD <span id="fbnrv7r" class="sy0"><font color="#66cc66">*</font></span>pstPayload<span id="b99zt99" class="sy0"><font color="#66cc66">;</font></span> orxOBJECT <span id="779d9hn" class="sy0"><font color="#66cc66">*</font></span>pstObject<span id="frvz77v" class="sy0"><font color="#66cc66">;</font></span>   pstPayload <span id="lf9tf7t" class="sy0"><font color="#66cc66">=</font></span> _pstEvent<span id="xzv7b7h" class="sy0"><font color="#66cc66">-></font></span>pstPayload<span id="7d9jvbb" class="sy0"><font color="#66cc66">;</font></span> pstObject <span id="t77b9vb" class="sy0"><font color="#66cc66">=</font></span> orxOBJECT<span id="jtxdf7b" class="br0"><font color="#66cc66">(</font></span>_pstEvent<span id="7dp9lr9" class="sy0"><font color="#66cc66">-></font></span>hRecipient<font color="#66cc66"><span id="77tpt9t" class="br0">)</span><span id="hb9zdxx" class="sy0">;</span></font>   <span id="nn7d79h" class="kw1"><font color="#b1b100">switch</font></span><span id="9b99rxf" class="br0"><font color="#66cc66">(</font></span>_pstEvent<span id="r79bv79" class="sy0"><font color="#66cc66">-></font></span>eID<span id="jvpdhzz" class="br0"><font color="#66cc66">)</font></span> <span id="9zd7jhh" class="br0"><font color="#66cc66">{</font></span> <span id="7t9pjjh" class="kw1"><font color="#b1b100">case</font></span> orxFX_EVENT_START<span id="rb7j9rr" class="sy0"><font color="#66cc66">:</font></span> orxLOG<span id="zb7z7j7" class="br0"><font color="#66cc66">(</font></span><span id="frfdxv7" class="st0"><font color="#ff0000">"FX <%s>@<%s> has started!"</font></span><span id="fh7fzj7" class="sy0"><font color="#66cc66">,</font></span> pstPayload<span id="prfjvlr" class="sy0"><font color="#66cc66">-></font></span>zFXName<span id="jvxlx7x" class="sy0"><font color="#66cc66">,</font></span> orxObject_GetName<span id="xzlnb9f" class="br0"><font color="#66cc66">(</font></span>pstObject<font color="#66cc66"><span id="fp9th9r" class="br0">)</span><span id="9v99bzh" class="br0">)</span><span id="777nz9z" class="sy0">;</span></font>   <span id="9pblxb7" class="kw1"><font color="#b1b100">if</font></span><span id="7tpb9pp" class="br0"><font color="#66cc66">(</font></span>pstObject <span id="1dhbvvv" class="sy0"><font color="#66cc66">==</font></span> pstSoldier<span id="1l7htrj" class="br0"><font color="#66cc66">)</font></span> <span id="np779bb" class="br0"><font color="#66cc66">{</font></span> <span id="prv9bbb" class="co1"><em><font color="#808080">// Locks it</font></em></span> <font color="#66cc66"><span id="9nrfz7b" class="br0">(</span><span id="z1nzjrj" class="br0">(</span></font>MyObject <font color="#66cc66"><span id="771r9h7" class="sy0">*</span><span id="j79p79x" class="br0">)</span></font>orxObject_GetUserData<span id="rbn9dv9" class="br0"><font color="#66cc66">(</font></span>pstObject<font color="#66cc66"><span id="nx77nld" class="br0">)</span><span id="7f99jtr" class="br0">)</span><span id="77j9xfl" class="sy0">-></span></font>bLock <span id="f7dpbr7" class="sy0"><font color="#66cc66">=</font></span> orxTRUE<span id="9nj7x9z" class="sy0"><font color="#66cc66">;</font></span> <span id="v779vn9" class="br0"><font color="#66cc66">}</font></span> <span id="z97999b" class="kw2"><strong>break</strong></span><span id="d7txbrj" class="sy0"><font color="#66cc66">;</font></span>   <span id="vbf77n9" class="kw1"><font color="#b1b100">case</font></span> orxSOUND_EVENT_STOP<span id="l9h7pjz" class="sy0"><font color="#66cc66">:</font></span> orxLOG<span id="v7d7b99" class="br0"><font color="#66cc66">(</font></span><span id="7r7pjrr" class="st0"><font color="#ff0000">"FX <%s>@<%s> has stoped!"</font></span><span id="b9hl9dl" class="sy0"><font color="#66cc66">,</font></span> pstPayload<span id="9x7lv9f" class="sy0"><font color="#66cc66">-></font></span>zFXName<span id="r9r9ff7" class="sy0"><font color="#66cc66">,</font></span> orxObject_GetName<span id="ffpbxft" class="br0"><font color="#66cc66">(</font></span>pstObject<font color="#66cc66"><span id="77n9r9b" class="br0">)</span><span id="nrdp7rb" class="br0">)</span><span id="77999vd" class="sy0">;</span></font>   <span id="hdz1v9z" class="kw1"><font color="#b1b100">if</font></span><span id="9jf7hhf" class="br0"><font color="#66cc66">(</font></span>pstObject <span id="97nzvnl" class="sy0"><font color="#66cc66">==</font></span> pstSoldier<span id="p9rb79p" class="br0"><font color="#66cc66">)</font></span> <span id="7pl9pp9" class="br0"><font color="#66cc66">{</font></span> <span id="nn799bj" class="co1"><em><font color="#808080">// Unlocks it</font></em></span> <font color="#66cc66"><span id="lr9t999" class="br0">(</span><span id="rb9rnnd" class="br0">(</span></font>MyObject <font color="#66cc66"><span id="bdp7tlt" class="sy0">*</span><span id="97bfrpp" class="br0">)</span></font>orxObject_GetUserData<span id="nrtr7dl" class="br0"><font color="#66cc66">(</font></span>pstObject<font color="#66cc66"><span id="7zjbnlb" class="br0">)</span><span id="77f99hf" class="br0">)</span><span id="vz7dhh7" class="sy0">-></span></font>bLock <span id="prd979x" class="sy0"><font color="#66cc66">=</font></span> orxFALSE<span id="bn9lxdt" class="sy0"><font color="#66cc66">;</font></span> <span id="jdxfjrh" class="br0"><font color="#66cc66">}</font></span> <span id="7htv9x9" class="kw2"><strong>break</strong></span><span id="p99d9ll" class="sy0"><font color="#66cc66">;</font></span> <span id="tpb7x9n" class="br0"><font color="#66cc66">}</font></span> <span id="n9hj9lb" class="br0"><font color="#66cc66">}</font></span></pre> <p>在soldier上的动画开始的时候,我们用自q数据l构来锁定它Q相应的Q停止的时候解锁?</p> <p>看完了代码部分,我们再去看看配置文g?</p> <p>首先看个单的Ҏ Q盒子上旋{的特效?</p> <pre class="code ini"><span id="9pl99bj" class="re0"><span id="r7f79vv" class="br0"><font color="#66cc66">[</font></span><font color="#0000ff">RotateLoopFX</font><span id="x999f9b" class="br0"><font color="#66cc66">]</font></span></span> <span id="ff79999" class="re1"><font color="#0000ff">SlotList</font></span> <span id="9nj9hx9" class="sy0"><font color="#66cc66">=</font></span><span id="thrrbrt" class="re2"><font color="#0000ff"> Rotate</font></span> <span id="77r9v7d" class="re1"><font color="#0000ff">Loop</font></span> <span id="l9hbvfl" class="sy0"><font color="#66cc66">=</font></span><span id="b7lxl79" class="re2"><font color="#0000ff"> true</font></span>   <span id="bdp97vd" class="re0"><span id="t9lzddl" class="br0"><font color="#66cc66">[</font></span><font color="#0000ff">Rotate</font><span id="llzpb7z" class="br0"><font color="#66cc66">]</font></span></span> <span id="lp9lzfx" class="re1"><font color="#0000ff">Type</font></span> <span id="zl9j7j9" class="sy0"><font color="#66cc66">=</font></span><span id="779v999" class="re2"><font color="#0000ff"> rotation</font></span> <span id="dxthl3h" class="re1"><font color="#0000ff">StartTime</font></span> <span id="5515fv1" class="sy0"><font color="#66cc66">=</font></span><span id="z5lf5pf" class="re2"><font color="#0000ff"> 0.0</font></span> <span id="ztfj55f" class="re1"><font color="#0000ff">EndTime</font></span> <span id="p535v15" class="sy0"><font color="#66cc66">=</font></span><span id="v5h5b5l" class="re2"><font color="#0000ff"> 2.0</font></span> <span id="xrth5rz" class="re1"><font color="#0000ff">Curve</font></span> <span id="blpv551" class="sy0"><font color="#66cc66">=</font></span><span id="rdx5v55" class="re2"><font color="#0000ff"> sine</font></span> <span id="5lpj33t" class="re1"><font color="#0000ff">Pow</font></span> <span id="dvrv3lb" class="sy0"><font color="#66cc66">=</font></span><span id="prnzfvl" class="re2"><font color="#0000ff"> 2.0</font></span> <span id="ztdznvl" class="re1"><font color="#0000ff">StartValue</font></span> <span id="53z1vpf" class="sy0"><font color="#66cc66">=</font></span><span id="5htf355" class="re2"><font color="#0000ff"> 0</font></span> <span id="rb5z5pp" class="re1"><font color="#0000ff">EndValue</font></span> <span id="5xjxt5n" class="sy0"><font color="#66cc66">=</font></span><span id="rjx1v51" class="re2"><font color="#0000ff"> 360</font></span>   <span id="53bd3rr" class="re0"><span id="5lvrx5r" class="br0"><font color="#66cc66">[</font></span><font color="#0000ff">Box</font><span id="555txvt" class="br0"><font color="#66cc66">]</font></span></span> <span id="npbn35z" class="re1"><font color="#0000ff">FXList</font></span> <span id="lx33d5n" class="sy0"><font color="#66cc66">=</font></span><span id="tvh33bj" class="re2"><font color="#0000ff"> RotateLoopFX</font></span></pre> <p>看到了吧Q特效是在它创徏之初直接应用在盒对象上面的,而不是在代码中?</p> <p>RotateLoopFX包含仅包含一个时间段QRotateQƈ且一直@环(attribute LoopQ?</p> <p>然后定义Rotates旉Dc时间的单位都是U,角度的单位都是度?</p> <p>定义q个旋{动画的时候,我们使用了一个正弦曲U,让他每两U旋?60度?</p> <p>下面看下我们的摇摆特效?</p> <pre class="code ini"><span id="55rlbb5" class="re0"><span id="nf555dn" class="br0"><font color="#66cc66">[</font></span><font color="#0000ff">WobbleFX</font><span id="5vrdb35" class="br0"><font color="#66cc66">]</font></span></span> <span id="hbdzt3h" class="re1"><font color="#0000ff">SlotList</font></span> <span id="3r5n5vl" class="sy0"><font color="#66cc66">=</font></span><span id="531xljh" class="re2"><font color="#0000ff"> Wobble</font></span>   <span id="33x5bvv" class="re0"><span id="xzlx3zh" class="br0"><font color="#66cc66">[</font></span><font color="#0000ff">Wobble</font><span id="5jt5xrj" class="br0"><font color="#66cc66">]</font></span></span> <span id="5tplvdt" class="re1"><font color="#0000ff">Type</font></span> <span id="v1b5f51" class="sy0"><font color="#66cc66">=</font></span><span id="hl3bn3x" class="re2"><font color="#0000ff"> scale</font></span> <span id="blpl555" class="re1"><font color="#0000ff">StartTime</font></span> <span id="3x5v15n" class="sy0"><font color="#66cc66">=</font></span><span id="hblzjbz" class="re2"><font color="#0000ff"> 0.0</font></span> <span id="vvjvp55" class="re1"><font color="#0000ff">EndTime</font></span> <span id="df5dh55" class="sy0"><font color="#66cc66">=</font></span><span id="p35b5zh" class="re2"><font color="#0000ff"> 1.0</font></span> <span id="blrl555" class="re1"><font color="#0000ff">Period</font></span> <span id="vft5555" class="sy0"><font color="#66cc66">=</font></span><span id="zvpdpv3" class="re2"><font color="#0000ff"> 0.2</font></span> <span id="5b5z55n" class="re1"><font color="#0000ff">Curve</font></span> <span id="z3tftb5" class="sy0"><font color="#66cc66">=</font></span><span id="5tn35rh" class="re2"><font color="#0000ff"> sine</font></span> <span id="ln5nzhv" class="re1"><font color="#0000ff">Amplification</font></span> <span id="d55hl5p" class="sy0"><font color="#66cc66">=</font></span><span id="df5n5l5" class="re2"><font color="#0000ff"> 0.0</font></span> <span id="tn355tj" class="re1"><font color="#0000ff">StartValue</font></span> <span id="5r5drz5" class="sy0"><font color="#66cc66">=</font></span><span id="33dp555" class="re2"><font color="#0000ff"> </font><span id="z3b5fph" class="br0"><font color="#66cc66">(</font></span><span id="5nhlz3j" class="nu0"><font color="#cc66cc">1.0</font></span><font color="#0000ff">, </font><span id="rjx55zz" class="nu0"><font color="#cc66cc">1.0</font></span><font color="#0000ff">, </font><span id="xr55r51" class="nu0"><font color="#cc66cc">1.0</font></span><span id="ph5f551" class="br0"><font color="#66cc66">)</font></span></span> <span id="53ztnv5" class="re1"><font color="#0000ff">EndValue</font></span> <span id="np35b33" class="sy0"><font color="#66cc66">=</font></span><span id="tl1pb53" class="re2"><font color="#0000ff"> </font><span id="d5xjn3b" class="br0"><font color="#66cc66">(</font></span><span id="tnvpbj5" class="nu0"><font color="#cc66cc">2.0</font></span><font color="#0000ff">, </font><span id="3h5vpf1" class="nu0"><font color="#cc66cc">2.0</font></span><font color="#0000ff">, </font><span id="z3d5blv" class="nu0"><font color="#cc66cc">1.0</font></span><span id="5njlxnf" class="br0"><font color="#66cc66">)</font></span><font color="#0000ff"> ~ </font><span id="npf55r5" class="br0"><font color="#66cc66">(</font></span><span id="h5fhbjb" class="nu0"><font color="#cc66cc">6.0</font></span><font color="#0000ff">, </font><span id="dpf5v35" class="nu0"><font color="#cc66cc">6.0</font></span><font color="#0000ff">, </font><span id="5vrvf35" class="nu0"><font color="#cc66cc">1.0</font></span><span id="t5f3b5b" class="br0"><font color="#66cc66">)</font></span></span></pre> <p>我们修改了scale属性,q赋予它一?code>StartValue</code>Q开始|?code>EndValue</code>Q结束|?br>他们都是用向量来表示的,如果不想使用M<a class="urlextern" title="http://baike.baidu.com/view/26056.htm?fr=ala0_1_1" rel="nofollow"><font color="#436976">各向异?/font></a>的|译者注Q专业名?a class="interwiki iw_wp" title="http://en.wikipedia.org/wiki/anisotropic" ><font color="#436976">anisotropic(各向异?</font></a>ȝ道确切意思)的话Q也可是使用floatcd来表C?br>虽然看v来我们正在用一?a class="interwiki iw_wp" title="http://en.wikipedia.org/wiki/isotropic" ><font color="#436976">isotropic(各向同性)</font></a><sup><a class="fn_top" id="fnt__3" name="fnt__3"><font color="#436976">3)</font></a></sup>的|q个<code>EndValue</code>也不q是一个随机倹{?br></p> <p>也就是说Q它的X和Y部分可能是完全统l的随机| </p> <p>除此之外Q我们用了一个简单的周期?.2 U的正u曲线Q它会播放1U钟?</p> <p>看到了吧Q我们将AmplificationQ增q) 的D?Q这是_随着旉的推q,曲线的振q会逐渐变低。注意:默认的Amplification?Q表CZ随时间变化,保持E_Q当值大?Ӟ振幅׃加大Q当值小?Ӟ振幅׃减少?</p> <p>看看圆是如何q动的?</p> <pre class="code ini"><span id="5dfb3zx" class="re0"><span id="lxzv5zx" class="br0"><font color="#66cc66">[</font></span><font color="#0000ff">CircleFX</font><span id="53dhr53" class="br0"><font color="#66cc66">]</font></span></span> <span id="5l5z5pf" class="re1"><font color="#0000ff">SlotList</font></span> <span id="5l555dv" class="sy0"><font color="#66cc66">=</font></span><span id="5x555v1" class="re2"><font color="#0000ff"> CircleX#CircleY</font></span> <span id="f5rdp5d" class="re1"><font color="#0000ff">KeepInCache</font></span> <span id="tdptnfl" class="sy0"><font color="#66cc66">=</font></span><span id="53lhj1n" class="re2"><font color="#0000ff"> true</font></span>   <span id="55rn5vt" class="re0"><span id="1vzbf5r" class="br0"><font color="#66cc66">[</font></span><font color="#0000ff">CircleX</font><span id="1tvzlf5" class="br0"><font color="#66cc66">]</font></span></span> <span id="1dh5lr5" class="re1"><font color="#0000ff">Type</font></span> <span id="h3j5x5x" class="sy0"><font color="#66cc66">=</font></span><span id="td5tnnn" class="re2"><font color="#0000ff"> position</font></span> <span id="5rvrdlj" class="re1"><font color="#0000ff">StartTime</font></span> <span id="jdz5pzr" class="sy0"><font color="#66cc66">=</font></span><span id="bv3jn35" class="re2"><font color="#0000ff"> 0.0</font></span> <span id="5vh3d3n" class="re1"><font color="#0000ff">EndTime</font></span> <span id="rlfr3nt" class="sy0"><font color="#66cc66">=</font></span><span id="55d5jtj" class="re2"><font color="#0000ff"> 1.0</font></span> <span id="1315dx5" class="re1"><font color="#0000ff">Curve</font></span> <span id="53lzb55" class="sy0"><font color="#66cc66">=</font></span><span id="xxb33n5" class="re2"><font color="#0000ff"> sine</font></span> <span id="13vpt53" class="re1"><font color="#0000ff">StartValue</font></span> <span id="13nrfhh" class="sy0"><font color="#66cc66">=</font></span><span id="dfzdz3h" class="re2"><font color="#0000ff"> </font><span id="tlxt3v5" class="br0"><font color="#66cc66">(</font></span><span id="hjnpv5r" class="nu0"><font color="#cc66cc">0.0</font></span><font color="#0000ff">, </font><span id="v3nb55l" class="nu0"><font color="#cc66cc">0.0</font></span><font color="#0000ff">, </font><span id="vfrvr3b" class="nu0"><font color="#cc66cc">0.0</font></span><span id="3z5lxjz" class="br0"><font color="#66cc66">)</font></span></span> <span id="5dr55rp" class="re1"><font color="#0000ff">EndValue</font></span> <span id="53v1z35" class="sy0"><font color="#66cc66">=</font></span><span id="j35fzbb" class="re2"><font color="#0000ff"> </font><span id="5t55hll" class="br0"><font color="#66cc66">(</font></span><font color="#0000ff">-</font><span id="1f5jvpp" class="nu0"><font color="#cc66cc">50.0</font></span><font color="#0000ff">, </font><span id="xj5xtrj" class="nu0"><font color="#cc66cc">0.0</font></span><font color="#0000ff">, </font><span id="j55x155" class="nu0"><font color="#cc66cc">0.0</font></span><span id="5vhl5d5" class="br0"><font color="#66cc66">)</font></span></span> <span id="vhjn3p5" class="re1"><font color="#0000ff">UseOrientation</font></span> <span id="pzl5dxf" class="sy0"><font color="#66cc66">=</font></span><span id="ph3pjrh" class="re2"><font color="#0000ff"> true</font></span> <span id="jd555nv" class="re1"><font color="#0000ff">UseScale</font></span> <span id="d3ptf3p" class="sy0"><font color="#66cc66">=</font></span><span id="fpthdbr" class="re2"><font color="#0000ff"> true</font></span>   <span id="nfnh5lj" class="re0"><span id="l55htbj" class="br0"><font color="#66cc66">[</font></span><font color="#0000ff">CircleY@CircleX</font><span id="t5nhdt5" class="br0"><font color="#66cc66">]</font></span></span> <span id="53fzddd" class="re1"><font color="#0000ff">Phase</font></span> <span id="535nbzj" class="sy0"><font color="#66cc66">=</font></span><span id="5t5v5vd" class="re2"><font color="#0000ff"> 0.25</font></span> <span id="bt3jll5" class="re1"><font color="#0000ff">StartValue</font></span> <span id="hh53p55" class="sy0"><font color="#66cc66">=</font></span><span id="fzbfrz3" class="re2"><font color="#0000ff"> </font><span id="dnj5bt3" class="br0"><font color="#66cc66">(</font></span><span id="55h5ltj" class="nu0"><font color="#cc66cc">0.0</font></span><font color="#0000ff">, -</font><span id="bd5b5j5" class="nu0"><font color="#cc66cc">25.0</font></span><font color="#0000ff">, </font><span id="355lxxx" class="nu0"><font color="#cc66cc">0.0</font></span><span id="vnz5zhp" class="br0"><font color="#66cc66">)</font></span></span> <span id="xrnp5r5" class="re1"><font color="#0000ff">EndValue</font></span> <span id="5hvzbrr" class="sy0"><font color="#66cc66">=</font></span><span id="xzj555l" class="re2"><font color="#0000ff"> </font><span id="ldhtx5h" class="br0"><font color="#66cc66">(</font></span><span id="p3jv3dl" class="nu0"><font color="#cc66cc">0.0</font></span><font color="#0000ff">, </font><span id="f3j3n55" class="nu0"><font color="#cc66cc">25.0</font></span><font color="#0000ff">, </font><span id="3plfb55" class="nu0"><font color="#cc66cc">0.0</font></span><span id="3xlx5xv" class="br0"><font color="#66cc66">)</font></span></span></pre> <p>Here we need to use 2 slots that affects the position so as to be able to have a circle motion.<br>The first slot, <code>CircleX</code>, will apply a sine curve on the X component of our object's position.<br>The second slot, <code>CircleY</code>, will apply the same curve (with a different amplitude) on its Y component.<br></p> <p>我们使用两个旉D|控制它的位置Q这h能做Z个圆形的q动。第一个时间段是CircleXQ他会应用在对象的X轴向的振q。第二个旉DCircleY,会生一个同样幅度的作用效果在Y轴上?</p> <p>如果我们不更改CircleY的相位,是不会发生圆形的q动?</p> <p>现在假设一个正弦曲U,在初始?<code>StartValue</code>)是相?Q准备增?</p> <p>在相??5的时候,到达中间点,会l箋增加 </p> <p>在相?.5的时候,到达最高?<code>EndValue</code>)Q准备下?</p> <p>在相?.75的时候,回到中间点,l箋下降 </p> <p>在相?.0的时候,p怽0Q?code>StartValue</code>Q是一L?</p> <p>注意Q这D|q正弦曲U的工作q程也同样适用于三角ŞQ但是却不适用于线形?</p> <p>我们略q大多数其他的特效,因ؓ那里没有什么我们不知道的新知识了?</p> <p>但是我们q是要迅速的看一眼翻转的ҎQ他会向我们展C如何翻转一个对象。就像Paper Mario Wii<sup><a class="fn_top" id="fnt__4" name="fnt__4"><font color="#436976">4)</font></a></sup>的风? </p> <pre class="code ini"><span id="hbdhd55" class="re0"><span id="5fjnzrp" class="br0"><font color="#66cc66">[</font></span><font color="#0000ff">FlipFX</font><span id="j3d5hp5" class="br0"><font color="#66cc66">]</font></span></span> <span id="331jl5r" class="re1"><font color="#0000ff">SlotList</font></span> <span id="z5j5n55" class="sy0"><font color="#66cc66">=</font></span><span id="v5hbfpf" class="re2"><font color="#0000ff"> Flip</font></span>   <span id="rnr3f5l" class="re0"><span id="nzlprzz" class="br0"><font color="#66cc66">[</font></span><font color="#0000ff">Flip@Wobble</font><span id="z5vjt5d" class="br0"><font color="#66cc66">]</font></span></span> <span id="55zjxd5" class="re1"><font color="#0000ff">EndTime</font></span> <span id="b5fr5h5" class="sy0"><font color="#66cc66">=</font></span><span id="fl35vtr" class="re2"><font color="#0000ff"> 0.5</font></span> <span id="n33515z" class="re1"><font color="#0000ff">Period</font></span> <span id="x1v5rz5" class="sy0"><font color="#66cc66">=</font></span><span id="5pj3v5p" class="re2"><font color="#0000ff"> 1.0</font></span> <span id="5j3fj1b" class="re1"><font color="#0000ff">Amplification</font></span> <span id="xl35v5n" class="sy0"><font color="#66cc66">=</font></span><span id="5d5rd5n" class="re2"><font color="#0000ff"> 1.0</font></span> <span id="d1lf5nd" class="re1"><font color="#0000ff">EndValue</font></span> <span id="z5pb3lj" class="sy0"><font color="#66cc66">=</font></span><span id="bp5v5v5" class="re2"><font color="#0000ff"> </font><span id="5z55b5l" class="br0"><font color="#66cc66">(</font></span><font color="#0000ff">-</font><span id="pdf555x" class="nu0"><font color="#cc66cc">1.0</font></span><font color="#0000ff">, </font><span id="5fbd5vb" class="nu0"><font color="#cc66cc">1.0</font></span><font color="#0000ff">, </font><span id="f5xjpfx" class="nu0"><font color="#cc66cc">1.0</font></span><span id="f5vzl55" class="br0"><font color="#66cc66">)</font></span></span></pre> <p>看到了吧Q我们很单的使用负值完成了q个效果! <img class="middle" alt="=)" src="http://orx-project.org/wiki/lib/images/smileys/icon_smile2.gif"><br>同时也注意到Q我们给<code>Period</code>(周期)设了一个明的倹{?br>我们选了一个两倍于定义的正弦曲U的<code>Period</code>Q这h们就只用了正u曲线的上升的那一半。同Ӟ我们也将<code>Amplification</code>改回?。(?#8221;“Wobble”“中被设ؓ0Q?</p> </div> <h2><a id="资源" name="资源">资源</a></h2> <div id="bxtxjzz" class="level2"> <p>源代? <a class="urlextern" title="https://orx.svn.sourceforge.net/svnroot/orx/trunk/tutorial/src/07_FX/07_FX.c" rel="nofollow"><font color="#800080">07_FX.c</font></a> </p> <p>配置文g: <a class="urlextern" title="https://orx.svn.sourceforge.net/svnroot/orx/trunk/tutorial/bin/07_FX.ini" rel="nofollow"><font color="#800080">07_FX.ini</font></a> </p> </div> <div id="l3dzdlb" class="footnotes"> <div id="3b55df5" class="fn"><sup><a class="fn_bot" id="fn__1" name="fn__1"><strong><font color="#436976">1)</font></strong></a></sup> 九天注:q里作者有点穿了Q需要看下面的例子才能懂Q作者定义了一个仅包含一个Bool值的l构MyObjectQ这里的括号Q作者打在了orxOBJECT后面Q我费解了N久,其实应该修饰个性数据,所以个整了一下?/div> <div id="tz5xj35" class="fn"><sup><a class="fn_bot" id="fn__2" name="fn__2"><strong><font color="#436976">2)</font></strong></a></sup> 九天注:本来一个对象可以同时有4个特效发生,q里作者仅仅是告诉你怎么使用“个性数?#8221;才这样做的,所以说仅仅h教育意义?/div> <div id="tf55d5n" class="fn"><sup><a class="fn_bot" id="fn__3" name="fn__3"><strong><font color="#436976">3)</font></strong></a></sup> Zg影响2D元素</div> <div id="l1dpt35" class="fn"><sup><a class="fn_bot" id="fn__4" name="fn__4"><strong><font color="#436976">4)</font></strong></a></sup> 九天注:Wii上的<a class="interwiki iw_wp" title="http://en.wikipedia.org/wiki/Paper Mario" ><font color="#436976">U片马里?/font></a>是个很出名的游戏Q作者的意思就是这里的flip描述的就是那个游戏里面的风格和效?/div> </div><img src ="http://www.shnenglu.com/Husiwa/aggbug/119534.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Husiwa/" target="_blank">Husiwa</a> 2010-07-07 08:58 <a href="http://www.shnenglu.com/Husiwa/archive/2010/07/07/119534.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Orx教程--7-Ҏhttp://www.shnenglu.com/Husiwa/archive/2010/07/06/119428.htmlHusiwaHusiwaTue, 06 Jul 2010 05:27:00 GMThttp://www.shnenglu.com/Husiwa/archive/2010/07/06/119428.htmlhttp://www.shnenglu.com/Husiwa/comments/119428.htmlhttp://www.shnenglu.com/Husiwa/archive/2010/07/06/119428.html#Feedback0http://www.shnenglu.com/Husiwa/comments/commentRss/119428.htmlhttp://www.shnenglu.com/Husiwa/services/trackbacks/119428.html阅读全文

Husiwa 2010-07-06 13:27 发表评论
]]>
Orx教程--4.动画http://www.shnenglu.com/Husiwa/archive/2010/07/05/119366.htmlHusiwaHusiwaMon, 05 Jul 2010 15:21:00 GMThttp://www.shnenglu.com/Husiwa/archive/2010/07/05/119366.htmlhttp://www.shnenglu.com/Husiwa/comments/119366.htmlhttp://www.shnenglu.com/Husiwa/archive/2010/07/05/119366.html#Feedback1http://www.shnenglu.com/Husiwa/comments/commentRss/119366.htmlhttp://www.shnenglu.com/Husiwa/services/trackbacks/119366.htmlhttp://orx-project.org/wiki/en/orx/tutorials/anim

lD

q篇教程只涉及了orx中最基本的动M用?br>
更多关于动画的东西在q里 猛击?

囑֮义了动画间所有可能的切换方式。动画通过一个唯一的字W串来引用。所有的切换和动画都是通过配置文g来创建的?br>当一个动画被h的时候,引擎会计从当前动画到请求动M间的链\
如果q个链\存在Q它会自动执行。用户将通过事g被告知动M时开始、停止、删节或者@环?br>如果我们不能具体制定M目标动画Q引擎就会很自然的沿着属性中定义的线路(C去)?br>也有一个方法来过q个寻\q程q且q速的指向一个动甅R?br>
详细内容

通常Q我们先载入config file(配置文g)Q创Z个viewport,创徏一个clock(旉)q且注册Update(更新)函数Q最后创Z个主对象?br>请从之前的教E中获得更多的信息?br>
现在我们开始从代码入手Q我们将会从本页的底部看到数据是如何l织的?br>在Update函数中,当输入GoLeftȀzȝ时候会触发WalkLeft动画QGoRightȀzȝ时候会触发WalkRight函数.
当没有激zL的输入Ӟ我们会移除目标动画,让这个图保持一个自然的状?br>
if(orxInput_IsActive("GoRight"))
{
  orxObject_SetTargetAnim(pstSoldier, 
"WalkRight");
}

else if(orxInput_IsActive("GoLeft"))
{
  orxObject_SetTargetAnim(pstSoldier, 
"WalkLeft");
}

else
{
  orxObject_SetTargetAnim(pstSoldier, orxNULL);
}

是q样Q如何从L当前动画切换到目标动d会通过q个矢量图来计算。如果需要切换,他们会自动播放?br>注意Q有很多的函数可以用高的方法来控制动画Q但?9%的时候,q两个函数是最常用的(orxObject_SetCurrentAnim() ?orxObject_SetTargetAnim()Q?br>
让我们来看一下,动画是如何通知我们发生了什么的Q比如,像同步语音一P?br>首先Q我们要向动M件注册回调函数?br>
orxEvent_AddHandler(orxEVENT_TYPE_ANIM, EventHandler);

好了Q让我们看下现在可以做什么了?br>我们说我们想要打印出对象中哪个动画被播放、停止、剪切或者@环。需要写一下的回调函数?br>
orxSTATUS orxFASTCALL EventHandler(const orxEVENT *_pstEvent)
{
orxANIM_EVENT_PAYLOAD 
*pstPayload;
 
pstPayload 
= (orxANIM_EVENT_PAYLOAD *)_pstEvent->pstPayload;
 
switch(_pstEvent->eID)
{
  
case orxANIM_EVENT_START:
    orxLOG(
"Animation <%s>@<%s> has started!", pstPayload->zAnimName, orxObject_GetName(orxOBJECT(_pstEvent->hRecipient)));
    
break;
 
  
case orxANIM_EVENT_STOP:
    orxLOG(
"Animation <%s>@<%s> has stoped!", pstPayload->zAnimName, orxObject_GetName(orxOBJECT(_pstEvent->hRecipient)));
    
break;
 
  
case orxANIM_EVENT_CUT:
    orxLOG(
"Animation <%s>@<%s> has been cut!", pstPayload->zAnimName, orxObject_GetName(orxOBJECT(_pstEvent->hRecipient)));
    
break;
 
  
case orxANIM_EVENT_LOOP:
    orxLOG(
"Animation <%s>@<%s> has looped!", pstPayload->zAnimName, orxObject_GetName(orxOBJECT(_pstEvent->hRecipient)));
    
break;
  }

 
  
return orxSTATUS_SUCCESS;
}

先得C事g的payload指针Q因为我们只是在q里传递动MӞ所以我们可以安全的payload 转化为orxANIM_EVENT_PAYLOADcdQ它?orxAnim.h中定义?br>如果我们在不同的事gQ译者注Q原文是even Ҏ上下文推断是作者拼写错误)cd中调用了同一个回调函敎ͼ我们首先会查看是否得到了一个动MӞ可以q样做:

if(_pstEvent->eType == orxEVENT_TYPE_ANIM)

最后,事g接收?_pstEvent→hRecipient)通常是播攑֊ȝ那个对象。将其用宏orxOBJECT()来{化ؓorOBJECTcd的对象?br>
现在让我们来看一眼数据方面的东西吧?br>首先Q我们需要定义一个动画集Q它会包含指定对象的动ȝ整个矢量图?br>动画集在不会再内存中重复Qƈ且它与矢量图相对应的多有动画和链路?br>在上面这个例子中Q我们又4个动d10条可以用来切换的链\?br>
[AnimSet]
AnimationList 
= IdleRight#WalkRight#IdleLeft#WalkLeft
 
LinkList 
= IdleRightLoop#IdleRight2Left#IdleRight2WalkRight#WalkRightLoop#WalkRight2IdleRight#IdleLeftLoop#IdleLeft2Right#IdleLeft2WalkLeft#WalkLeftLoop#WalkLeft2IdleLeft

现在我们来开始定义动画!
在这之前Qؓ了减文章篇q,我们要使用orx 配置文g的集成特性?br>先锚点的位置定义一V?br>也许你可能在对象教程中看C锚点的相关知识,锚点的位|信息将会匹配世界中的对象。如果没有确定的话,会把左上角做ؓ默认倹{?br>锚点可以通过语义关键字来定Q如Q?top, bottom, center, left and right也可以通过实际的值来定?br>
[Pivot]
Pivot 
= (15.031.00.0)

现在Q我们来定义从锚点承过来的囑փ对象。在我们q个例子中,它是一个位?Q包含了对象中所有的帧。因此基本的属性就?位图文g的名字和一帧的大小?br>
[FullGraphic@Pivot]
Texture     
= ../../data/anim/soldier_full.png
TextureSize 
= (32320)

创徏帧的准备工作都做好了?br>让我们定义所有都是right-oriented的动甅R一?个?br>
[AnimRight1@FullGraphic]
TextureCorner 
= (000)
 
[AnimRight2@FullGraphic]
TextureCorner 
= (0320)
 
[AnimRight3@FullGraphic]
TextureCorner 
= (0640)
 
[AnimRight4@FullGraphic]
TextureCorner 
= (3200)
 
[AnimRight5@FullGraphic]
TextureCorner 
= (32320)
 
[AnimRight6@FullGraphic]
TextureCorner 
= (32640)


看到了吧Q他们全都承于FullGraphicQ唯一能区分他们的属性就是TextureCorner. 好,我们已经定义完了所有的囑Ş对象Q他们蝲入的时候会转变为orxGraphicl构Q,下面定义动画本n。让我们从ideright动画开始说P它包含一个单帧ƈ持箋0.1U?br>
[IdleRight]
KeyData1      
= AnimRight6
KeyDuration1  
= 0.1


太简单了Q来试下第二个Q?br>
[WalkRight]
DefaultKeyDuration  
= 0.1
KeyData1            
= AnimRight1
KeyData2            
= AnimRight2
KeyData3            
= AnimRight3
KeyData4            
= AnimRight4
KeyData5            
= AnimRight5
KeyData6            
= AnimRight6


当我们用DefaultKeyDuration属性同时ؓ所有的帧定义时q不是很难。我们可以像idleright动画中所做的那样Q通过一个确定的键值来覆盖L一帧。我们如法炮制做出left-oriented动画。通常我们使用{囑Ş对象Ӟ我们会在代码运行中做这件事。但是那不是我们的目的!让我们来用与前面那个完全不同的方法来实现它!只有链\没有提到了让我们M它。基本的链\l构非常单,我们指定源动d目的动画?br>
[IdleRightLoop]
Source      
= IdleRight
Destination 
= IdleRight

q里Q我们有跟之前一L基本信息Q但是多了一个immediate属性做为键倹{这是_当我们处于IdleRight动画Ӟq且目标是WalkRight,我们不必{到IdleRight完成Q将直接完成q个动作Q这q了我们一个剪切动ȝҎ?正如在代码中看到的一栗当我们已经开始行走的时候,没有昑ּ的调用空闲动画,q是怎么做到的?看下从WalkRight到IdleRight的链路?br>
[IdleRight2WalkRight]
Source      
= IdleRight
Destination 
= WalkRight
Property    
= immediate


当我们再WalkRight状态ƈ且移除了目标动画Q引擎不得按照自然的路线C厅R这个意思是_它会选取高优先的链路。默认的优先U是8Q它的范围是0?5.在这里,优先U是9Q也是说当我们没有目标的时候,׃选取它。它会带我们回到IdleRight状态。这里也加了immdiate属性,q样Q我们就不必{?#8220;?#8221;q个循环完事再回?#8220;I闲”
 
注意Q这只是一个非常基本的图,用来阐述基本的动d换过E,但是q个pȝ的扩展性很高。比如假设这样一个场景:你想从坐的状态变的状态,中间没有别的q度。随着游戏的开发,你可能觉得在q两个状态间加一个站立的状态会比较好。这Ӟ你只需要再配置文g中添加这多出来的一步,而整个代码文仉不用更改?/em>

资源Q?br>
源文Ӟ 04_Anim.c
配置文gQ?span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: medium Simsun; WHITE-SPACE: normal; ORPHANS: 2; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" > 04_Anim.ini


Husiwa 2010-07-05 23:21 发表评论
]]>
wwwɫ˾þþƷ| þþþþþ| AVݺɫۺϾþ| ƷþþĻ| ɾþۺ777| һ97ձ˾þۺӰԺ| ?VþþƷ | þþþùɫAVѹۿ| ŮдþӰԺ| ˾Ʒþۺ | ƷþþþþҰ| 7ŷպۺľþþþ| ˸ŮѲžþþ| 91þþƷ˾þ| þþþþྫƷֱ| ޾Ʒtvþþþ| ľþþƷww16 | ۺϾþþƷɫ| ŷ츾þþþþò | 99þþƷһ| ɫۺϾþ| þþþAV| Ļ˾þ| AVպƷþþþþþ| ھƷþþӰԺ| ޾þþþþAV| vĻþ| þAV| ݺɫۺϾþ| ޹Ʒþ| ŷ츾BBBþþ| þþ޾Ʒ| þþƷ99þ㽶| ŷСþþþþþ | ˼˼þ99ѾƷ6| ɫav˾þô߽ӰԺ | ŷ޾þav| ŷþۺ| þþƷѹۿ| þþþùɫAVѿͼƬ| þ91ۺϹ91þþƷ|