??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久久国产精品www,国产精品制服诱惑,亚洲欧美综合国产精品一区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="k4g4s44" 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="o4c4mau" 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="ggsow2g" class="br0"><font color="#66cc66">(</font></span>orxEVENT_TYPE_FX<span id="4kesoum" class="sy0"><font color="#66cc66">,</font></span> EventHandler<font color="#66cc66"><span id="i4cwaqa" class="br0">)</span><span id="s2myki2" class="sy0">;</span></font> orxEvent_AddHandler<span id="iw22e4q" class="br0"><font color="#66cc66">(</font></span>orxEVENT_TYPE_INPUT<span id="wc6uwwg" class="sy0"><font color="#66cc66">,</font></span> EventHandler<font color="#66cc66"><span id="mo4og22" class="br0">)</span><span id="qkyswgc" class="sy0">;</span></font></pre> <p>大家可以看到Q在q两个事件中Q我们用了同一个回调函敎ͼEventHandlerQ? </p> <p>现在我们q速的扫一Dq“对象”数据l构?</p> <pre class="code c"><span id="u4cu4aq" class="kw4"><font color="#993333">typedef</font></span> <span id="ewm44ao" class="kw4"><font color="#993333">struct</font></span> MyObject <span id="yc22m2m" class="br0"><font color="#66cc66">{</font></span> orxBOOL bLock<span id="gguiwwc" class="sy0"><font color="#66cc66">;</font></span> <span id="24ga4ok" class="br0"><font color="#66cc66">}</font></span> MyObject<span id="ai4gkyo" class="sy0"><font color="#66cc66">;</font></span></pre> <p>接下来,看看如何?orxObject_SetUserData()它l定到soldier?</p> <pre class="code c">MyObject <span id="ua424y4" class="sy0"><font color="#66cc66">*</font></span>pstMyObject<span id="6246y4c" class="sy0"><font color="#66cc66">;</font></span>   pstMyObject <span id="s44ysgo" class="sy0"><font color="#66cc66">=</font></span> orxMemory_Allocate<span id="y2k4g24" class="br0"><font color="#66cc66">(</font></span><span id="kmwawks" class="kw4"><font color="#993333">sizeof</font></span><span id="iskgiwu" class="br0"><font color="#66cc66">(</font></span>MyObject<font color="#66cc66"><span id="ceo4scy" class="br0">)</span><span id="2w24244" class="sy0">,</span></font> orxMEMORY_TYPE_MAIN<font color="#66cc66"><span id="2m24a4i" class="br0">)</span><span id="ik2qigw" class="sy0">;</span></font> pstMyObject<span id="yiogig6" class="sy0"><font color="#66cc66">-></font></span>bLock <span id="2k4u4we" class="sy0"><font color="#66cc66">=</font></span> orxFALSE<span id="4w4gm4o" class="sy0"><font color="#66cc66">;</font></span>   orxObject_SetUserData<span id="wo4mwmc" class="br0"><font color="#66cc66">(</font></span>pstSoldier<span id="2kacusq" class="sy0"><font color="#66cc66">,</font></span> pstMyObject<font color="#66cc66"><span id="mmqqcig" class="br0">)</span><span id="4s4ggo4" class="sy0">;</span></font></pre> <p>现在看看如何在Update函数中用特?</p> <pre class="code c">orxSTRING zSelectedFX<span id="egy2ak4" class="sy0"><font color="#66cc66">;</font></span>   <span id="2cysusa" class="kw1"><font color="#b1b100">if</font></span><span id="gq6yasg" class="br0"><font color="#66cc66">(</font></span>orxInput_IsActive<span id="6ca4kcs" class="br0"><font color="#66cc66">(</font></span><span id="6gegq4a" class="st0"><font color="#ff0000">"SelectWobble"</font></span><font color="#66cc66"><span id="k4m4m44" class="br0">)</span><span id="6k2o4w4" class="br0">)</span></font> <span id="a24sc24" class="br0"><font color="#66cc66">{</font></span> zSelectedFX <span id="4aqcek2" class="sy0"><font color="#66cc66">=</font></span> <span id="y44a44q" class="st0"><font color="#ff0000">"WobbleFX"</font></span><span id="44uaa44" class="sy0"><font color="#66cc66">;</font></span> <span id="aauqige" class="br0"><font color="#66cc66">}</font></span> <span id="g42qssq" class="kw1"><font color="#b1b100">else</font></span> <span id="6e6kg4w" class="kw1"><font color="#b1b100">if</font></span><span id="4yo4qcy" class="br0"><font color="#66cc66">(</font></span>orxInput_IsActive<span id="gc4o44q" class="br0"><font color="#66cc66">(</font></span><span id="iug4mec" class="st0"><font color="#ff0000">"SelectCircle"</font></span><font color="#66cc66"><span id="cw22isi" class="br0">)</span><span id="g24skk4" class="br0">)</span></font> <span id="2oes44g" class="br0"><font color="#66cc66">{</font></span> zSelectedFX <span id="moiaekk" class="sy0"><font color="#66cc66">=</font></span> <span id="2qwys4i" class="st0"><font color="#ff0000">"CircleFX"</font></span><span id="a264e44" class="sy0"><font color="#66cc66">;</font></span> <span id="ascmc22" class="br0"><font color="#66cc66">}</font></span>   <span id="mewoc2s" class="br0"><font color="#66cc66">[</font></span>...<span id="ck2g44s" class="br0"><font color="#66cc66">]</font></span>   <span id="yy4imc4" class="co1"><em><font color="#808080">// Soldier not locked?</font></em></span> <span id="m4w4uo4" class="kw1"><font color="#b1b100">if</font></span><font color="#66cc66"><span id="k62akkq" class="br0">(</span><span id="uauww2w" class="sy0">!</span><span id="2ekk44e" class="br0">(</span><span id="ygimw2w" class="br0">(</span></font>MyObject <font color="#66cc66"><span id="gu4wywe" class="sy0">*</span><span id="acmosqg" class="br0">)</span></font>orxObject_GetUserData<span id="ascwo2o" class="br0"><font color="#66cc66">(</font></span>pstSoldier<font color="#66cc66"><span id="ceoi244" class="br0">)</span><span id="gw4mwu4" class="br0">)</span><span id="ca4kec4" class="sy0">-></span></font>bLock<span id="24gu4cc" class="br0"><font color="#66cc66">)</font></span> <span id="sg2e4yw" class="br0"><font color="#66cc66">{</font></span> <span id="k4o444k" class="kw1"><font color="#b1b100">if</font></span><span id="i44e42c" class="br0"><font color="#66cc66">(</font></span>orxInput_IsActive<span id="k24mu44" class="br0"><font color="#66cc66">(</font></span><span id="4o44ggu" class="st0"><font color="#ff0000">"ApplyFX"</font></span><span id="cqya2kq" class="br0"><font color="#66cc66">)</font></span> <span id="2mgqw4a" class="sy0"><font color="#66cc66">&&</font></span> orxInput_HasNewStatus<span id="u244ioe" class="br0"><font color="#66cc66">(</font></span><span id="2yscmma" class="st0"><font color="#ff0000">"ApplyFX"</font></span><font color="#66cc66"><span id="ma24ssq" class="br0">)</span><span id="kyoosqm" class="br0">)</span></font> <span id="6wiscki" class="br0"><font color="#66cc66">{</font></span> orxObject_AddFX<span id="6iyws2o" class="br0"><font color="#66cc66">(</font></span>pstSoldier<span id="4c424kq" class="sy0"><font color="#66cc66">,</font></span> zSelectedFX<font color="#66cc66"><span id="kegiks4" class="br0">)</span><span id="c444gec" class="sy0">;</span></font> <span id="4gqsuu4" class="br0"><font color="#66cc66">}</font></span> <span id="w24uecc" 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="aamg4g4" class="kw1"><font color="#b1b100">if</font></span><span id="uc2o4ea" class="br0"><font color="#66cc66">(</font></span>_pstEvent<span id="2m2e4us" class="sy0"><font color="#66cc66">-></font></span>eType <span id="kmgi4wu" class="sy0"><font color="#66cc66">==</font></span> orxEVENT_TYPE_INPUT<span id="i464uq2" class="br0"><font color="#66cc66">)</font></span> <span id="s2442uk" class="br0"><font color="#66cc66">{</font></span> <span id="sk2uwus" class="kw1"><font color="#b1b100">if</font></span><span id="mosu2io" class="br0"><font color="#66cc66">(</font></span>_pstEvent<span id="2iaewuc" class="sy0"><font color="#66cc66">-></font></span>eID <span id="as44k4m" class="sy0"><font color="#66cc66">==</font></span> orxINPUT_EVENT_ON<span id="24uss2a" class="br0"><font color="#66cc66">)</font></span> <span id="qqcwg24" class="br0"><font color="#66cc66">{</font></span> orxINPUT_EVENT_PAYLOAD <span id="cyyk2ig" class="sy0"><font color="#66cc66">*</font></span>pstPayload<span id="s2o44sk" class="sy0"><font color="#66cc66">;</font></span>   pstPayload <span id="24aw44q" class="sy0"><font color="#66cc66">=</font></span> <span id="iskogec" class="br0"><font color="#66cc66">(</font></span>orxINPUT_EVENT_PAYLOAD <font color="#66cc66"><span id="yi2ik4u" class="sy0">*</span><span id="62cqage" class="br0">)</span></font>_pstEvent<span id="ce2oiou" class="sy0"><font color="#66cc66">-></font></span>pstPayload<span id="2kuwyyw" class="sy0"><font color="#66cc66">;</font></span>   <span id="oyi2esa" class="kw1"><font color="#b1b100">if</font></span><span id="g44k44k" class="br0"><font color="#66cc66">(</font></span>pstPayload<span id="qs24cyg" class="sy0"><font color="#66cc66">-></font></span>aeType<span id="iyce224" class="br0"><font color="#66cc66">[</font></span><span id="oyi2m4k" class="nu0"><font color="#cc66cc">1</font></span><span id="24qc2ig" class="br0"><font color="#66cc66">]</font></span> <span id="q2gaoww" class="sy0"><font color="#66cc66">!=</font></span> orxINPUT_TYPE_NONE<span id="444oyyu" class="br0"><font color="#66cc66">)</font></span> <span id="skw24kk" class="br0"><font color="#66cc66">{</font></span> orxLOG<span id="c4444uc" class="br0"><font color="#66cc66">(</font></span><span id="s2oykiw" class="st0"><font color="#ff0000">"[%s] triggered by '%s' + '%s'."</font></span><span id="c4q4c44" class="sy0"><font color="#66cc66">,</font></span> pstPayload<span id="6i2uuca" class="sy0"><font color="#66cc66">-></font></span>zInputName<span id="o2eisig" class="sy0"><font color="#66cc66">,</font></span> orxInput_GetBindingName<span id="uy2a2qw" class="br0"><font color="#66cc66">(</font></span>pstPayload<span id="2kw224y" class="sy0"><font color="#66cc66">-></font></span>aeType<span id="yqk4e4o" class="br0"><font color="#66cc66">[</font></span>0<font color="#66cc66"><span id="asoc24m" class="br0">]</span><span id="u2s444q" class="sy0">,</span></font> pstPayload<span id="k24oqqm" class="sy0"><font color="#66cc66">-></font></span>aeID<span id="644yag4" class="br0"><font color="#66cc66">[</font></span>0<font color="#66cc66"><span id="k44acyy" class="br0">]</span><span id="2co2iwe" class="br0">)</span><span id="w22qsqe" class="sy0">,</span></font> orxInput_GetBindingName<span id="k6oacc2" class="br0"><font color="#66cc66">(</font></span>pstPayload<span id="k2c44ig" class="sy0"><font color="#66cc66">-></font></span>aeType<span id="44ewqo4" class="br0"><font color="#66cc66">[</font></span>1<font color="#66cc66"><span id="64su442" class="br0">]</span><span id="mkcquq4" class="sy0">,</span></font> pstPayload<span id="gi64mcs" class="sy0"><font color="#66cc66">-></font></span>aeID<span id="ko2aaa4" class="br0"><font color="#66cc66">[</font></span>1<font color="#66cc66"><span id="2eokcka" class="br0">]</span><span id="sg4s4ww" class="br0">)</span><span id="24244s4" class="br0">)</span><span id="ikc4y4a" class="sy0">;</span></font> <span id="akwyi2s" class="br0"><font color="#66cc66">}</font></span> <span id="24cm4sq" class="kw1"><font color="#b1b100">else</font></span> <span id="omi2422" class="br0"><font color="#66cc66">{</font></span> orxLOG<span id="gqsk44k" class="br0"><font color="#66cc66">(</font></span><span id="2ak44ge" class="st0"><font color="#ff0000">"[%s] triggered by '%s'."</font></span><span id="k242uqy" class="sy0"><font color="#66cc66">,</font></span> pstPayload<span id="iy4swk4" class="sy0"><font color="#66cc66">-></font></span>zInputName<span id="myeg2k6" class="sy0"><font color="#66cc66">,</font></span> orxInput_GetBindingName<span id="244424s" class="br0"><font color="#66cc66">(</font></span>pstPayload<span id="wys244q" class="sy0"><font color="#66cc66">-></font></span>aeType<span id="oqs2q4a" class="br0"><font color="#66cc66">[</font></span>0<font color="#66cc66"><span id="2ce4wu4" class="br0">]</span><span id="2gygqy4" class="sy0">,</span></font> pstPayload<span id="sa24gww" class="sy0"><font color="#66cc66">-></font></span>aeID<span id="o244m4o" class="br0"><font color="#66cc66">[</font></span>0<font color="#66cc66"><span id="2uo4w4g" class="br0">]</span><span id="cceu4i2" class="br0">)</span><span id="i2ewqom" class="br0">)</span><span id="24kcge4" class="sy0">;</span></font> <span id="m6eseui" class="br0"><font color="#66cc66">}</font></span> <span id="2miw4ck" class="br0"><font color="#66cc66">}</font></span> <span id="22sogem" 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="eyi24w4" class="kw1"><font color="#b1b100">if</font></span><span id="meomguu" class="br0"><font color="#66cc66">(</font></span>_pstEvent<span id="2mos2wu" class="sy0"><font color="#66cc66">-></font></span>eType <span id="i24444s" class="sy0"><font color="#66cc66">==</font></span> orxEVENT_TYPE_FX<span id="ogs2k44" class="br0"><font color="#66cc66">)</font></span> <span id="i2g2siq" class="br0"><font color="#66cc66">{</font></span> orxFX_EVENT_PAYLOAD <span id="4uwqcao" class="sy0"><font color="#66cc66">*</font></span>pstPayload<span id="24megge" class="sy0"><font color="#66cc66">;</font></span> orxOBJECT <span id="222g4m4" class="sy0"><font color="#66cc66">*</font></span>pstObject<span id="cmwi4k4" class="sy0"><font color="#66cc66">;</font></span>   pstPayload <span id="4u4y4c2" class="sy0"><font color="#66cc66">=</font></span> _pstEvent<span id="u42442w" class="sy0"><font color="#66cc66">-></font></span>pstPayload<span id="akmgg2a" class="sy0"><font color="#66cc66">;</font></span> pstObject <span id="6oq44gy" class="sy0"><font color="#66cc66">=</font></span> orxOBJECT<span id="4gq24m4" class="br0"><font color="#66cc66">(</font></span>_pstEvent<span id="em2ik44" class="sy0"><font color="#66cc66">-></font></span>hRecipient<font color="#66cc66"><span id="6ico44e" class="br0">)</span><span id="2wiac44" class="sy0">;</span></font>   <span id="k2g2si4" class="kw1"><font color="#b1b100">switch</font></span><span id="2gsu4ss" class="br0"><font color="#66cc66">(</font></span>_pstEvent<span id="uegy2ow" class="sy0"><font color="#66cc66">-></font></span>eID<span id="62u4cas" class="br0"><font color="#66cc66">)</font></span> <span id="m44cm4g" class="br0"><font color="#66cc66">{</font></span> <span id="2iy4i4q" class="kw1"><font color="#b1b100">case</font></span> orxFX_EVENT_START<span id="u4ewys4" class="sy0"><font color="#66cc66">:</font></span> orxLOG<span id="6wy4iqo" class="br0"><font color="#66cc66">(</font></span><span id="mewqsio" class="st0"><font color="#ff0000">"FX <%s>@<%s> has started!"</font></span><span id="2444i4c" class="sy0"><font color="#66cc66">,</font></span> pstPayload<span id="cceqcqy" class="sy0"><font color="#66cc66">-></font></span>zFXName<span id="ia4ugms" class="sy0"><font color="#66cc66">,</font></span> orxObject_GetName<span id="2qs4uaa" class="br0"><font color="#66cc66">(</font></span>pstObject<font color="#66cc66"><span id="24s4u4m" class="br0">)</span><span id="i4a24w4" class="br0">)</span><span id="2o42cyy" class="sy0">;</span></font>   <span id="4e4g2wu" class="kw1"><font color="#b1b100">if</font></span><span id="6mwqm4e" class="br0"><font color="#66cc66">(</font></span>pstObject <span id="4wys24k" class="sy0"><font color="#66cc66">==</font></span> pstSoldier<span id="c4q4i4s" class="br0"><font color="#66cc66">)</font></span> <span id="e4ki4w2" class="br0"><font color="#66cc66">{</font></span> <span id="a2g4s4k" class="co1"><em><font color="#808080">// Locks it</font></em></span> <font color="#66cc66"><span id="66q2yus" class="br0">(</span><span id="ckewygu" class="br0">(</span></font>MyObject <font color="#66cc66"><span id="224gcq4" class="sy0">*</span><span id="2yamyuk" class="br0">)</span></font>orxObject_GetUserData<span id="6o4ceca" class="br0"><font color="#66cc66">(</font></span>pstObject<font color="#66cc66"><span id="kk4wyg4" class="br0">)</span><span id="a244ywm" class="br0">)</span><span id="a4y4g4g" class="sy0">-></span></font>bLock <span id="accgige" class="sy0"><font color="#66cc66">=</font></span> orxTRUE<span id="4u4oig4" class="sy0"><font color="#66cc66">;</font></span> <span id="6ikoayu" class="br0"><font color="#66cc66">}</font></span> <span id="64qeggu" class="kw2"><strong>break</strong></span><span id="c444w44" class="sy0"><font color="#66cc66">;</font></span>   <span id="eakmomm" class="kw1"><font color="#b1b100">case</font></span> orxSOUND_EVENT_STOP<span id="4a2wgmm" class="sy0"><font color="#66cc66">:</font></span> orxLOG<span id="emoq44s" class="br0"><font color="#66cc66">(</font></span><span id="ai2u44o" class="st0"><font color="#ff0000">"FX <%s>@<%s> has stoped!"</font></span><span id="k4444us" class="sy0"><font color="#66cc66">,</font></span> pstPayload<span id="sk2kou4" class="sy0"><font color="#66cc66">-></font></span>zFXName<span id="kso4i4i" class="sy0"><font color="#66cc66">,</font></span> orxObject_GetName<span id="m44a4y4" class="br0"><font color="#66cc66">(</font></span>pstObject<font color="#66cc66"><span id="akmqiy4" class="br0">)</span><span id="c4a2k4u" class="br0">)</span><span id="2244i4g" class="sy0">;</span></font>   <span id="ays2yc4" class="kw1"><font color="#b1b100">if</font></span><span id="24o444u" class="br0"><font color="#66cc66">(</font></span>pstObject <span id="qsmo2m4" class="sy0"><font color="#66cc66">==</font></span> pstSoldier<span id="oakoyou" class="br0"><font color="#66cc66">)</font></span> <span id="2yik4sc" class="br0"><font color="#66cc66">{</font></span> <span id="cqcw6a4" class="co1"><em><font color="#808080">// Unlocks it</font></em></span> <font color="#66cc66"><span id="ya2224i" class="br0">(</span><span id="seoi2yq" class="br0">(</span></font>MyObject <font color="#66cc66"><span id="qisuymm" class="sy0">*</span><span id="umqs244" class="br0">)</span></font>orxObject_GetUserData<span id="m24ae4e" class="br0"><font color="#66cc66">(</font></span>pstObject<font color="#66cc66"><span id="auoikio" class="br0">)</span><span id="ea2g4c4" class="br0">)</span><span id="mam44qk" class="sy0">-></span></font>bLock <span id="eoqkwk4" class="sy0"><font color="#66cc66">=</font></span> orxFALSE<span id="2444o6e" class="sy0"><font color="#66cc66">;</font></span> <span id="wogscay" class="br0"><font color="#66cc66">}</font></span> <span id="qcuyio2" class="kw2"><strong>break</strong></span><span id="4q2koki" class="sy0"><font color="#66cc66">;</font></span> <span id="64uacsq" class="br0"><font color="#66cc66">}</font></span> <span id="wq2au44" 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="2eyykkq" class="re0"><span id="yq44u4i" class="br0"><font color="#66cc66">[</font></span><font color="#0000ff">RotateLoopFX</font><span id="e2ekmca" class="br0"><font color="#66cc66">]</font></span></span> <span id="go22a4q" class="re1"><font color="#0000ff">SlotList</font></span> <span id="mquosom" class="sy0"><font color="#66cc66">=</font></span><span id="4cc2q2g" class="re2"><font color="#0000ff"> Rotate</font></span> <span id="ogkmeek" class="re1"><font color="#0000ff">Loop</font></span> <span id="2444y64" class="sy0"><font color="#66cc66">=</font></span><span id="k4cqkq2" class="re2"><font color="#0000ff"> true</font></span>   <span id="m2iy4cc" class="re0"><span id="iimgq2g" class="br0"><font color="#66cc66">[</font></span><font color="#0000ff">Rotate</font><span id="k44e4ay" class="br0"><font color="#66cc66">]</font></span></span> <span id="mmwius4" class="re1"><font color="#0000ff">Type</font></span> <span id="2kmm4aa" class="sy0"><font color="#66cc66">=</font></span><span id="cu2u4a4" class="re2"><font color="#0000ff"> rotation</font></span> <span id="soqak4o" class="re1"><font color="#0000ff">StartTime</font></span> <span id="2ik4u4q" class="sy0"><font color="#66cc66">=</font></span><span id="wm44gym" class="re2"><font color="#0000ff"> 0.0</font></span> <span id="wei2mek" class="re1"><font color="#0000ff">EndTime</font></span> <span id="g2wy4e4" class="sy0"><font color="#66cc66">=</font></span><span id="kkgss4u" class="re2"><font color="#0000ff"> 2.0</font></span> <span id="2cmoawm" class="re1"><font color="#0000ff">Curve</font></span> <span id="64eg4cc" class="sy0"><font color="#66cc66">=</font></span><span id="s24g4o4" class="re2"><font color="#0000ff"> sine</font></span> <span id="2og2iu4" class="re1"><font color="#0000ff">Pow</font></span> <span id="e2coiom" class="sy0"><font color="#66cc66">=</font></span><span id="s4g4s6a" class="re2"><font color="#0000ff"> 2.0</font></span> <span id="44ceg4o" class="re1"><font color="#0000ff">StartValue</font></span> <span id="wgysomu" class="sy0"><font color="#66cc66">=</font></span><span id="2o4s4q4" class="re2"><font color="#0000ff"> 0</font></span> <span id="ccei6gu" class="re1"><font color="#0000ff">EndValue</font></span> <span id="gy44q24" class="sy0"><font color="#66cc66">=</font></span><span id="22e44ca" class="re2"><font color="#0000ff"> 360</font></span>   <span id="eyk2uem" class="re0"><span id="i444oy4" class="br0"><font color="#66cc66">[</font></span><font color="#0000ff">Box</font><span id="ik2ouay" class="br0"><font color="#66cc66">]</font></span></span> <span id="2mwi4oe" class="re1"><font color="#0000ff">FXList</font></span> <span id="kmw244i" class="sy0"><font color="#66cc66">=</font></span><span id="oosswus" 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="akw244q" class="re0"><span id="asoq2uu" class="br0"><font color="#66cc66">[</font></span><font color="#0000ff">WobbleFX</font><span id="eyac4gg" class="br0"><font color="#66cc66">]</font></span></span> <span id="qk24y44" class="re1"><font color="#0000ff">SlotList</font></span> <span id="64i44us" class="sy0"><font color="#66cc66">=</font></span><span id="2k24uus" class="re2"><font color="#0000ff"> Wobble</font></span>   <span id="waco2s4" class="re0"><span id="sk4a444" class="br0"><font color="#66cc66">[</font></span><font color="#0000ff">Wobble</font><span id="wg2aomi" class="br0"><font color="#66cc66">]</font></span></span> <span id="2o4ikio" class="re1"><font color="#0000ff">Type</font></span> <span id="6gi2s4i" class="sy0"><font color="#66cc66">=</font></span><span id="skg2qca" class="re2"><font color="#0000ff"> scale</font></span> <span id="qikma24" class="re1"><font color="#0000ff">StartTime</font></span> <span id="cko24c2" class="sy0"><font color="#66cc66">=</font></span><span id="yc2eqyo" class="re2"><font color="#0000ff"> 0.0</font></span> <span id="gsko4mi" class="re1"><font color="#0000ff">EndTime</font></span> <span id="2g4su4u" class="sy0"><font color="#66cc66">=</font></span><span id="sk2444c" class="re2"><font color="#0000ff"> 1.0</font></span> <span id="u2ccs4u" class="re1"><font color="#0000ff">Period</font></span> <span id="e4uyige" class="sy0"><font color="#66cc66">=</font></span><span id="iyso4c4" class="re2"><font color="#0000ff"> 0.2</font></span> <span id="k24a44q" class="re1"><font color="#0000ff">Curve</font></span> <span id="giim2sy" class="sy0"><font color="#66cc66">=</font></span><span id="o44sus4" class="re2"><font color="#0000ff"> sine</font></span> <span id="wa4i4q2" class="re1"><font color="#0000ff">Amplification</font></span> <span id="w2w4uea" class="sy0"><font color="#66cc66">=</font></span><span id="ce4g4ea" class="re2"><font color="#0000ff"> 0.0</font></span> <span id="c4aca4a" class="re1"><font color="#0000ff">StartValue</font></span> <span id="oqk6om4" class="sy0"><font color="#66cc66">=</font></span><span id="ga2e444" class="re2"><font color="#0000ff"> </font><span id="i2y4qom" class="br0"><font color="#66cc66">(</font></span><span id="s44iki4" class="nu0"><font color="#cc66cc">1.0</font></span><font color="#0000ff">, </font><span id="2eo2iyg" class="nu0"><font color="#cc66cc">1.0</font></span><font color="#0000ff">, </font><span id="smoik4m" class="nu0"><font color="#cc66cc">1.0</font></span><span id="asu4mmi" class="br0"><font color="#66cc66">)</font></span></span> <span id="4sey4ua" class="re1"><font color="#0000ff">EndValue</font></span> <span id="2gyceaa" class="sy0"><font color="#66cc66">=</font></span><span id="wea24gw" class="re2"><font color="#0000ff"> </font><span id="o4wysq4" class="br0"><font color="#66cc66">(</font></span><span id="2g4s4ym" class="nu0"><font color="#cc66cc">2.0</font></span><font color="#0000ff">, </font><span id="ogkeecc" class="nu0"><font color="#cc66cc">2.0</font></span><font color="#0000ff">, </font><span id="e2suyu4" class="nu0"><font color="#cc66cc">1.0</font></span><span id="oq2kuii" class="br0"><font color="#66cc66">)</font></span><font color="#0000ff"> ~ </font><span id="244k4qw" class="br0"><font color="#66cc66">(</font></span><span id="24cmyok" class="nu0"><font color="#cc66cc">6.0</font></span><font color="#0000ff">, </font><span id="2s4cu4g" class="nu0"><font color="#cc66cc">6.0</font></span><font color="#0000ff">, </font><span id="6auy4mu" class="nu0"><font color="#cc66cc">1.0</font></span><span id="4o444uu" 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="ikq22eu" class="re0"><span id="ueoqu44" class="br0"><font color="#66cc66">[</font></span><font color="#0000ff">CircleFX</font><span id="6km2424" class="br0"><font color="#66cc66">]</font></span></span> <span id="u24kk44" class="re1"><font color="#0000ff">SlotList</font></span> <span id="e2444ye" class="sy0"><font color="#66cc66">=</font></span><span id="24g44us" class="re2"><font color="#0000ff"> CircleX#CircleY</font></span> <span id="yq2cckg" class="re1"><font color="#0000ff">KeepInCache</font></span> <span id="e4uwa4q" class="sy0"><font color="#66cc66">=</font></span><span id="64gy244" class="re2"><font color="#0000ff"> true</font></span>   <span id="o44s4ig" class="re0"><span id="ic4m2kk" class="br0"><font color="#66cc66">[</font></span><font color="#0000ff">CircleX</font><span id="mogkeaq" class="br0"><font color="#66cc66">]</font></span></span> <span id="2umosqw" class="re1"><font color="#0000ff">Type</font></span> <span id="2k4u4ao" class="sy0"><font color="#66cc66">=</font></span><span id="2qswg2i" class="re2"><font color="#0000ff"> position</font></span> <span id="eegiu2u" class="re1"><font color="#0000ff">StartTime</font></span> <span id="6aa4aw4" class="sy0"><font color="#66cc66">=</font></span><span id="gm4mo44" class="re2"><font color="#0000ff"> 0.0</font></span> <span id="2i4s44i" class="re1"><font color="#0000ff">EndTime</font></span> <span id="my2ysc4" class="sy0"><font color="#66cc66">=</font></span><span id="wau4agw" class="re2"><font color="#0000ff"> 1.0</font></span> <span id="2ww4w4o" class="re1"><font color="#0000ff">Curve</font></span> <span id="e24auc4" class="sy0"><font color="#66cc66">=</font></span><span id="icu2omu" class="re2"><font color="#0000ff"> sine</font></span> <span id="2km4ui2" class="re1"><font color="#0000ff">StartValue</font></span> <span id="24cmg44" class="sy0"><font color="#66cc66">=</font></span><span id="64cey2i" class="re2"><font color="#0000ff"> </font><span id="2mwce42" class="br0"><font color="#66cc66">(</font></span><span id="ey4sc24" class="nu0"><font color="#cc66cc">0.0</font></span><font color="#0000ff">, </font><span id="2wquga4" class="nu0"><font color="#cc66cc">0.0</font></span><font color="#0000ff">, </font><span id="kk2g442" class="nu0"><font color="#cc66cc">0.0</font></span><span id="24ueqay" class="br0"><font color="#66cc66">)</font></span></span> <span id="o4wgqa4" class="re1"><font color="#0000ff">EndValue</font></span> <span id="2yc42yy" class="sy0"><font color="#66cc66">=</font></span><span id="se644cy" class="re2"><font color="#0000ff"> </font><span id="244cw4u" class="br0"><font color="#66cc66">(</font></span><font color="#0000ff">-</font><span id="6uymo2u" class="nu0"><font color="#cc66cc">50.0</font></span><font color="#0000ff">, </font><span id="emwq4ec" class="nu0"><font color="#cc66cc">0.0</font></span><font color="#0000ff">, </font><span id="ss2smwu" class="nu0"><font color="#cc66cc">0.0</font></span><span id="u4kmo4k" class="br0"><font color="#66cc66">)</font></span></span> <span id="eqk24ig" class="re1"><font color="#0000ff">UseOrientation</font></span> <span id="keqscwm" class="sy0"><font color="#66cc66">=</font></span><span id="m2mwykg" class="re2"><font color="#0000ff"> true</font></span> <span id="w44wgw2" class="re1"><font color="#0000ff">UseScale</font></span> <span id="c44uuua" class="sy0"><font color="#66cc66">=</font></span><span id="wi2i4y4" class="re2"><font color="#0000ff"> true</font></span>   <span id="6g4q4w2" class="re0"><span id="64qkmay" class="br0"><font color="#66cc66">[</font></span><font color="#0000ff">CircleY@CircleX</font><span id="ase2cyw" class="br0"><font color="#66cc66">]</font></span></span> <span id="2444msi" class="re1"><font color="#0000ff">Phase</font></span> <span id="2mgi4wm" class="sy0"><font color="#66cc66">=</font></span><span id="244ku44" class="re2"><font color="#0000ff"> 0.25</font></span> <span id="4k4koks" class="re1"><font color="#0000ff">StartValue</font></span> <span id="64gwo2w" class="sy0"><font color="#66cc66">=</font></span><span id="i4osmc4" class="re2"><font color="#0000ff"> </font><span id="y2ya4em" class="br0"><font color="#66cc66">(</font></span><span id="42q424c" class="nu0"><font color="#cc66cc">0.0</font></span><font color="#0000ff">, -</font><span id="oy4gay4" class="nu0"><font color="#cc66cc">25.0</font></span><font color="#0000ff">, </font><span id="2ig2yye" class="nu0"><font color="#cc66cc">0.0</font></span><span id="6w44a4s" class="br0"><font color="#66cc66">)</font></span></span> <span id="mo42gem" class="re1"><font color="#0000ff">EndValue</font></span> <span id="eucewuk" class="sy0"><font color="#66cc66">=</font></span><span id="ii2s4k4" class="re2"><font color="#0000ff"> </font><span id="k4quwmi" class="br0"><font color="#66cc66">(</font></span><span id="2e4mow4" class="nu0"><font color="#cc66cc">0.0</font></span><font color="#0000ff">, </font><span id="6q44q4u" class="nu0"><font color="#cc66cc">25.0</font></span><font color="#0000ff">, </font><span id="2wamyec" class="nu0"><font color="#cc66cc">0.0</font></span><span id="mm4yi4a" 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="wmc444m" class="re0"><span id="ssuy2m4" class="br0"><font color="#66cc66">[</font></span><font color="#0000ff">FlipFX</font><span id="i4g4iom" class="br0"><font color="#66cc66">]</font></span></span> <span id="24qaeci" class="re1"><font color="#0000ff">SlotList</font></span> <span id="gi2a4ou" class="sy0"><font color="#66cc66">=</font></span><span id="2cu4ym4" class="re2"><font color="#0000ff"> Flip</font></span>   <span id="cksug24" class="re0"><span id="m4c4mm4" class="br0"><font color="#66cc66">[</font></span><font color="#0000ff">Flip@Wobble</font><span id="k24i4yu" class="br0"><font color="#66cc66">]</font></span></span> <span id="44ssm44" class="re1"><font color="#0000ff">EndTime</font></span> <span id="s444qwu" class="sy0"><font color="#66cc66">=</font></span><span id="eeyic2k" class="re2"><font color="#0000ff"> 0.5</font></span> <span id="ise2gou" class="re1"><font color="#0000ff">Period</font></span> <span id="ewoqcsy" class="sy0"><font color="#66cc66">=</font></span><span id="egskomk" class="re2"><font color="#0000ff"> 1.0</font></span> <span id="2k4oqo4" class="re1"><font color="#0000ff">Amplification</font></span> <span id="g24eg4w" class="sy0"><font color="#66cc66">=</font></span><span id="kc2gioe" class="re2"><font color="#0000ff"> 1.0</font></span> <span id="4egqu4s" class="re1"><font color="#0000ff">EndValue</font></span> <span id="cese24y" class="sy0"><font color="#66cc66">=</font></span><span id="ak2wyu2" class="re2"><font color="#0000ff"> </font><span id="k4ism42" class="br0"><font color="#66cc66">(</font></span><font color="#0000ff">-</font><span id="2mw4a4a" class="nu0"><font color="#cc66cc">1.0</font></span><font color="#0000ff">, </font><span id="4i44k4s" class="nu0"><font color="#cc66cc">1.0</font></span><font color="#0000ff">, </font><span id="uuwyc44" class="nu0"><font color="#cc66cc">1.0</font></span><span id="ysu4w4o" 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="6e4w444" 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="wy2q2em" class="footnotes"> <div id="amw2iow" 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="2kcwy44" 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="2kega44" 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="24444uu" 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 发表评论
]]>
þ99Ʒþþþþö̬ͼ| ҹƷþþþþžŵӰ | ŷԴƬxxxxxþþ| þü޾Ʒ?V| ھƷþþþӰԺ޹²| þþѾƷre6| þۺϾþۺϾþ| þþоƷ| 69SEXþþƷ鶹| þþƷһ| þþƷAV㽶| 99þùۺϾƷӰԺ| ޹Ʒþþ| Ʒþþþþҹҹ| þóۺɫۺ| ˾þùѹۿƵ| ޹Ʒþþþվ| ɫۺϾþþþۺһ| Ʒŷþþþ޹ | ɫۺϾžþ| ݹƷþ| ޾Ʒþþþþο| þþþޱٸ| ӰһѾþþþþþþ | һþ㽶| 91þó| 97rþþƷ99| ƷëٸAVѾþ| þþ99ƷƬĻ| þѾƷƵ| þùƷ99þþþþ| պƷþþþþ| 츾þþ| 18պҹþó| ŷþþҹһĻ | þþƷĻһ| ھƷ˾þþӰԺ| ޹պۺϾþþƷ| ޾ƷۺϾþ| Ʒþһ| ˳˳ۺþþ|