zoukankan      html  css  js  c++  java
  • 鼠标控制元件移动带缓动 鼠标点击发射子弹

    /*文档类 库中有一个ball元件*/
    package 
    {
    	import flash.display.Sprite;
    	import flash.events.Event;
    	import flash.events.MouseEvent;
    
    	public class Main extends Sprite
    	{
    		private var ball:Ball;
    		private var speed:Number;
    		private var easing:Number = 0.05;
    		private var mcArr:Array = new Array  ;
    		private var fire_flag:Boolean;
    
    		private var bulletArr:Array = new Array  ;
    		private var bullet:Bullet;
    		private var time:int;
    		private var bradians:Number;
    
    
    		public function Main()
    		{
    			addEventListener(Event.ADDED_TO_STAGE,addedToStage);
    		}
    		
    		private function addedToStage(e:Event):void
    		{
    			init();
    		}
    		private function init():void
    		{
    			speed = 3;
    			ball = new Ball  ;
    			ball.x = 50;
    			ball.y = 50;
    			addChild(ball);
    			
    			stage.addEventListener(MouseEvent.MOUSE_DOWN,_onMouseDown);
    			stage.addEventListener(MouseEvent.MOUSE_UP,_onMouseUp);
    			addEventListener(Event.ENTER_FRAME,onEnter);
    		}
    
    		private function _onMouseDown(e:MouseEvent):void
    		{
    			fire_flag = true;
    		}
    
    		private function _onMouseUp(e:MouseEvent):void
    		{
    			time = 0;
    			fire_flag = false;
    			return;
    		}
    
    		private function onEnter(e:Event):void
    		{
    			if (fire_flag)
    			{
    				if (time == 0)
    				{
    					fire();
    				}
    				time++;
    				if (time % 5 == 0)
    				{
    					fire();
    				}
    			}
    			var dx:Number = mouseX - ball.x;
    			var dy:Number = mouseY - ball.y;
    			var radians:Number = Math.atan2(dy,dx);
    			ball.rotation = radians * 180 / Math.PI;
    			//var vx:Number = Math.cos(radians) * speed;
    			//var vy:Number = Math.sin(radians) * speed;
    			var vx:Number = dx * easing;
    			var vy:Number = dy * easing;
    			//trace(ball.rotation);
    			ball.x +=  vx;
    			ball.y +=  vy;
    		}
    
    
    		private function fire():void
    		{
    			var dx:Number = mouseX - ball.x;
    			var dy:Number = mouseY - ball.y;
    			var radians:Number = Math.atan2(dy,dx);
    			//var angle:Number = radians * 180 / Math.PI;
    			//radians=angle*Math.PI/180;
    			bullet = new Bullet(radians,10,10,0XFF0000);
    			bullet.x = ball.x;
    			bullet.y = ball.y;
    			addChild(bullet);
    			bulletArr.push(bullet);
    		}
    
    
    	}
    }
    
    /*子弹类*/
    package 
    {
    	import flash.display.Sprite;
    	import flash.events.Event;
    	import flash.display.Stage;
    
    	public class Bullet extends Sprite
    	{
    		private var _Number;
    		private var _height:Number;
    		private var color:uint;
    		private var bullet:Bullet;
    		private var speed:Number;
    		private var radians:Number;
    		private var MinX:int;
    		private var MaxX:int;
    		private var MinY:int;
    		private var MaxY:int;
    
    		public function Bullet(radians:Number,_Number=10,_height:Number=10,color:uint=0XFF0000)
    		{
    			addEventListener(Event.ADDED_TO_STAGE,addedToStage);
    			this._width = _width;
    			this._height = _height;
    			this.color = color;
    			this.radians = radians;
    		}
    
    		private function addedToStage(e:Event):void
    		{
    			MinX = this.width / 2;
    			MaxX = stage.stageWidth - this.width / 2;
    			MinY = this.height / 2;
    			MaxY = stage.stageHeight - this.height / 2;
    
    			speed = 20;
    			drawBullet();
    			addEventListener(Event.ENTER_FRAME,enterFrameHandler);
    		}
    
    		private function drawBullet():void
    		{
    			graphics.beginFill(color);
    			graphics.drawRect(0,0,_width,_height);
    			graphics.endFill();
    		}
    
    		private function enterFrameHandler(e:Event):void
    		{
    			MoveAngle(radians);
    			movingRange();
    		}
    
    		private function MoveAngle(radians:Number):void
    		{
    			this.rotation = radians * 180 / Math.PI;
    			var vx:Number = Math.cos(radians) * speed;
    			var vy:Number = Math.sin(radians) * speed;
    			this.x +=  vx;
    			this.y +=  vy;
    		}
    
    		private function movingRange():void
    		{
    			if (parent)
    			{
    				if (this.x < MinX)
    				{
    					removeEventListener(Event.ENTER_FRAME,enterFrameHandler);
    					parent.removeChild(this);
    				}
    				else if (this.x > MaxX)
    				{
    					removeEventListener(Event.ENTER_FRAME,enterFrameHandler);
    					parent.removeChild(this);
    				}
    				else if (this.y < MinY)
    				{
    					removeEventListener(Event.ENTER_FRAME,enterFrameHandler);
    					parent.removeChild(this);
    				}
    				else if (this.y > MaxY)
    				{
    					removeEventListener(Event.ENTER_FRAME,enterFrameHandler);
    					parent.removeChild(this);
    				}
    			}
    
    		}
    
    
    	}
    }
    
  • 相关阅读:
    《家庭财务总管》升级了(1.0.0.1)
    谁拥有接口?
    VScode调试C++工程
    NVIDIA显卡原生管理查询功能nvidiasmi的部分使用功能
    python版本的两款NVIDIA显卡管理查询工具
    pytorch之网络参数统计 torchstat & torchsummary
    电脑、笔记本、手机维修经验分享网站,专业领域网站
    Python使用pynvml查看GPU信息
    【转载】 Ubuntu下使用VSCode的launch.json及tasks.json编写
    笔记本挑电源适配器吗,是不是电压相同情况下保证功率大于等于原装适配器就可以保证笔记本正常运行???
  • 原文地址:https://www.cnblogs.com/602147629/p/1947178.html
Copyright © 2011-2022 走看看