<?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; 游戏教程</title>
	<atom:link href="http://www.9STG.com/category/dev_game/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>游手好学教程 &#8211; AS3游戏小地图的实现 MiniMap类</title>
		<link>http://www.9STG.com/archives/267.html</link>
		<comments>http://www.9STG.com/archives/267.html#comments</comments>
		<pubDate>Sat, 05 Dec 2009 14:25:07 +0000</pubDate>
		<dc:creator>yong</dc:creator>
				<category><![CDATA[游戏教程]]></category>

		<guid isPermaLink="false">http://www.8ria.com/?p=267</guid>
		<description><![CDATA[上周上线的游戏返回数据表明，我的游戏做的比较难，需要加个小地图降低难度，觉得实现小地图的方法还是比较简单的，而且在游戏中比较实用，拿来和大家分享下吧，实现方法其实就是根据缩放比率刷新小地图上人物的X,Y坐标。

实现的效果演示：

小地图类，MiniMap.as
/**
 * 游手好学游戏 &#8211; 小地图的实现
 * @author Vincent
 * @website www.8ria.com
 */
package 
{
 import flash.display.MovieClip;
 import flash.display.Sprite;
 public class MiniMap extends MovieClip
 {
  private var _rate : Number;
  private var _square : Sprite;
  private var _point : Sprite;
 
  public function MiniMap()
  {
   
  }
 
/**
 * 安装小地图
 * con 小地图的容器
 * bigWidth 大地图的宽度
 * bigHeight 大地图的高度
 * rate 地图缩放比率
 * alp 小地图的透明度
 */
 
  public function setupMiniMap(con : Object, bigWidth : Number, bigHeight : [...]]]></description>
			<content:encoded><![CDATA[<p>上周上线的游戏返回数据表明，我的游戏做的比较难，需要加个小地图降低难度，觉得实现小地图的方法还是比较简单的，而且在游戏中比较实用，拿来和大家分享下吧，实现方法其实就是根据缩放比率刷新小地图上人物的X,Y坐标。</p>
<p><strong><span id="more-267"></span></strong></p>
<p><strong>实现的效果演示：</strong></p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="550" height="400" 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/miniMap.swf" /><embed type="application/x-shockwave-flash" width="550" height="400" src="http://www.8ria.com/wp-content/uploads/2009/12/miniMap.swf"></embed></object></p>
<p><strong>小地图类，MiniMap.as</strong></p>
<p>/**<br />
 * 游手好学游戏 &#8211; 小地图的实现<br />
 * @author Vincent<br />
 * @website <a href="http://www.8ria.com">www.8ria.com</a><br />
 */</p>
<p>package <br />
{<br />
 import flash.display.MovieClip;<br />
 import flash.display.Sprite;</p>
<p> public class MiniMap extends MovieClip<br />
 {<br />
  private var _rate : Number;<br />
  private var _square : Sprite;<br />
  private var _point : Sprite;<br />
 <br />
  public function MiniMap()<br />
  {<br />
   <br />
  }<br />
 <br />
/**<br />
 * 安装小地图<br />
 * con 小地图的容器<br />
 * bigWidth 大地图的宽度<br />
 * bigHeight 大地图的高度<br />
 * rate 地图缩放比率<br />
 * alp 小地图的透明度<br />
 */<br />
 <br />
  public function setupMiniMap(con : Object, bigWidth : Number, bigHeight : Number, rate : Number, alp : Number):void<br />
  {<br />
 //画小地图<br />
    _square = new Sprite();<br />
    _square.graphics.beginFill(0&#215;000000);<br />
    _square.graphics.drawRect(0, 0, bigWidth*rate, bigHeight*rate);<br />
 _square.alpha = alp<br />
 con.addChild(_square);<br />
 //画点<br />
    _point = new Sprite();<br />
    _point.graphics.beginFill(0xFF0000);<br />
    _point.graphics.drawCircle(4, 4, 4);<br />
 con.addChild(_point);<br />
    <br />
    _rate = rate;<br />
  }</p>
<p> <br />
/**<br />
 * 刷新玩家位置<br />
 * px 玩家的X坐标<br />
 * py 玩家的X\Y坐标<br />
 */<br />
  public function updataMiniMap(px : Number, py : Number):void<br />
  {<br />
   _point.x = px * _rate;<br />
   _point.y = py * _rate;<br />
  }<br />
 <br />
 }<br />
}</p>
<p><strong>使用小地图类</strong></p>
<p>第一安装MiniMap: </p>
<p>_miniMap = new MiniMap();<br />
_miniMap.setupMiniMap(this,stage.stageWidth,stage.stageHeight,0.25, 0.5);</p>
<p>第二，把_miniMap.updataMiniMap(_player.x,_player.y)放到游戏循环里，就是不断的刷新_player的X,Y坐标</p>
<p><strong>我的文档类如下</strong></p>
<p>/**<br />
 * 游手好学游戏 &#8211; 小地图的实现<br />
 * @author Vincent<br />
 * @website <a href="http://www.8ria.com">www.8ria.com</a><br />
 */</p>
<p>package{<br />
 import flash.display.Sprite;<br />
 import flash.display.MovieClip;<br />
 import flash.events.Event;<br />
 <br />
 public class IndexDoc extends Sprite<br />
 {<br />
    private var _miniMap : MiniMap;<br />
    private var _player : MovieClip;<br />
   <br />
    public function IndexDoc():void<br />
    {<br />
     initUI();<br />
     initEvent();</p>
<p>    }<br />
   <br />
  private function initUI():void<br />
  {<br />
   <br />
     _miniMap = new MiniMap();<br />
     //安装小地图<br />
     _miniMap.setupMiniMap(this,stage.stageWidth,stage.stageHeight,0.25, 0.5);<br />
    <br />
   _player = fly_mc;<br />
  }<br />
  <br />
  private function initEvent():void<br />
  {<br />
     stage.addEventListener(Event.ENTER_FRAME, gameLoop);<br />
  }<br />
  <br />
  private function gameLoop(e:Event):void<br />
  {<br />
   //刷新小地图<br />
            _miniMap.updataMiniMap(_player.x,_player.y);<br />
            flyHandler();<br />
  }<br />
  <br />
  private function flyHandler():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 />
 }<br />
}</p>
]]></content:encoded>
			<wfw:commentRss>http://www.9STG.com/archives/267.html/feed</wfw:commentRss>
		<slash:comments>77</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>46</slash:comments>
		</item>
	</channel>
</rss>

