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

<channel>
	<title>9STG.COM 游手好学 &#187; AS3</title>
	<atom:link href="http://www.9STG.com/tag/as3/feed" rel="self" type="application/rss+xml" />
	<link>http://www.9STG.com</link>
	<description>学游戏，玩游戏</description>
	<lastBuildDate>Tue, 07 Jun 2011 07:59:58 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>FLASH游戏开发CPU优化11条</title>
		<link>http://www.9STG.com/archives/1793.html</link>
		<comments>http://www.9STG.com/archives/1793.html#comments</comments>
		<pubDate>Fri, 12 Nov 2010 14:21:47 +0000</pubDate>
		<dc:creator>yong</dc:creator>
				<category><![CDATA[技术碎片]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[优化]]></category>

		<guid isPermaLink="false">http://www.9STG.com/?p=1793</guid>
		<description><![CDATA[FLASH平台优化的学习笔记，总结出一条一条总比看长篇大套的好，欢迎补充和指正，欢迎来9stg.com关注游戏那些事儿！
1.       FLASH PLAYER10.1 引入了两种减少CPU处理的功能，一个是睡眠模式，另一个是SWF内容位于屏幕之外是暂停和恢复该内容
2.       睡眠模式是暂停呈现并将Stage.frameRate设置成4fps, 之所以不是0，是让所有连接保持打开状态（NetStream, Socket和NetConnection）。之所以是4，是因为许多电话制造商采用此帧速率作为刷新率
3.       暂停和恢复，当内容位置屏幕之外时候（全部内容在屏幕之外），暂停SWF文件，位于屏幕之内时候恢复SWF，从而限制CPU使用量。
4.       导致SWF位于屏幕之外的两种情况是，第一，滚动页面，第二，在浏览器中切换到新的标签。前者hasPriority HTML 参数设置为 true的时候ActionScript 的执行不会被暂停，后者无论是设为TRUE和 FALSE SWF都会降低到2FPS。关于呈现，两种情况下都会被暂停。
5.       显示对象的冻结与解冻，对于显示对象一定要使用 REMOVED_FROM_STAGE 和 ADDED_TO_STAGE 事件进行冻结和解冻。意思是将显示对象从显示列表中移除的时候，其事件一定要移除。不移除则将继续执行事件，如ENTER_FRAME，这将会消耗CPU，影响效率。
6.       自动冻结，FLASH PLAYER10以及更高版本中，当遇到空帧的时候，自动执行冻结，无需手动remove监听
7.       Loader的冻结，flash player 9采用unload就行冻结，flash player10引入了一个新的方法unloadAndStop()进行冻结，该方法会卸载SWF文件，自动冻结SWF中的每个显示对象并强制运行垃圾回收。
8.       关于MovieClip和Sprite的鼠标事件，当不需要鼠标事件的时候将mouseEnabled和mouseChildren设为false. 不断的检测鼠标交互事件会消耗CPU，尤其是大量交互对象重叠的情况。
9.       对于执行时间太长的非动画内容，优先选择计时器，而不是 Event.ENTER_FRAME 事件。
10.   在 enterFrame 事件或 Timer 处理函数中，尽量减少对可导致重绘屏幕的显示对象外观的更改。
11.   尽量减少补间动画，以节省更多的CPU处理
]]></description>
			<content:encoded><![CDATA[<p>FLASH平台优化的学习笔记，总结出一条一条总比看长篇大套的好，欢迎补充和指正，欢迎来9stg.com关注游戏那些事儿！</p>
<p>1.       FLASH PLAYER10.1 引入了两种减少CPU处理的功能，一个是睡眠模式，另一个是SWF内容位于屏幕之外是暂停和恢复该内容</p>
<p>2.       睡眠模式是暂停呈现并将Stage.frameRate设置成4fps, 之所以不是0，是让所有连接保持打开状态（NetStream, Socket和NetConnection）。之所以是4，是因为许多电话制造商采用此帧速率作为刷新率</p>
<p>3.       暂停和恢复，当内容位置屏幕之外时候（全部内容在屏幕之外），暂停SWF文件，位于屏幕之内时候恢复SWF，从而限制CPU使用量。</p>
<p>4.       导致SWF位于屏幕之外的两种情况是，第一，滚动页面，第二，在浏览器中切换到新的标签。前者hasPriority HTML 参数设置为 true的时候ActionScript 的执行不会被暂停，后者无论是设为TRUE和 FALSE SWF都会降低到2FPS。关于呈现，两种情况下都会被暂停。</p>
<p>5.       显示对象的冻结与解冻，对于显示对象一定要使用 REMOVED_FROM_STAGE 和 ADDED_TO_STAGE 事件进行冻结和解冻。意思是将显示对象从显示列表中移除的时候，其事件一定要移除。不移除则将继续执行事件，如ENTER_FRAME，这将会消耗CPU，影响效率。</p>
<p>6.       自动冻结，FLASH PLAYER10以及更高版本中，当遇到空帧的时候，自动执行冻结，无需手动remove监听</p>
<p>7.       Loader的冻结，flash player 9采用unload就行冻结，flash player10引入了一个新的方法unloadAndStop()进行冻结，该方法会卸载SWF文件，自动冻结SWF中的每个显示对象并强制运行垃圾回收。</p>
<p>8.       关于MovieClip和Sprite的鼠标事件，当不需要鼠标事件的时候将mouseEnabled和mouseChildren设为false. 不断的检测鼠标交互事件会消耗CPU，尤其是大量交互对象重叠的情况。</p>
<p>9.       对于执行时间太长的非动画内容，优先选择计时器，而不是 Event.ENTER_FRAME 事件。</p>
<p>10.   在 enterFrame 事件或 Timer 处理函数中，尽量减少对可导致重绘屏幕的显示对象外观的更改。</p>
<p>11.   尽量减少补间动画，以节省更多的CPU处理</p>
]]></content:encoded>
			<wfw:commentRss>http://www.9STG.com/archives/1793.html/feed</wfw:commentRss>
		<slash:comments>91</slash:comments>
		</item>
		<item>
		<title>FLASH游戏开发内存优化13条</title>
		<link>http://www.9STG.com/archives/1791.html</link>
		<comments>http://www.9STG.com/archives/1791.html#comments</comments>
		<pubDate>Tue, 09 Nov 2010 15:38:26 +0000</pubDate>
		<dc:creator>yong</dc:creator>
				<category><![CDATA[小游戏开发]]></category>
		<category><![CDATA[技术碎片]]></category>
		<category><![CDATA[游戏心得]]></category>
		<category><![CDATA[AS3]]></category>

		<guid isPermaLink="false">http://www.9STG.com/?p=1791</guid>
		<description><![CDATA[这篇算是读书笔记吧，边读边记，一来用简练语句分享，二来加深学习印象！关于内存优化总结了13条，欢迎交流指正！也欢迎常来9stg.com，关注游戏那些事儿！
1. 使用合适的显示对象，对于非交互的简单形状用Shape对象，对于不需要时间轴的交互式对象用Sprite,对于使用时间轴的动画用MovieClip,他们的内存使用量分别是236,412,440,可见shape很省内存
2. Number原始存储内存占8个字节，int,uint,Boolean,String均占4个字节, 关于赋值后作占内存，取决值赋的值
3. 对象的重复利用, 在FOR循环内new对象要小心，每次new都会增大内存。
4. 通过重复使用 BitmapData 对象可以节省更多的内存,即不同的bitmap公用一个bitmapdata
5. 重复使用相同对象的时候，可以考虑下对象池的应用
6. 垃圾回收运行时会不断检测出处于非活动状态的对象，大型项目中此进程会占用大量CPU，所以尽量重使用对象，不用的对象设置为NULL
7. 内存释放方面，为了确保被垃圾回收，首先保证该对象没有其他引用，然后移除监听，在然后设置为NULL。关于bitmapdata, 先用dispose 在设置为null
8. 在 Flash Player 10.1 中，对所有bitmapdata实例采用同一版本的bitmapdata, 大大节省了内存, 当bitmapdata数据发生变化的时候，内存中会建立一个新的bitmapdata实例
9. 尽量避免使用滤镜，当对显示对象使用滤镜的时候，内存中将创建两个位图，每个位图的大小都与显示对象相同。一个是显示对象的栅格化版本，一个是用于滤镜的位图
10. 当修改滤镜的属性的时候，内存中两个位图都将更新创建新的位图，会消耗一些CPU，并且会占用大量内存。
11. Flash Player 10.1 在所有平台上引入了一种新的过滤行为。如果滤镜在 30 秒内没有进行修改，或者将其隐藏或置于屏幕之外，将释放未过滤的位图占用的内存。该方式成为动态位图卸载。
12. 使用滤镜时仍要谨慎小心；在对它们进行修改时，仍要求大量 CPU 或 GPU 处理。
13. 如果想要滤镜效果，最好用PHOTOSHOP来做一个
]]></description>
			<content:encoded><![CDATA[<p>这篇算是读书笔记吧，边读边记，一来用简练语句分享，二来加深学习印象！关于内存优化总结了13条，欢迎交流指正！也欢迎常来9stg.com，关注游戏那些事儿！</p>
<p>1. 使用合适的显示对象，对于非交互的简单形状用Shape对象，对于不需要时间轴的交互式对象用Sprite,对于使用时间轴的动画用MovieClip,他们的内存使用量分别是236,412,440,可见shape很省内存</p>
<p>2. Number原始存储内存占8个字节，int,uint,Boolean,String均占4个字节, 关于赋值后作占内存，取决值赋的值</p>
<p>3. 对象的重复利用, 在FOR循环内new对象要小心，每次new都会增大内存。</p>
<p>4. 通过重复使用 BitmapData 对象可以节省更多的内存,即不同的bitmap公用一个bitmapdata</p>
<p>5. 重复使用相同对象的时候，可以考虑下对象池的应用</p>
<p>6. 垃圾回收运行时会不断检测出处于非活动状态的对象，大型项目中此进程会占用大量CPU，所以尽量重使用对象，不用的对象设置为NULL</p>
<p>7. 内存释放方面，为了确保被垃圾回收，首先保证该对象没有其他引用，然后移除监听，在然后设置为NULL。关于bitmapdata, 先用dispose 在设置为null</p>
<p>8. 在 Flash Player 10.1 中，对所有bitmapdata实例采用同一版本的bitmapdata, 大大节省了内存, 当bitmapdata数据发生变化的时候，内存中会建立一个新的bitmapdata实例</p>
<p>9. 尽量避免使用滤镜，当对显示对象使用滤镜的时候，内存中将创建两个位图，每个位图的大小都与显示对象相同。一个是显示对象的栅格化版本，一个是用于滤镜的位图</p>
<p>10. 当修改滤镜的属性的时候，内存中两个位图都将更新创建新的位图，会消耗一些CPU，并且会占用大量内存。</p>
<p>11. Flash Player 10.1 在所有平台上引入了一种新的过滤行为。如果滤镜在 30 秒内没有进行修改，或者将其隐藏或置于屏幕之外，将释放未过滤的位图占用的内存。该方式成为动态位图卸载。</p>
<p>12. 使用滤镜时仍要谨慎小心；在对它们进行修改时，仍要求大量 CPU 或 GPU 处理。</p>
<p>13. 如果想要滤镜效果，最好用PHOTOSHOP来做一个</p>
]]></content:encoded>
			<wfw:commentRss>http://www.9STG.com/archives/1791.html/feed</wfw:commentRss>
		<slash:comments>47</slash:comments>
		</item>
		<item>
		<title>FLASH代码和呈现在帧上的表现</title>
		<link>http://www.9STG.com/archives/1789.html</link>
		<comments>http://www.9STG.com/archives/1789.html#comments</comments>
		<pubDate>Wed, 03 Nov 2010 14:11:40 +0000</pubDate>
		<dc:creator>yong</dc:creator>
				<category><![CDATA[技术碎片]]></category>
		<category><![CDATA[AS3]]></category>

		<guid isPermaLink="false">http://www.9STG.com/?p=1789</guid>
		<description><![CDATA[有时候会发现FLASH很卡的现象，或许与今天所写的有关
FLASH代码和呈现在帧上的表现
1. FLASH动画的形成，是围绕帧频不断渲染图形产生的
2. 帧的执行包括代码和呈现两部分
3. 对于每一帧会先执行代码后执行呈现
4. 代码执行时间加上呈现时间原则上应该在帧频所规定的时间内完成，这样动画很流畅
5. 在帧上所执行的代码和呈现时间超过帧频所定的时间怎么办？FLASH会在该帧继续分配多余的时间，于
是帧频自动降低，动画会变卡，游戏性能变差。
所以从代码和程序上优化，不要做过于复杂的操作让执行时间过长，导致游戏不流畅的现象！
参考文献 flashplatform_optimizing_content
]]></description>
			<content:encoded><![CDATA[<p>有时候会发现FLASH很卡的现象，或许与今天所写的有关</p>
<p>FLASH代码和呈现在帧上的表现<br />
1. FLASH动画的形成，是围绕帧频不断渲染图形产生的<br />
2. 帧的执行包括代码和呈现两部分<br />
3. 对于每一帧会先执行代码后执行呈现<br />
4. 代码执行时间加上呈现时间原则上应该在帧频所规定的时间内完成，这样动画很流畅<br />
5. 在帧上所执行的代码和呈现时间超过帧频所定的时间怎么办？FLASH会在该帧继续分配多余的时间，于<br />
是帧频自动降低，动画会变卡，游戏性能变差。</p>
<p>所以从代码和程序上优化，不要做过于复杂的操作让执行时间过长，导致游戏不流畅的现象！<br />
参考文献 flashplatform_optimizing_content</p>
]]></content:encoded>
			<wfw:commentRss>http://www.9STG.com/archives/1789.html/feed</wfw:commentRss>
		<slash:comments>40</slash:comments>
		</item>
		<item>
		<title>FLASH AS3 游戏开发 &#8211; 初学的建议</title>
		<link>http://www.9STG.com/archives/1762.html</link>
		<comments>http://www.9STG.com/archives/1762.html#comments</comments>
		<pubDate>Fri, 22 Oct 2010 15:12:57 +0000</pubDate>
		<dc:creator>yong</dc:creator>
				<category><![CDATA[技术碎片]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[游戏开发]]></category>

		<guid isPermaLink="false">http://www.9STG.com/?p=1762</guid>
		<description><![CDATA[简单的学习游戏制作，不要想的太复杂，如果你学的是设计，编程思想基础不好，不妨从以下方面着手。
1. 最基础的东西, 了解下FLASH IDE，了解下文档类，简单的了解下类，对象的概念，无需深入面向对象的理解，可以在具体开发中慢慢理解面向对象。
2. 理解游戏中的可视化元素，映射到AS3游戏开发中来的其实就是显示对象编程，简单的说是如果游戏中没有显示对象，你什么都看不到。试图去理解MovieClip, Sprite,以及容器的概念。
3. 理解让可视化对象动起来的知识，比如想让飞机左右摆动，就像雷电，让游戏中的小人跳来跳去，就像超级玛丽。这些都需要的AS3知识是，鼠标与键盘事件，不需要学会自定义事件，只需要学会FLASH现有鼠标点击时间，键盘按下事件触发等知识。
有了可视化的东西，你又用鼠标键盘控制他们动了，这不就是游戏吗，就这么简单，从这两方面下手去入门游戏制作，慢慢就可以进阶。
]]></description>
			<content:encoded><![CDATA[<p>简单的学习游戏制作，不要想的太复杂，如果你学的是设计，编程思想基础不好，不妨从以下方面着手。</p>
<p><strong>1. 最基础的东西,</strong> 了解下FLASH IDE，了解下文档类，简单的了解下类，对象的概念，无需深入面向对象的理解，可以在具体开发中慢慢理解面向对象。</p>
<p>2. <strong>理解游戏中的可视化元素</strong>，映射到AS3游戏开发中来的其实就是显示对象编程，简单的说是如果游戏中没有显示对象，你什么都看不到。试图去理解MovieClip, Sprite,以及容器的概念。</p>
<p>3. <strong>理解让可视化对象动起来的知识</strong>，比如想让飞机左右摆动，就像雷电，让游戏中的小人跳来跳去，就像超级玛丽。这些都需要的AS3知识是，鼠标与键盘事件，不需要学会自定义事件，只需要学会FLASH现有鼠标点击时间，键盘按下事件触发等知识。</p>
<p>有了可视化的东西，你又用鼠标键盘控制他们动了，这不就是游戏吗，就这么简单，从这两方面下手去入门游戏制作，慢慢就可以进阶。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.9STG.com/archives/1762.html/feed</wfw:commentRss>
		<slash:comments>62</slash:comments>
		</item>
		<item>
		<title>ActionScript 3.0 game programming university 学习笔记</title>
		<link>http://www.9STG.com/archives/323.html</link>
		<comments>http://www.9STG.com/archives/323.html#comments</comments>
		<pubDate>Wed, 09 Dec 2009 03:53:05 +0000</pubDate>
		<dc:creator>yong</dc:creator>
				<category><![CDATA[读书笔记]]></category>
		<category><![CDATA[AS3]]></category>

		<guid isPermaLink="false">http://www.8ria.com/?p=323</guid>
		<description><![CDATA[天地会首发，我的初学笔记
http://flash.9ria.com/thread-4734-1-1.html
]]></description>
			<content:encoded><![CDATA[<p>天地会首发，我的初学笔记</p>
<p><a href="http://flash.9ria.com/thread-4734-1-1.html">http://flash.9ria.com/thread-4734-1-1.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.9STG.com/archives/323.html/feed</wfw:commentRss>
		<slash:comments>70</slash:comments>
		</item>
		<item>
		<title>游手好学教程 &#8211; AS3实现飞机游戏角色的移动</title>
		<link>http://www.9STG.com/archives/219.html</link>
		<comments>http://www.9STG.com/archives/219.html#comments</comments>
		<pubDate>Wed, 02 Dec 2009 16:28:53 +0000</pubDate>
		<dc:creator>yong</dc:creator>
				<category><![CDATA[游戏教程]]></category>
		<category><![CDATA[AS3]]></category>

		<guid isPermaLink="false">http://www.8ria.com/?p=219</guid>
		<description><![CDATA[最近做了一个纯俯视的射击类游戏，涉及到地图不规则边缘的碰撞检测，也在鼠标操作以及键盘操作飞机上犹豫了一下。现在分别做出鼠标和键盘的飞机操作做个比较，不知道大家偏好那种. 也放出源码和大家分享交流，代码很简单，我接触AS3不久，经验比较少，大家多多指点，共同进步啊。
游戏是纯俯视的，控制飞机，无论是键盘还是鼠标都会运用到三角函数的知识，分别计算出飞机在X轴和Y轴上的速度，然后在游戏的循环函数（ENTER_FRAME或者Timer）里面控制飞机在X轴和Y轴上的增加或者减少，原理大概就是这样的。
下面，先看看SWF演示吧，默认是键盘操作，方向键控制，点击相关按钮切换到鼠标操作，鼠标操作我这里做的其实就是一个简单的跟随.


下边是实现该移动功能的文档类代码，你可以封装成单独的player类去运用.
/**
* 键盘与鼠标控制游戏中的人物
* Author: Vincent chan
* URL: http://www.8ria.com
*/
package
{
 import flash.display.MovieClip;
 import flash.events.Event;
 import flash.events.KeyboardEvent;
 import flash.ui.Keyboard;
 import flash.events.MouseEvent;
 
 public class IndexDoc extends MovieClip
 {
  private var player:MovieClip;
  private var up:Boolean = false;
  private var down:Boolean = false;
  private var left:Boolean = false;
  private var right:Boolean = false;
  private var decay:Number = .95;
  private var speedX:Number = 0;
  private var speedY:Number = 0;
  private var speedZ:Number = .5; 
  private var speedR:Number = 4;
  private [...]]]></description>
			<content:encoded><![CDATA[<p>最近做了一个纯俯视的射击类游戏，涉及到地图不规则边缘的碰撞检测，也在鼠标操作以及键盘操作飞机上犹豫了一下。现在分别做出鼠标和键盘的飞机操作做个比较，不知道大家偏好那种. 也放出源码和大家分享交流，代码很简单，我接触AS3不久，经验比较少，大家多多指点，共同进步啊。</p>
<p>游戏是纯俯视的，控制飞机，无论是键盘还是鼠标都会运用到三角函数的知识，分别计算出飞机在X轴和Y轴上的速度，然后在游戏的循环函数（ENTER_FRAME或者Timer）里面控制飞机在X轴和Y轴上的增加或者减少，原理大概就是这样的。</p>
<p>下面，先看看SWF演示吧，默认是键盘操作，方向键控制，点击相关按钮切换到鼠标操作，鼠标操作我这里做的其实就是一个简单的跟随.</p>
<p><span id="more-219"></span></p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="500" height="500" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.8ria.com/wp-content/uploads/2009/12/shoot2.swf" /><embed type="application/x-shockwave-flash" width="500" height="500" src="http://www.8ria.com/wp-content/uploads/2009/12/shoot2.swf"></embed></object></p>
<p>下边是实现该移动功能的文档类代码，你可以封装成单独的player类去运用.</p>
<p>/**<br />
* 键盘与鼠标控制游戏中的人物<br />
* Author: Vincent chan<br />
* URL: <a href="http://www.8ria.com">http://www.8ria.com</a><br />
*/</p>
<p>package<br />
{<br />
 import flash.display.MovieClip;<br />
 import flash.events.Event;<br />
 import flash.events.KeyboardEvent;<br />
 import flash.ui.Keyboard;<br />
 import flash.events.MouseEvent;<br />
 <br />
 public class IndexDoc extends MovieClip<br />
 {<br />
  private var player:MovieClip;<br />
  private var up:Boolean = false;<br />
  private var down:Boolean = false;<br />
  private var left:Boolean = false;<br />
  private var right:Boolean = false;<br />
  private var decay:Number = .95;<br />
  private var speedX:Number = 0;<br />
  private var speedY:Number = 0;<br />
  private var speedZ:Number = .5; <br />
  private var speedR:Number = 4;<br />
  private var speed:Number = 0;<br />
  private var maxSpeed:Number = 10;<br />
  private var style:String = &#8220;key&#8221;;</p>
<p>  public function IndexDoc()<br />
  {<br />
   //初始化UI<br />
   initUI();<br />
   //初始化事件<br />
   initEvent();<br />
  }<br />
  <br />
  private function initUI():void<br />
  {<br />
   player = fly_mc;<br />
   this["key_btn"].buttonMode = true;<br />
   this["mouse_btn"].buttonMode = true;<br />
  }<br />
  <br />
  private function initEvent():void<br />
  {<br />
   stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);<br />
   stage.addEventListener(KeyboardEvent.KEY_UP, keyUPHandler);<br />
   stage.addEventListener(Event.ENTER_FRAME, gameLoop);<br />
   this["key_btn"].addEventListener(MouseEvent.CLICK, changeStyle);<br />
   this["mouse_btn"].addEventListener(MouseEvent.CLICK, changeStyle);<br />
  }<br />
  <br />
  private function changeStyle(e:MouseEvent):void<br />
  {<br />
   //点击按钮选择鼠标或者键盘模式<br />
   switch(e.currentTarget.name)<br />
   {<br />
    case &#8220;mouse_btn&#8221;:<br />
    style = &#8220;mouse&#8221;;<br />
    break;<br />
    <br />
    case &#8220;key_btn&#8221;:<br />
    style = &#8220;key&#8221;;<br />
    break;<br />
   }<br />
  }</p>
<p>  private function gameLoop(e:Event):void<br />
  {<br />
   //使用键盘<br />
   if(style == &#8220;key&#8221;)<br />
   {<br />
            useKey();<br />
   }<br />
   //使用鼠标<br />
   if(style == &#8220;mouse&#8221;)<br />
   {<br />
   useMouse();<br />
   }<br />
  }<br />
       <br />
  private function useKey()<br />
  {<br />
   //键盘控制player的移动<br />
   if(up)<br />
   {<br />
   speedX += speedZ*Math.sin(player.rotation*(Math.PI/180));<br />
   speedY += speedZ*Math.cos(player.rotation*(Math.PI/180));<br />
   player.gotoAndStop(2);<br />
   }<br />
   else<br />
   {<br />
   speedX *= decay;<br />
   speedY *= decay;<br />
   player.gotoAndStop(1);<br />
   }<br />
   <br />
   speed = Math.sqrt((speedX*speedX)+(speedY*speedY));<br />
   <br />
   if( speed &gt; maxSpeed )<br />
   {<br />
    speedX *= maxSpeed/speed;<br />
    speedY *= maxSpeed/speed;<br />
   }</p>
<p>   player.y -= speedY;<br />
   player.x += speedX;<br />
           <br />
   //控制player的角度<br />
   if(right)<br />
   {<br />
   player.rotation += speedR;<br />
   }<br />
   if(left)<br />
   {<br />
   player.rotation -= speedR;<br />
   }<br />
   <br />
   //player越界处理<br />
   if( player.y &lt; 0 ){<br />
    player.y = stage.stageHeight;<br />
   }<br />
   if( player.y &gt; stage.stageHeight ){<br />
    player.y = 0;<br />
   }<br />
   if( player.x &lt; 0 ){<br />
    player.x = stage.stageWidth;<br />
   }<br />
   if( player.x &gt; stage.stageWidth ){<br />
    player.x = 0;<br />
   }   <br />
  }<br />
  <br />
  private function useMouse():void<br />
  {<br />
      var dx : Number = mouseX &#8211; player.x;<br />
   var dy : Number = mouseY &#8211; player.y; </p>
<p>   player.x += dx/10;<br />
   player.y += dy/10;<br />
   <br />
   var angle : Number = Math.atan2(dy, dx) * 180 / Math.PI;</p>
<p>   player.rotation = angle + 90;<br />
  }<br />
  <br />
  private function keyDownHandler(e:KeyboardEvent):void<br />
  {<br />
   switch( e.keyCode )<br />
   {<br />
    case Keyboard.UP:<br />
     up = true;<br />
     break;<br />
     <br />
    case Keyboard.DOWN:<br />
     down = true;<br />
     break;<br />
     <br />
    case Keyboard.LEFT:<br />
     left = true;<br />
     break;<br />
     <br />
    case Keyboard.RIGHT:<br />
     right = true;<br />
     break;<br />
   }<br />
  }<br />
  <br />
  private function keyUPHandler(e:KeyboardEvent):void<br />
  {<br />
   switch( e.keyCode )<br />
   {<br />
    case Keyboard.UP:<br />
     up = false;<br />
     break;<br />
     <br />
    case Keyboard.DOWN:<br />
     down = false;<br />
     break;<br />
     <br />
    case Keyboard.LEFT:<br />
     left = false;<br />
     break;<br />
     <br />
    case Keyboard.RIGHT:<br />
     right = false;<br />
     break;<br />
   }<br />
  }<br />
  <br />
 } <br />
}</p>
]]></content:encoded>
			<wfw:commentRss>http://www.9STG.com/archives/219.html/feed</wfw:commentRss>
		<slash:comments>48</slash:comments>
		</item>
	</channel>
</rss>

