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();
	}
}

运行效果如下所示:


  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值