??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲国产香蕉人人爽成AV片久久 ,亚洲综合伊人久久大杳蕉,久久精品亚洲乱码伦伦中文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="fb9xdpx" 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="f7zbrjt" 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="ddj7ff7" class="br0"><font color="#66cc66">(</font></span>orxEVENT_TYPE_FX<span id="77ztf99" class="sy0"><font color="#66cc66">,</font></span> EventHandler<font color="#66cc66"><span id="jlpxbt7" class="br0">)</span><span id="bvn7px9" class="sy0">;</span></font> orxEvent_AddHandler<span id="7vbrj9v" class="br0"><font color="#66cc66">(</font></span>orxEVENT_TYPE_INPUT<span id="h77rn9f" class="sy0"><font color="#66cc66">,</font></span> EventHandler<font color="#66cc66"><span id="fb9jd9v" class="br0">)</span><span id="7t9pbdf" class="sy0">;</span></font></pre> <p>大家可以看到Q在q两个事件中Q我们用了同一个回调函敎ͼEventHandlerQ? </p> <p>现在我们q速的扫一Dq“对象”数据l构?</p> <pre class="code c"><span id="9r17p7r" class="kw4"><font color="#993333">typedef</font></span> <span id="779nh7n" class="kw4"><font color="#993333">struct</font></span> MyObject <span id="97r77vp" class="br0"><font color="#66cc66">{</font></span> orxBOOL bLock<span id="1n9ptnp" class="sy0"><font color="#66cc66">;</font></span> <span id="1b99bb7" class="br0"><font color="#66cc66">}</font></span> MyObject<span id="np7hlx9" class="sy0"><font color="#66cc66">;</font></span></pre> <p>接下来,看看如何?orxObject_SetUserData()它l定到soldier?</p> <pre class="code c">MyObject <span id="f77nx1v" class="sy0"><font color="#66cc66">*</font></span>pstMyObject<span id="r7x9x7r" class="sy0"><font color="#66cc66">;</font></span>   pstMyObject <span id="l717n99" class="sy0"><font color="#66cc66">=</font></span> orxMemory_Allocate<span id="9brt7db" class="br0"><font color="#66cc66">(</font></span><span id="th1r9zp" class="kw4"><font color="#993333">sizeof</font></span><span id="djhb7hx" class="br0"><font color="#66cc66">(</font></span>MyObject<font color="#66cc66"><span id="9pnhnx9" class="br0">)</span><span id="r77hbf9" class="sy0">,</span></font> orxMEMORY_TYPE_MAIN<font color="#66cc66"><span id="hjzbhzj" class="br0">)</span><span id="tv7x7lb" class="sy0">;</span></font> pstMyObject<span id="d79rlbv" class="sy0"><font color="#66cc66">-></font></span>bLock <span id="ff7h7f9" class="sy0"><font color="#66cc66">=</font></span> orxFALSE<span id="lfj79vn" class="sy0"><font color="#66cc66">;</font></span>   orxObject_SetUserData<span id="xjxbl7j" class="br0"><font color="#66cc66">(</font></span>pstSoldier<span id="pp79tnf" class="sy0"><font color="#66cc66">,</font></span> pstMyObject<font color="#66cc66"><span id="hrh7v1d" class="br0">)</span><span id="7p97r99" class="sy0">;</span></font></pre> <p>现在看看如何在Update函数中用特?</p> <pre class="code c">orxSTRING zSelectedFX<span id="v7fvff9" class="sy0"><font color="#66cc66">;</font></span>   <span id="rrpjf7j" class="kw1"><font color="#b1b100">if</font></span><span id="b7hd1dl" class="br0"><font color="#66cc66">(</font></span>orxInput_IsActive<span id="ln7jv99" class="br0"><font color="#66cc66">(</font></span><span id="ffv7r9h" class="st0"><font color="#ff0000">"SelectWobble"</font></span><font color="#66cc66"><span id="9z7rdb7" class="br0">)</span><span id="zzlp7p9" class="br0">)</span></font> <span id="9fnhr9t" class="br0"><font color="#66cc66">{</font></span> zSelectedFX <span id="x7tnh1z" class="sy0"><font color="#66cc66">=</font></span> <span id="d9bl1l9" class="st0"><font color="#ff0000">"WobbleFX"</font></span><span id="xh7f9vt" class="sy0"><font color="#66cc66">;</font></span> <span id="xjt77fx" class="br0"><font color="#66cc66">}</font></span> <span id="7p99fjj" class="kw1"><font color="#b1b100">else</font></span> <span id="fh7fzbl" class="kw1"><font color="#b1b100">if</font></span><span id="hb77f99" class="br0"><font color="#66cc66">(</font></span>orxInput_IsActive<span id="fzxj7lb" class="br0"><font color="#66cc66">(</font></span><span id="rjnj7bh" class="st0"><font color="#ff0000">"SelectCircle"</font></span><font color="#66cc66"><span id="d7jnzx9" class="br0">)</span><span id="9jrlp79" class="br0">)</span></font> <span id="n9hl7r9" class="br0"><font color="#66cc66">{</font></span> zSelectedFX <span id="9hpjt79" class="sy0"><font color="#66cc66">=</font></span> <span id="np999db" class="st0"><font color="#ff0000">"CircleFX"</font></span><span id="7rzj799" class="sy0"><font color="#66cc66">;</font></span> <span id="jln79t7" class="br0"><font color="#66cc66">}</font></span>   <span id="d9x9d9d" class="br0"><font color="#66cc66">[</font></span>...<span id="ldp7999" class="br0"><font color="#66cc66">]</font></span>   <span id="npln9bp" class="co1"><em><font color="#808080">// Soldier not locked?</font></em></span> <span id="vzjxrtd" class="kw1"><font color="#b1b100">if</font></span><font color="#66cc66"><span id="dhz9bl9" class="br0">(</span><span id="ztdrtr1" class="sy0">!</span><span id="vpr7xh9" class="br0">(</span><span id="pzt797b" class="br0">(</span></font>MyObject <font color="#66cc66"><span id="9tjd79d" class="sy0">*</span><span id="x7zrvdn" class="br0">)</span></font>orxObject_GetUserData<span id="d9hjfn7" class="br0"><font color="#66cc66">(</font></span>pstSoldier<font color="#66cc66"><span id="77d7x99" class="br0">)</span><span id="pht7btx" class="br0">)</span><span id="l9fpbrd" class="sy0">-></span></font>bLock<span id="d7f9b9z" class="br0"><font color="#66cc66">)</font></span> <span id="xx7xzhr" class="br0"><font color="#66cc66">{</font></span> <span id="799dfv9" class="kw1"><font color="#b1b100">if</font></span><span id="jbv99r7" class="br0"><font color="#66cc66">(</font></span>orxInput_IsActive<span id="777nx9b" class="br0"><font color="#66cc66">(</font></span><span id="99n9zl7" class="st0"><font color="#ff0000">"ApplyFX"</font></span><span id="d7fbll9" class="br0"><font color="#66cc66">)</font></span> <span id="n79jn9r" class="sy0"><font color="#66cc66">&&</font></span> orxInput_HasNewStatus<span id="97rv9n9" class="br0"><font color="#66cc66">(</font></span><span id="nhjn7xn" class="st0"><font color="#ff0000">"ApplyFX"</font></span><font color="#66cc66"><span id="lf7d79p" class="br0">)</span><span id="b79vpxp" class="br0">)</span></font> <span id="pz7h97t" class="br0"><font color="#66cc66">{</font></span> orxObject_AddFX<span id="nplpj9z" class="br0"><font color="#66cc66">(</font></span>pstSoldier<span id="z7jnz7d" class="sy0"><font color="#66cc66">,</font></span> zSelectedFX<font color="#66cc66"><span id="r7bfp7z" class="br0">)</span><span id="f777h19" class="sy0">;</span></font> <span id="vnh7f97" class="br0"><font color="#66cc66">}</font></span> <span id="fv7lhnr" 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="79xlfl7" class="kw1"><font color="#b1b100">if</font></span><span id="9jdj77r" class="br0"><font color="#66cc66">(</font></span>_pstEvent<span id="9vh99h9" class="sy0"><font color="#66cc66">-></font></span>eType <span id="tn9lfvf" class="sy0"><font color="#66cc66">==</font></span> orxEVENT_TYPE_INPUT<span id="7999dh9" class="br0"><font color="#66cc66">)</font></span> <span id="lpj9fz7" class="br0"><font color="#66cc66">{</font></span> <span id="rbp99dt" class="kw1"><font color="#b1b100">if</font></span><span id="7999nzj" class="br0"><font color="#66cc66">(</font></span>_pstEvent<span id="pztl1dj" class="sy0"><font color="#66cc66">-></font></span>eID <span id="9hbp7d9" class="sy0"><font color="#66cc66">==</font></span> orxINPUT_EVENT_ON<span id="n77fj79" class="br0"><font color="#66cc66">)</font></span> <span id="7fzdptx" class="br0"><font color="#66cc66">{</font></span> orxINPUT_EVENT_PAYLOAD <span id="tvf7txx" class="sy0"><font color="#66cc66">*</font></span>pstPayload<span id="rdxp7rh" class="sy0"><font color="#66cc66">;</font></span>   pstPayload <span id="xxz7ndt" class="sy0"><font color="#66cc66">=</font></span> <span id="r7l9z9t" class="br0"><font color="#66cc66">(</font></span>orxINPUT_EVENT_PAYLOAD <font color="#66cc66"><span id="9xjd9dj" class="sy0">*</span><span id="ph7fpx7" class="br0">)</span></font>_pstEvent<span id="fxtn79x" class="sy0"><font color="#66cc66">-></font></span>pstPayload<span id="b9xhpx9" class="sy0"><font color="#66cc66">;</font></span>   <span id="jd7bl7h" class="kw1"><font color="#b1b100">if</font></span><span id="btvrxvp" class="br0"><font color="#66cc66">(</font></span>pstPayload<span id="fhl7rh7" class="sy0"><font color="#66cc66">-></font></span>aeType<span id="hvp7999" class="br0"><font color="#66cc66">[</font></span><span id="lpbnppp" class="nu0"><font color="#cc66cc">1</font></span><span id="hzd77xp" class="br0"><font color="#66cc66">]</font></span> <span id="hz7j9xf" class="sy0"><font color="#66cc66">!=</font></span> orxINPUT_TYPE_NONE<span id="vh79hnr" class="br0"><font color="#66cc66">)</font></span> <span id="999b9b9" class="br0"><font color="#66cc66">{</font></span> orxLOG<span id="999n99z" class="br0"><font color="#66cc66">(</font></span><span id="77d9x9t" class="st0"><font color="#ff0000">"[%s] triggered by '%s' + '%s'."</font></span><span id="zjdr7jz" class="sy0"><font color="#66cc66">,</font></span> pstPayload<span id="1bzll7f" class="sy0"><font color="#66cc66">-></font></span>zInputName<span id="7n79799" class="sy0"><font color="#66cc66">,</font></span> orxInput_GetBindingName<span id="jtx99f9" class="br0"><font color="#66cc66">(</font></span>pstPayload<span id="l779xnb" class="sy0"><font color="#66cc66">-></font></span>aeType<span id="999v7td" class="br0"><font color="#66cc66">[</font></span>0<font color="#66cc66"><span id="7pbnx79" class="br0">]</span><span id="r7pz7rf" class="sy0">,</span></font> pstPayload<span id="l9x7rf9" class="sy0"><font color="#66cc66">-></font></span>aeID<span id="9fz99px" class="br0"><font color="#66cc66">[</font></span>0<font color="#66cc66"><span id="zt77lt9" class="br0">]</span><span id="llfjdtd" class="br0">)</span><span id="x9tdph7" class="sy0">,</span></font> orxInput_GetBindingName<span id="ld7tjzl" class="br0"><font color="#66cc66">(</font></span>pstPayload<span id="7b7h9xl" class="sy0"><font color="#66cc66">-></font></span>aeType<span id="lrl99ld" class="br0"><font color="#66cc66">[</font></span>1<font color="#66cc66"><span id="7j9v9p7" class="br0">]</span><span id="b1vzb9x" class="sy0">,</span></font> pstPayload<span id="d99r99h" class="sy0"><font color="#66cc66">-></font></span>aeID<span id="lnh77lt" class="br0"><font color="#66cc66">[</font></span>1<font color="#66cc66"><span id="7h97n9f" class="br0">]</span><span id="77p77xf" class="br0">)</span><span id="x9l99bh" class="br0">)</span><span id="f9ztxn7" class="sy0">;</span></font> <span id="fhrlf77" class="br0"><font color="#66cc66">}</font></span> <span id="7dh7bj7" class="kw1"><font color="#b1b100">else</font></span> <span id="jbnzbrl" class="br0"><font color="#66cc66">{</font></span> orxLOG<span id="9xr19pd" class="br0"><font color="#66cc66">(</font></span><span id="ln9vbrd" class="st0"><font color="#ff0000">"[%s] triggered by '%s'."</font></span><span id="xp7ntrz" class="sy0"><font color="#66cc66">,</font></span> pstPayload<span id="7fr77b9" class="sy0"><font color="#66cc66">-></font></span>zInputName<span id="j79drph" class="sy0"><font color="#66cc66">,</font></span> orxInput_GetBindingName<span id="b79x7xn" class="br0"><font color="#66cc66">(</font></span>pstPayload<span id="ph7hx1j" class="sy0"><font color="#66cc66">-></font></span>aeType<span id="rtlz7rf" class="br0"><font color="#66cc66">[</font></span>0<font color="#66cc66"><span id="bv77hhn" class="br0">]</span><span id="vh799fv" class="sy0">,</span></font> pstPayload<span id="j9vfzpp" class="sy0"><font color="#66cc66">-></font></span>aeID<span id="hjxld7t" class="br0"><font color="#66cc66">[</font></span>0<font color="#66cc66"><span id="tnr7bjj" class="br0">]</span><span id="h77bn99" class="br0">)</span><span id="df7nh79" class="br0">)</span><span id="tnhrvj7" class="sy0">;</span></font> <span id="977lxd9" class="br0"><font color="#66cc66">}</font></span> <span id="b79vhp9" class="br0"><font color="#66cc66">}</font></span> <span id="pbn9tzh" 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="dxrtvl7" class="kw1"><font color="#b1b100">if</font></span><span id="nhbdpvl" class="br0"><font color="#66cc66">(</font></span>_pstEvent<span id="xh7p7nd" class="sy0"><font color="#66cc66">-></font></span>eType <span id="lf9lffv" class="sy0"><font color="#66cc66">==</font></span> orxEVENT_TYPE_FX<span id="r7xht79" class="br0"><font color="#66cc66">)</font></span> <span id="ldpbvjr" class="br0"><font color="#66cc66">{</font></span> orxFX_EVENT_PAYLOAD <span id="7x9979d" class="sy0"><font color="#66cc66">*</font></span>pstPayload<span id="xz7999h" class="sy0"><font color="#66cc66">;</font></span> orxOBJECT <span id="dvrd99b" class="sy0"><font color="#66cc66">*</font></span>pstObject<span id="9fr79dv" class="sy0"><font color="#66cc66">;</font></span>   pstPayload <span id="h7tfh79" class="sy0"><font color="#66cc66">=</font></span> _pstEvent<span id="b77dx7b" class="sy0"><font color="#66cc66">-></font></span>pstPayload<span id="f7rt7z9" class="sy0"><font color="#66cc66">;</font></span> pstObject <span id="zrlxtj1" class="sy0"><font color="#66cc66">=</font></span> orxOBJECT<span id="zlx79fd" class="br0"><font color="#66cc66">(</font></span>_pstEvent<span id="9rd7d7f" class="sy0"><font color="#66cc66">-></font></span>hRecipient<font color="#66cc66"><span id="zrf77zh" class="br0">)</span><span id="7tvzjt7" class="sy0">;</span></font>   <span id="z99n799" class="kw1"><font color="#b1b100">switch</font></span><span id="v97r999" class="br0"><font color="#66cc66">(</font></span>_pstEvent<span id="97nx9fd" class="sy0"><font color="#66cc66">-></font></span>eID<span id="hb7jvjh" class="br0"><font color="#66cc66">)</font></span> <span id="779rb77" class="br0"><font color="#66cc66">{</font></span> <span id="7vh7f9p" class="kw1"><font color="#b1b100">case</font></span> orxFX_EVENT_START<span id="hzb7ljj" class="sy0"><font color="#66cc66">:</font></span> orxLOG<span id="dnp91tb" class="br0"><font color="#66cc66">(</font></span><span id="9p7l9z9" class="st0"><font color="#ff0000">"FX <%s>@<%s> has started!"</font></span><span id="dnh7p7z" class="sy0"><font color="#66cc66">,</font></span> pstPayload<span id="fp7fbj9" class="sy0"><font color="#66cc66">-></font></span>zFXName<span id="t79j799" class="sy0"><font color="#66cc66">,</font></span> orxObject_GetName<span id="779bp9z" class="br0"><font color="#66cc66">(</font></span>pstObject<font color="#66cc66"><span id="lx79r9n" class="br0">)</span><span id="7dp9nft" class="br0">)</span><span id="7d79jfv" class="sy0">;</span></font>   <span id="7pbj9zn" class="kw1"><font color="#b1b100">if</font></span><span id="97vxrr9" class="br0"><font color="#66cc66">(</font></span>pstObject <span id="xrdtvvd" class="sy0"><font color="#66cc66">==</font></span> pstSoldier<span id="lxjf9pv" class="br0"><font color="#66cc66">)</font></span> <span id="hb97zpv" class="br0"><font color="#66cc66">{</font></span> <span id="d77tv7h" class="co1"><em><font color="#808080">// Locks it</font></em></span> <font color="#66cc66"><span id="9799dt9" class="br0">(</span><span id="9tljv9x" class="br0">(</span></font>MyObject <font color="#66cc66"><span id="btnzddb" class="sy0">*</span><span id="vpbdnft" class="br0">)</span></font>orxObject_GetUserData<span id="7vpzl79" class="br0"><font color="#66cc66">(</font></span>pstObject<font color="#66cc66"><span id="p7lpb7f" class="br0">)</span><span id="77fbv7l" class="br0">)</span><span id="ld9df79" class="sy0">-></span></font>bLock <span id="jnxl7tl" class="sy0"><font color="#66cc66">=</font></span> orxTRUE<span id="99jdvzx" class="sy0"><font color="#66cc66">;</font></span> <span id="hhdnh7t" class="br0"><font color="#66cc66">}</font></span> <span id="b79fhbr" class="kw2"><strong>break</strong></span><span id="ld7rbb7" class="sy0"><font color="#66cc66">;</font></span>   <span id="9jdn7f7" class="kw1"><font color="#b1b100">case</font></span> orxSOUND_EVENT_STOP<span id="prlfzpp" class="sy0"><font color="#66cc66">:</font></span> orxLOG<span id="vfjlh79" class="br0"><font color="#66cc66">(</font></span><span id="9pr7vl7" class="st0"><font color="#ff0000">"FX <%s>@<%s> has stoped!"</font></span><span id="9f7j9pp" class="sy0"><font color="#66cc66">,</font></span> pstPayload<span id="vp779h9" class="sy0"><font color="#66cc66">-></font></span>zFXName<span id="v77bdb7" class="sy0"><font color="#66cc66">,</font></span> orxObject_GetName<span id="9fxlxv7" class="br0"><font color="#66cc66">(</font></span>pstObject<font color="#66cc66"><span id="97d99xv" class="br0">)</span><span id="tdf7fv7" class="br0">)</span><span id="ldxrl77" class="sy0">;</span></font>   <span id="fz7x7ll" class="kw1"><font color="#b1b100">if</font></span><span id="9bdxrj1" class="br0"><font color="#66cc66">(</font></span>pstObject <span id="np77prl" class="sy0"><font color="#66cc66">==</font></span> pstSoldier<span id="fhrd79v" class="br0"><font color="#66cc66">)</font></span> <span id="fp79tlv" class="br0"><font color="#66cc66">{</font></span> <span id="jbn1l7f" class="co1"><em><font color="#808080">// Unlocks it</font></em></span> <font color="#66cc66"><span id="vvrbfnd" class="br0">(</span><span id="tv9tv7r" class="br0">(</span></font>MyObject <font color="#66cc66"><span id="v79l1lz" class="sy0">*</span><span id="9rd79d7" class="br0">)</span></font>orxObject_GetUserData<span id="9pzn79x" class="br0"><font color="#66cc66">(</font></span>pstObject<font color="#66cc66"><span id="9pl799p" class="br0">)</span><span id="bv7jd7h" class="br0">)</span><span id="pldr7jz" class="sy0">-></span></font>bLock <span id="xt79p7b" class="sy0"><font color="#66cc66">=</font></span> orxFALSE<span id="77hjdd7" class="sy0"><font color="#66cc66">;</font></span> <span id="dv79ttr" class="br0"><font color="#66cc66">}</font></span> <span id="t99j7zh" class="kw2"><strong>break</strong></span><span id="dh7f97b" class="sy0"><font color="#66cc66">;</font></span> <span id="bt9d77p" class="br0"><font color="#66cc66">}</font></span> <span id="9hrnpff" 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="9lfrdbj" class="re0"><span id="prxjftr" class="br0"><font color="#66cc66">[</font></span><font color="#0000ff">RotateLoopFX</font><span id="tflfhxn" class="br0"><font color="#66cc66">]</font></span></span> <span id="d79fr79" class="re1"><font color="#0000ff">SlotList</font></span> <span id="9lp7d7p" class="sy0"><font color="#66cc66">=</font></span><span id="fzbfhx7" class="re2"><font color="#0000ff"> Rotate</font></span> <span id="zbn7779" class="re1"><font color="#0000ff">Loop</font></span> <span id="tjfhb97" class="sy0"><font color="#66cc66">=</font></span><span id="jv799nn" class="re2"><font color="#0000ff"> true</font></span>   <span id="r7vzlt1" class="re0"><span id="lvr9zxf" class="br0"><font color="#66cc66">[</font></span><font color="#0000ff">Rotate</font><span id="t79l7tr" class="br0"><font color="#66cc66">]</font></span></span> <span id="jdn7ndr" class="re1"><font color="#0000ff">Type</font></span> <span id="f77lhnd" class="sy0"><font color="#66cc66">=</font></span><span id="bthjdt7" class="re2"><font color="#0000ff"> rotation</font></span> <span id="vnjlf97" class="re1"><font color="#0000ff">StartTime</font></span> <span id="9z77nbt" class="sy0"><font color="#66cc66">=</font></span><span id="hrvpr77" class="re2"><font color="#0000ff"> 0.0</font></span> <span id="d79lp7f" class="re1"><font color="#0000ff">EndTime</font></span> <span id="77197ff" class="sy0"><font color="#66cc66">=</font></span><span id="lnjv7nt" class="re2"><font color="#0000ff"> 2.0</font></span> <span id="d7df7d9" class="re1"><font color="#0000ff">Curve</font></span> <span id="77n9j9v" class="sy0"><font color="#66cc66">=</font></span><span id="jl7bnd7" class="re2"><font color="#0000ff"> sine</font></span> <span id="97lht79" class="re1"><font color="#0000ff">Pow</font></span> <span id="jtf799b" class="sy0"><font color="#66cc66">=</font></span><span id="9rd79db" class="re2"><font color="#0000ff"> 2.0</font></span> <span id="dxr79j9" class="re1"><font color="#0000ff">StartValue</font></span> <span id="rjfh7br" class="sy0"><font color="#66cc66">=</font></span><span id="9r999zz" class="re2"><font color="#0000ff"> 0</font></span> <span id="lh79j9d" class="re1"><font color="#0000ff">EndValue</font></span> <span id="v97lpvl" class="sy0"><font color="#66cc66">=</font></span><span id="d97bft7" class="re2"><font color="#0000ff"> 360</font></span>   <span id="tdx7v9h" class="re0"><span id="7fj7tjj" class="br0"><font color="#66cc66">[</font></span><font color="#0000ff">Box</font><span id="dxxxrhf" class="br0"><font color="#66cc66">]</font></span></span> <span id="blftvlj" class="re1"><font color="#0000ff">FXList</font></span> <span id="7dxzn7p" class="sy0"><font color="#66cc66">=</font></span><span id="bfptv9z" 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="bd9d9r9" class="re0"><span id="nhzl7fl" class="br0"><font color="#66cc66">[</font></span><font color="#0000ff">WobbleFX</font><span id="v9b9xlb" class="br0"><font color="#66cc66">]</font></span></span> <span id="vxht7vl" class="re1"><font color="#0000ff">SlotList</font></span> <span id="zrl7zr7" class="sy0"><font color="#66cc66">=</font></span><span id="td7rn7z" class="re2"><font color="#0000ff"> Wobble</font></span>   <span id="bt7hbt7" class="re0"><span id="jbv7d7v" class="br0"><font color="#66cc66">[</font></span><font color="#0000ff">Wobble</font><span id="9bvh7x9" class="br0"><font color="#66cc66">]</font></span></span> <span id="j7j7ljh" class="re1"><font color="#0000ff">Type</font></span> <span id="vpzvp7d" class="sy0"><font color="#66cc66">=</font></span><span id="nf7dff7" class="re2"><font color="#0000ff"> scale</font></span> <span id="vfz7p77" class="re1"><font color="#0000ff">StartTime</font></span> <span id="zrn7zhz" class="sy0"><font color="#66cc66">=</font></span><span id="t77jll9" class="re2"><font color="#0000ff"> 0.0</font></span> <span id="dxrdxvb" class="re1"><font color="#0000ff">EndTime</font></span> <span id="td9r9j9" class="sy0"><font color="#66cc66">=</font></span><span id="vn7bfn9" class="re2"><font color="#0000ff"> 1.0</font></span> <span id="jvnjbt7" class="re1"><font color="#0000ff">Period</font></span> <span id="h9dhvlr" class="sy0"><font color="#66cc66">=</font></span><span id="7ldp7fv" class="re2"><font color="#0000ff"> 0.2</font></span> <span id="97n7zx9" class="re1"><font color="#0000ff">Curve</font></span> <span id="jl1jv7x" class="sy0"><font color="#66cc66">=</font></span><span id="99z9r9d" class="re2"><font color="#0000ff"> sine</font></span> <span id="7vzlvnd" class="re1"><font color="#0000ff">Amplification</font></span> <span id="vnz7p79" class="sy0"><font color="#66cc66">=</font></span><span id="hlf79nx" class="re2"><font color="#0000ff"> 0.0</font></span> <span id="9l9xrxf" class="re1"><font color="#0000ff">StartValue</font></span> <span id="r9lhbrp" class="sy0"><font color="#66cc66">=</font></span><span id="bt7lnxl" class="re2"><font color="#0000ff"> </font><span id="rtdzth7" class="br0"><font color="#66cc66">(</font></span><span id="ld97lz9" class="nu0"><font color="#cc66cc">1.0</font></span><font color="#0000ff">, </font><span id="xj9zjjz" class="nu0"><font color="#cc66cc">1.0</font></span><font color="#0000ff">, </font><span id="fxt7zhf" class="nu0"><font color="#cc66cc">1.0</font></span><span id="fxt7v7p" class="br0"><font color="#66cc66">)</font></span></span> <span id="9hrn999" class="re1"><font color="#0000ff">EndValue</font></span> <span id="phj7z7l" class="sy0"><font color="#66cc66">=</font></span><span id="hbvjt7b" class="re2"><font color="#0000ff"> </font><span id="htnztbr" class="br0"><font color="#66cc66">(</font></span><span id="7dnj7hz" class="nu0"><font color="#cc66cc">2.0</font></span><font color="#0000ff">, </font><span id="b97t9jr" class="nu0"><font color="#cc66cc">2.0</font></span><font color="#0000ff">, </font><span id="7pbf9l9" class="nu0"><font color="#cc66cc">1.0</font></span><span id="9799rhp" class="br0"><font color="#66cc66">)</font></span><font color="#0000ff"> ~ </font><span id="9xjv7rp" class="br0"><font color="#66cc66">(</font></span><span id="nr9p9fn" class="nu0"><font color="#cc66cc">6.0</font></span><font color="#0000ff">, </font><span id="nf9df7r" class="nu0"><font color="#cc66cc">6.0</font></span><font color="#0000ff">, </font><span id="rlnpjzp" class="nu0"><font color="#cc66cc">1.0</font></span><span id="z7l9pnn" 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="jl79lrj" class="re0"><span id="jv77vb9" class="br0"><font color="#66cc66">[</font></span><font color="#0000ff">CircleFX</font><span id="h7l9z9l" class="br0"><font color="#66cc66">]</font></span></span> <span id="htvh7zn" class="re1"><font color="#0000ff">SlotList</font></span> <span id="97v9ljr" class="sy0"><font color="#66cc66">=</font></span><span id="tlz77lr" class="re2"><font color="#0000ff"> CircleX#CircleY</font></span> <span id="bfrlpdb" class="re1"><font color="#0000ff">KeepInCache</font></span> <span id="jb7jfvl" class="sy0"><font color="#66cc66">=</font></span><span id="779hbrz" class="re2"><font color="#0000ff"> true</font></span>   <span id="lvrtnfd" class="re0"><span id="nrjfzf7" class="br0"><font color="#66cc66">[</font></span><font color="#0000ff">CircleX</font><span id="9799vj9" class="br0"><font color="#66cc66">]</font></span></span> <span id="9jvj999" class="re1"><font color="#0000ff">Type</font></span> <span id="blhbt77" class="sy0"><font color="#66cc66">=</font></span><span id="9dz7tt9" class="re2"><font color="#0000ff"> position</font></span> <span id="97pnzxn" class="re1"><font color="#0000ff">StartTime</font></span> <span id="b9vjdtr" class="sy0"><font color="#66cc66">=</font></span><span id="pzthth9" class="re2"><font color="#0000ff"> 0.0</font></span> <span id="9zv9x7b" class="re1"><font color="#0000ff">EndTime</font></span> <span id="7v7z979" class="sy0"><font color="#66cc66">=</font></span><span id="n79r99l" class="re2"><font color="#0000ff"> 1.0</font></span> <span id="ld79nd9" class="re1"><font color="#0000ff">Curve</font></span> <span id="9xh9tl9" class="sy0"><font color="#66cc66">=</font></span><span id="7h9t97x" class="re2"><font color="#0000ff"> sine</font></span> <span id="9nz7ld7" class="re1"><font color="#0000ff">StartValue</font></span> <span id="tvpzt9r" class="sy0"><font color="#66cc66">=</font></span><span id="r779vl9" class="re2"><font color="#0000ff"> </font><span id="lpjd7hx" class="br0"><font color="#66cc66">(</font></span><span id="d9nz9p9" class="nu0"><font color="#cc66cc">0.0</font></span><font color="#0000ff">, </font><span id="zb7jtld" class="nu0"><font color="#cc66cc">0.0</font></span><font color="#0000ff">, </font><span id="9n799zx" class="nu0"><font color="#cc66cc">0.0</font></span><span id="97txjpj" class="br0"><font color="#66cc66">)</font></span></span> <span id="9p7lxlx" class="re1"><font color="#0000ff">EndValue</font></span> <span id="9vhv99x" class="sy0"><font color="#66cc66">=</font></span><span id="b1t9r99" class="re2"><font color="#0000ff"> </font><span id="n77zbbz" class="br0"><font color="#66cc66">(</font></span><font color="#0000ff">-</font><span id="9hrnpx7" class="nu0"><font color="#cc66cc">50.0</font></span><font color="#0000ff">, </font><span id="h99v99h" class="nu0"><font color="#cc66cc">0.0</font></span><font color="#0000ff">, </font><span id="79z7jrz" class="nu0"><font color="#cc66cc">0.0</font></span><span id="7tdzj7v" class="br0"><font color="#66cc66">)</font></span></span> <span id="fhtnrzv" class="re1"><font color="#0000ff">UseOrientation</font></span> <span id="dx77fvl" class="sy0"><font color="#66cc66">=</font></span><span id="7h9dp79" class="re2"><font color="#0000ff"> true</font></span> <span id="79t9bhh" class="re1"><font color="#0000ff">UseScale</font></span> <span id="rtpb77h" class="sy0"><font color="#66cc66">=</font></span><span id="7hjxpzf" class="re2"><font color="#0000ff"> true</font></span>   <span id="bdf7trh" class="re0"><span id="n77f7z7" class="br0"><font color="#66cc66">[</font></span><font color="#0000ff">CircleY@CircleX</font><span id="f97z97x" class="br0"><font color="#66cc66">]</font></span></span> <span id="7nzbn79" class="re1"><font color="#0000ff">Phase</font></span> <span id="fhblxf7" class="sy0"><font color="#66cc66">=</font></span><span id="bnhr779" class="re2"><font color="#0000ff"> 0.25</font></span> <span id="d9n7vvl" class="re1"><font color="#0000ff">StartValue</font></span> <span id="ztlxbj7" class="sy0"><font color="#66cc66">=</font></span><span id="9fzn7x9" class="re2"><font color="#0000ff"> </font><span id="xr77xnn" class="br0"><font color="#66cc66">(</font></span><span id="979ftj9" class="nu0"><font color="#cc66cc">0.0</font></span><font color="#0000ff">, -</font><span id="x97rt9h" class="nu0"><font color="#cc66cc">25.0</font></span><font color="#0000ff">, </font><span id="j9fvf79" class="nu0"><font color="#cc66cc">0.0</font></span><span id="hjb7jpx" class="br0"><font color="#66cc66">)</font></span></span> <span id="dpjtpf7" class="re1"><font color="#0000ff">EndValue</font></span> <span id="pbt77r9" class="sy0"><font color="#66cc66">=</font></span><span id="779blbr" class="re2"><font color="#0000ff"> </font><span id="99tp99t" class="br0"><font color="#66cc66">(</font></span><span id="d7xtfd7" class="nu0"><font color="#cc66cc">0.0</font></span><font color="#0000ff">, </font><span id="fvhlxd9" class="nu0"><font color="#cc66cc">25.0</font></span><font color="#0000ff">, </font><span id="r7bd7p9" class="nu0"><font color="#cc66cc">0.0</font></span><span id="zl779xb" 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="r779b99" class="re0"><span id="l77df97" class="br0"><font color="#66cc66">[</font></span><font color="#0000ff">FlipFX</font><span id="779bnfv" class="br0"><font color="#66cc66">]</font></span></span> <span id="lfhlfv7" class="re1"><font color="#0000ff">SlotList</font></span> <span id="r7lpz7d" class="sy0"><font color="#66cc66">=</font></span><span id="z77t9jz" class="re2"><font color="#0000ff"> Flip</font></span>   <span id="n799dvt" class="re0"><span id="hv7799l" class="br0"><font color="#66cc66">[</font></span><font color="#0000ff">Flip@Wobble</font><span id="xp7vhf9" class="br0"><font color="#66cc66">]</font></span></span> <span id="7vtpzp9" class="re1"><font color="#0000ff">EndTime</font></span> <span id="ztn99jh" class="sy0"><font color="#66cc66">=</font></span><span id="tnhbvlt" class="re2"><font color="#0000ff"> 0.5</font></span> <span id="tnzt7l7" class="re1"><font color="#0000ff">Period</font></span> <span id="7d7zdtz" class="sy0"><font color="#66cc66">=</font></span><span id="p7n7hxv" class="re2"><font color="#0000ff"> 1.0</font></span> <span id="pl77r9d" class="re1"><font color="#0000ff">Amplification</font></span> <span id="l77nzf9" class="sy0"><font color="#66cc66">=</font></span><span id="h777dbr" class="re2"><font color="#0000ff"> 1.0</font></span> <span id="7rdhl7v" class="re1"><font color="#0000ff">EndValue</font></span> <span id="7vf9rj9" class="sy0"><font color="#66cc66">=</font></span><span id="r71pbj7" class="re2"><font color="#0000ff"> </font><span id="h9vr1hf" class="br0"><font color="#66cc66">(</font></span><font color="#0000ff">-</font><span id="vhbf7f9" class="nu0"><font color="#cc66cc">1.0</font></span><font color="#0000ff">, </font><span id="97x9jzh" class="nu0"><font color="#cc66cc">1.0</font></span><font color="#0000ff">, </font><span id="v9j9xv9" class="nu0"><font color="#cc66cc">1.0</font></span><span id="znp79tz" 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="r7jdzhf" 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="97lz7nx" class="footnotes"> <div id="7t99pft" 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="7z7bxvr" 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="97fbdt9" 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="rdx7nv7" 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 发表评论
]]>
þۺϺݺɫۺ| Ʒþ¶| þþһ| þó97˰| ƷþþþĻһ| ŷպĻþþò| þþþƷ | þһ| þerƷѹۿ8| ޵һƷƷþ| þþþþþ99Ʒѹۿ| vĻþ| ޷AVþò| ݺ޾þþþþۺ| һõþۺϺݺݰ| þСƵ| þþþþҹӰԺ | þۺ㽶AV| ۺϾƷþ| þ99ֻƵƷ8| ھƷۺϾþþ40p| þù| 99þþƷѹۿ| ˾ƷѾþþþ| ۺϾþþ| ˾þô߽AVһ | þùƵ| ˾þ91| 97þþƷһ| ȾþùŷһƷ| 51þҹɫƷ| ԭۺϾþô˾Ʒ| þþþƷ鶹| þþƷƷ޾Ʒ | þùҹƵ| ݹ˾þ91| þþۺϾɫ۹| ƷһþþƷ| ƷëƬþþþþþ| ݺɫۺϾþ| ƷѾþ|