ActionScript 3.0 學習(十一) AS3 模擬接金幣小遊戲

         本節程序實現了模擬接金幣小遊戲,接到青綠色時就加分,接到深藍色時則會扣分。程序中主要要應用的知識點有:按鍵檢測,隨機數生成,碰撞檢測,運用顯示對象name屬性判別其顏色。

package
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.KeyboardEvent;
	import flash.events.TimerEvent;
	import flash.ui.Keyboard;
	import flash.utils.Timer;
	import flash.text.TextField;
	import flash.text.TextFieldType;
	import flash.text.TextFormat;
	
	public class RecieveCirGame extends Sprite
	{
		private var _activeRect:SelfDefineRect; 
		private var _circleArray:Array = new Array();
		private var _key:Object=new Object();
		private var _green:Number = 0x00ff00;
		private var _blue:Number = 0x0000ff;
		private var _score:int = 0;
		private var _txt:TextField;
		private var _textFormat:TextFormat = new TextFormat();
		
		public function RecieveCirGame()
		{
			_txt= createText(0, 0, stage.stageWidth, stage.stageHeight);
			_txt.type = TextFieldType.DYNAMIC;
			_txt.text ="" + _score;
			addChild(_txt);
			var container:Sprite = new Sprite();
			_activeRect = new SelfDefineRect();
			_activeRect.x = 10;
			_activeRect.y = stage.stageHeight - _activeRect.height;
			container.addChild(_activeRect);
			addChild(container);
			
			var mytimer:Timer = new Timer(1000, 0);
			mytimer.start();
			mytimer.addEventListener(TimerEvent.TIMER, onChange);
			
			stage.addEventListener(Event.ENTER_FRAME, onDrop);
			stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
			stage.addEventListener(KeyboardEvent.KEY_UP,onKeyUp);
		}
		
		private function onKeyDown(event:KeyboardEvent):void
		{
			_key[event.keyCode] = true;
		}
		
		private function onKeyUp(event:KeyboardEvent):void
		{
			delete _key[event.keyCode];
		}
		
		private function onChange(evt:TimerEvent):void
		{
			var circleColor:Number;
			var circleName:String;
			if(Math.random()>0.5)
			{
				circleColor = _green;
                                circleName = "green"; 
			}
			else
			{
				circleColor = _blue;
				circleName = "blue"; 
			}
			var newCircle:Sprite= new Sprite();
			newCircle.name = circleName;
			newCircle.alpha = 0.5;
			newCircle.graphics.beginFill(circleColor);
			newCircle.graphics.drawCircle(Math.random()*500, 0, Math.random()*50);
			newCircle.graphics.endFill();
			addChild(newCircle);
			_circleArray.push(newCircle);
		}
		
		private function onDrop(evt:Event):void
		{
			if (_key[Keyboard.LEFT])
			{
				_activeRect.x -= 6;
			}
			if (_key[Keyboard.RIGHT])
			{
				_activeRect.x += 6;
			}
			
			for(var i:int = 0; i<_circleArray.length; i++)
			{
				_circleArray[i].y += 3;
				if(_circleArray[i].y > stage.stageHeight)
				{
					removeChild(_circleArray[i]);  
					_circleArray.splice(i,1);      
					i--;
				}
				
			}
			
			for(var j:int = 0; j<_circleArray.length; j++)
			{
				var cirName:String;
				if(_activeRect.hitTestObject(_circleArray[j]))
				{
					cirName = (_circleArray[j] as Sprite).name;
					removeChild(_circleArray[j]);  
					_circleArray.splice(j,1);      
					j--;
					if(cirName == "green")
					{
						_score++;
						trace(_score);
					}
					else if(cirName == "blue")
					{
						_score--;
						trace(_score);
					}
				}
				cirName = "";
			}
			
			_txt.text = "得分:" + _score;
		}
	
		private function createText(x:int, y:int, width:int, height:int):TextField
		{
			var result:TextField = new TextField();
			_textFormat.font = "Arial";
			_textFormat.size = 20;
			result.defaultTextFormat = _textFormat;
			result.x = x;
			result.y = y;
			result.width = width;
			result.height = height;
			result.background = true;
			result.backgroundColor = 0xf0f0f0;
			addChild(result);
			return result;
		}
	}
}

import flash.display.Sprite;
import flash.events.KeyboardEvent;

class SelfDefineRect extends Sprite
{
	public function SelfDefineRect()
	{
		this.graphics.beginFill(0xff0000);
		this.graphics.drawRoundRect(0, 0, 80, 25, 10, 10);
		this.graphics.endFill();
	}
}

運行效果如下所示:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章